Ansible 脚本中 when 条件与任务执行顺序详解
- 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 时,第一个任务就不会执行。
原文地址: https://www.cveoy.top/t/topic/lOwU 著作权归作者所有。请勿转载和采集!