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 -a10 when: (ansible_facts['distribution'] == "CentOS" and ansible_facts['distribution_major_version'] == "6") or11 (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 -a10 when:11 - ansible_facts['distribution'] == "CentOS"12 - ansible_facts['distribution_major_version'] == "7"
2. 案例:
2.1) ansible-playbook进行when判断是centos还是Ubuntu系统后在安装http1 [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=present10 when:11 - ansible_pkg_mgr == 'yum'12 notify: restart httpd13 14 - name: "Update apache version - apt"15 apt: name=apache2 state=present update_cache=yes16 when:17 - ansible_pkg_mgr == 'apt'18 notify: restart apache219 20 21 handlers:22 - name: restart apache223 service: name=apache2 state=restarted24 - name: restart httpd25 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