%20%E3%82%92%E8%BF%94%E3%81%99%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
win_command
通常、Ansible が/ win_shell
/を使用して PowerShell スクリプトを開始するとwin_psexec
、エラーが発生しない限り、「変更済み」が返されます。これは、当然ながらスクリプトが何を行ったかすべてを把握しているわけではないためです。
PowerShell スクリプトでは任意の終了コードを返すことができるため、終了コードなどを使用して、変更が必要なかったことを Ansible に通知し、Ansible が「ok」ステータスを返す方法はありますか? それとも、何があっても常に「変更済み」を返しますか (失敗がないと仮定)?
答え1
見つけたと思う。パワーシェルモジュールは$Ansible
PowerShell 変数にアクセスし、コントローラーに返される情報を変更できます。
からパワーシェルドキュメンテーション:
$Ansible.Result
そのままコントローラーに返される値です。$Ansible.Diff
ansible.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
完全に許容されることに注意してください。