Ansibleは、バージョン1.4以降では、次のようにこの動作を指定する方法を提供します。
- name: Fail task when the command error output prints FAILED command: /usr/bin/example-command -x -y -z register: command_result failed_when: "'FAILED' in command_result.stderr"
しかし、一般的な戻り値すでに含まれて.failed
います.changed
。
私の考えでは、これらの特性は矛盾しています。正式な解決策はありますか? Ansibleはそのうちの1つを最初に評価し、後者に影響を与えるようにfailed_when
定義しますか?changed_when
他の効果を見ずに両方を評価することを定義しますか?
たとえば、定義された動作は何ですか?
command_result.failed
failed_when
表現内でcommand_result.changed
changed_when
表現内でcommand_result.failed
changed_when
表現内でcommand_result.changed
changed_when
表現内で
たとえば、3番目の結果をより明確に説明すると、次の結果がどれだけうまく定義されているか(信頼できるように)に興味があります。
- package:
name: systemd
state: present
check_mode: yes
register: command_result
failed_when: command_result.changed
私がAnsible 2.0以上に興味があるとしましょう。
答え1
これは正しいとは思わない。
あなたの例はプレイブックに別のルートを追加します。 systemdがインストールされていない場合は、インストールしたときと出力が異なります。最初の実行後にインストールされます。これはAnsible原則に違反します。
等級
演算を一度行った結果が中間演算なしで繰り返し演算を行った結果とまったく同じであれば、その演算は冪等性があります。
それでもこれを行う場合は、できるだけ明示的に説明してください。
コマンドを実行してwhich systemctl
出力を登録することをお勧めします。 systemd インストールの出力を確認すると、失敗した操作によって失敗します。
これはまだ非常に興味深い質問です。
実際の文書がないようです。調べるべきだと思います。
すべての出来事をすべて捕まえたら良いです:) ところで、今はチャートを埋めることはできません。
script.yml:
---
- name: test some stuff
hosts: all
tasks:
- include_tasks: tasks.yml
with_items:
- { data: ping, changed: true }
- { data: ping, changed: false }
- { data: crash, changed: true }
- { data: crash, changed: false }
アクション.yml
---
- name: Check for command_result is defined and command_result
ping:
data: "{{ item.data }}"
register: command_result
changed_when: item.changed
failed_when: command_result is defined and command_result
ignore_errors: true
- name: Check for command_result is defined and command_result
file:
path: ./file
register: command_result
changed_when: item.changed
failed_when: command_result is defined and command_result
ignore_errors: true
- name: Check for command_result
ping:
data: "{{ item.data }}"
register: command_result
changed_when: item.changed
failed_when: command_result
ignore_errors: true
- name: Check for command_result
file:
path: ./file
register: command_result
changed_when: item.changed
failed_when: command_result
ignore_errors: true
- name: Check for command_result.changed is defined and command_result.changed
ping:
data: "{{ item.data }}"
register: command_result
changed_when: item.changed
failed_when: command_result.changed is defined and command_result.changed
- name: Check for command_result.changed is defined and command_result.changed
ping:
data: "{{ item.data }}"
register: command_result
changed_when: item.changed
failed_when: command_result.changed is defined and command_result.changed
ignore_errors: true
- name: Check for command_result.changed
ping:
data: "{{ item.data }}"
register: command_result
changed_when: item.changed
failed_when: command_result.changed
ignore_errors: true
- name: Check for command_result.changed
file:
path: ./file
register: command_result
changed_when: item.changed
failed_when: command_result.changed
ignore_errors: true