botang 发表于 2020-8-12 22:15:49

ANSIBLE13(failed_when和changed_when)

本来会执行成功:
---
- name: failed_when
hosts: server3.example.com
tasks:
- name: run user creation script
    shell: "echo SPOTO"
    register: v_create
#failed_when: '"already exists" not in v_create.stderr'
#ignore_errors: yes

- name: debug info
    debug:
      var: v_create
                  但是要有条件地让它执行失败:
---
- name: failed_when
hosts: server3.example.com
tasks:
- name: run user creation script
    shell: "echo SPOTO"
    register: v_create
    failed_when: '"SPOTO" in v_create.stdout'
    ignore_errors: yes

- name: debug info
    debug:
      var: v_create


$ ansible-playbookv6-5_server3.ymlPLAY *************************************************************************************************************************************************************

TASK *********************************************************************************************************************************************************
ok:

TASK ************************************************************************************************************************************************
fatal: : FAILED! => {"changed": true, "cmd": "echo SPOTO", "delta": "0:00:00.003968", "end": "2020-08-15 15:33:56.816235", "failed_when_result": true, "rc": 0, "start": "2020-08-15 15:33:56.812267", "stderr": "", "stderr_lines": [], "stdout": "SPOTO", "stdout_lines": ["SPOTO"]}
...ignoring

TASK **************************************************************************************************************************************************************
ok: => {
    "v_create": {
      "changed": true,
      "cmd": "echo SPOTO",
      "delta": "0:00:00.003968",
      "end": "2020-08-15 15:33:56.816235",
      "failed": true,
      "failed_when_result": true,
      "rc": 0,
      "start": "2020-08-15 15:33:56.812267",
      "stderr": "",
      "stderr_lines": [],
      "stdout": "SPOTO",
      "stdout_lines": [
            "SPOTO"
      ]
    }
}

PLAY RECAP *********************************************************************************************************************************************************************
server3.example.com      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=1


---
- name: failed_when
hosts: server3.example.com
tasks:
- name: run user creation script
    shell: "echo SPOTO"
    register: v_fail

- name: debug info
    fail:
      msg: "XXXXXXXXXXXXX"
    when: '"SPOTO" in v_fail.stdout'
下面是changed_when(非要把绿的说黄的,黄的才会触发handlers):

---
- name: changed_when
hosts: webgroup
tasks:
- name: test service state
    service:
      name: sshd
      state: started
      enabled: yes
    register: v_result
    changed_when: "'running' in v_result.status.SubState "
    notify:
      - h_srv_restart

#- name: debug
#    debug:
#      var: v_result

handlers:
- name: h_srv_restart
    service:
      name: httpd
      state: restarted
反过来,非要把黄的说成绿的:
- name: another tasks
hosts: srvgroup
tasks:
- name: check date
    shell: "date"
    register: v_date
    changed_when: false

- debug:
      var: v_date


   


页: [1]
查看完整版本: ANSIBLE13(failed_when和changed_when)