ansible-playbook流程控制-when条件判断

1. ansible-playbook添加判断
     when相当于shell脚本里的if 判断,when语句就是用来实现这个功能的,它是一个jinja2的语法,但是不需要双大括号,用法很简单
  1.1) 示例1:

 1 [root@test-1 when]# vim when_test1.yaml 
 2 [root@test-1 when]# cat when_test1.yaml 
 3 ---
 4 - hosts: web1
 5   gather_facts: yes
 6  
 7   tasks:
 8   - name: "IP if"
 9     debug: msg={{ansible_default_ipv4.address}}
10     when: ansible_default_ipv4.address == '192.168.200.133'
11 
12     # 注意 Ansible facts和vars 比如 ansible_os_family 应能被引用
13     # 直接写,不带双大括号。

  1.2) 示例2:使用括号对条件进行分组

 1 [root@test-1 when]# vim when_test2.yaml 
 2 [root@test-1 when]# cat when_test2.yaml 
 3 ---
 4 - hosts: localhost
 5   gather_facts: yes
 6  
 7   tasks:
 8     - name: "shut down CentOS 6 and Debian 7 systems"
 9       command: ls -a
10       when: (ansible_facts['distribution'] == "CentOS" and ansible_facts['distribution_major_version'] == "6") or
11             (ansible_facts['distribution'] == "Debian" and ansible_facts['distribution_major_version'] == "7")

1.3) 示例3:所有需要为true的多条件判读(逻辑“and”) 也可以指定为列表

 1 [root@test-1 when]# vim when_test3.yaml 
 2 [root@test-1 when]# cat when_test3.yaml 
 3 ---
 4 - hosts: localhost
 5   gather_facts: yes
 6  
 7   tasks:
 8     - name: "shut down CentOS 7 systems"
 9       command: ls -a
10       when:
11         - ansible_facts['distribution'] == "CentOS"
12         - ansible_facts['distribution_major_version'] == "7"

2. 案例:
  2.1) ansible-playbook进行when判断是centos还是Ubuntu系统后在安装http

 1 [root@test-1 when]# vim when_mc.yaml 
 2 [root@test-1 when]# cat when_mc.yaml 
 3 ---
 4 - hosts: localhost
 5   gather_facts: yes
 6  
 7   tasks:
 8   - name: "update apache version - yum"
 9     yum: name=httpd state=present
10     when:
11       - ansible_pkg_mgr == 'yum'
12     notify: restart httpd
13 
14   - name: "Update apache version - apt"
15     apt: name=apache2 state=present update_cache=yes
16     when:
17       - ansible_pkg_mgr == 'apt'
18     notify: restart apache2
19 
20 
21   handlers:
22     - name: restart apache2
23       service: name=apache2 state=restarted
24     - name: restart httpd
25       service: name=httpd state=restarted

  2.2) 配置文件检查

1 [root@test-1 when]# ansible-playbook  --syntax-check when_mc.yaml 
2 
3 playbook: when_mc.yaml

  2.3) 执行远程安装脚本

 1 [root@test-1 when]# ansible-playbook   when_mc.yaml 
 2 
 3 PLAY [localhost] *******************************************************************************************************************************
 4 
 5 TASK [Gathering Facts] *************************************************************************************************************************
 6 ok: [192.168.200.131]
 7 
 8 TASK [update apache version - yum] *************************************************************************************************************
 9 changed: [192.168.200.131]
10 
11 TASK [Update apache version - apt] *************************************************************************************************************
12 skipping: [192.168.200.131]
13 
14 RUNNING HANDLER [restart httpd] ****************************************************************************************************************
15 changed: [192.168.200.131]
16 
17 PLAY RECAP *************************************************************************************************************************************
18 192.168.200.131            : ok=3    changed=2    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0 

 

posted @ 2019-09-21 09:31  七月流星雨  阅读(13742)  评论(0编辑  收藏  举报