• hosts: app_hosts remote_user: root gather_facts: false tasks:
    • name: 'stop app1' ansible.builtin.shell: | cd /opt/app1/bin pwd sh shutdown.sh register: shell_result1

    • debug: var: shell_result1.stdout_lines when: stop_app == 'app1'

    • name: 'stop app2' ansible.builtin.shell: | cd /opt/app2/bin pwd sh shutdown.sh register: shell_result

    • debug: var: shell_result.stdout_lines when: stop_app == 'app2'

根据提供的脚本,两个 when 条件的 shell 都会执行,是因为 when 条件只是在执行 debug 任务时进行判断,不会影响前面的 shell 任务是否执行。因此,即使第一个 when 条件不满足,第一个 shell 任务也会执行,只是在执行 debug 任务时不会输出结果。如果想要在第一个 when 条件不满足时不执行第一个 shell 任务,可以将其放在一个条件块中,如下所示:

- name: 'stop app1'
  ansible.builtin.shell: |
    cd /opt/app1/bin
    pwd
    sh shutdown.sh
  register: shell_result1
  when: stop_app == 'app1'

- name: 'stop app2'
  ansible.builtin.shell: |
    cd /opt/app2/bin
    pwd
    sh shutdown.sh
  register: shell_result2
  when: stop_app == 'app2'

- debug:
    var: shell_result1.stdout_lines
  when: stop_app == 'app1'

- debug:
    var: shell_result2.stdout_lines
  when: stop_app == 'app2'

这样,当 stop_app 不等于 app1 时,第一个任务就不会执行。

Ansible 脚本中 when 条件与任务执行顺序详解

原文地址: https://www.cveoy.top/t/topic/lOwU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录