Ansible が PowerShell スクリプトを開始するときに、Ansible が「ok」(何も変更されていない) を返すようにするにはどうすればよいですか?

Ansible が PowerShell スクリプトを開始するときに、Ansible が「ok」(何も変更されていない) を返すようにするにはどうすればよいですか?

win_command通常、Ansible が/ win_shell/を使用して PowerShell スクリプトを開始するとwin_psexec、エラーが発生しない限り、「変更済み」が返されます。これは、当然ながらスクリプトが何を行ったかすべてを把握しているわけではないためです。

PowerShell スクリプトでは任意の終了コードを返すことができるため、終了コードなどを使用して、変更が必要なかったことを Ansible に通知し、Ansible が「ok」ステータスを返す方法はありますか? それとも、何があっても常に「変更済み」を返しますか (失敗がないと仮定)?

答え1

見つけたと思う。パワーシェルモジュールは$AnsiblePowerShell 変数にアクセスし、コントローラーに返される情報を変更できます。

からパワーシェルドキュメンテーション:

  • $Ansible.Resultそのままコントローラーに返される値です。
  • $Ansible.Diffansible.windows の 1.12.0 リリースで追加され、Ansible で解釈できる diff 結果に設定される辞書です。
  • $Ansible.Changedモジュールが変更を行ったかどうかを反映するために、true または false に設定できます。デフォルトでは、これは true に設定されています。
  • $Ansible.Failedスクリプトが失敗をコントローラーに返す場合は true に設定できます。
  • $Ansible.Tmpdirモジュールの終了後にクリーンアップされるスクラッチ場所として使用する一時ディレクトリへのパスです。
  • $Ansible.Verbosityこのプレイの Ansible の詳細レベルを表示します。スクリプトが詳細度に基づいて VerbosePreference/DebugPreference を設定できるようにします。1.9.0 で追加されました。

答え2

簡単に言えば、疑似コードの例として、0何も変更されなかった場合は で終了し、4何かが変更された場合は で終了し、何か問題が発生した場合は他のコードで終了することが想定される rc バリエーション シナリオに基づいています...

- name: some shell task
  ansible.windows.win_command: my_command
  register: my_command
  failed_when: my_command.rc | int not in [0,4]
  changed_when: my_command.rc | int == 4

詳細については、プレイブックのエラー処理

厳密に情報提供のみを目的としており、何も変更しないコマンドの場合は、changed_when: false完全に許容されることに注意してください。

関連情報