使用when关键字,当when后面指定的条件满足时,该tasks中指定的某个任务才会被执行
1)When语句
* 在when后面使用表达式,当表达式结果为True则执行
案例:
~~~
tasks:
- name: "shut down Debian flavored systems"
command: /sbin/shutdown -t now
when: ansible_os_family == "Debian"
(当操作系统为debian时就执行关机操作)
---
- hosts: webserver
user: admin
become: yes
vars:
- username: user01
tasks:
- name: create {{ username }} user
user: name={{ username }}
when: ansible_fqdn == "node2.51yuki.cn"
(当主机名为node2.51yuki.cn就在该机器上创建用户user01)
~~~
~~~
---
- hosts: webserver
user: admin
become: yes
tasks:
- name: host 192.168.20.138 run this task
debug: msg="{{ansible_default_ipv4.address}}"
when: ansible_default_ipv4.address == "192.168.20.138"
- name: all host run this task
shell: hostname
register: info
- name: hostname is node2 run this task
debug: msg="{{ansible_fqdn}}"
when: info['stdout']=="node2.51yuki.cn"
~~~
* 可以使用列表形式来表示,当多个条件同时满足才执行
~~~
tasks:
- name: "shut down CentOS 6 systems"
command: /sbin/shutdown -t now
when:
- ansible_distribution == "CentOS"
- ansible_distribution_major_version == "6"
(只有当系统是centos,并且版本为6的机器上执行)
~~~
* 使用变量进行判断
~~~
vars:
epic: true
tasks:
- shell: echo "This certainly is epic!"
when: epic
~~~
* 与循环一起使用
~~~
tasks:
- command: echo {{ item }}
with_items: [ 0, 2, 4, 6, 8, 10 ]
when: item > 5
~~~
* 角色包含使用when
~~~
- include: tasks/sometasks.yml
when: "'reticulating splines' in output"
- hosts: webservers
roles:
- { role: debian_stock_config, when: ansible_os_family == 'Debian' }
~~~
- 第一章:Ansible基础入门
- 第二章:Ansible系列手册
- 第一节:Ansible系列之主机清单
- 第二节:Ansible系列之变量
- 第三节:Ansible系列之YAML
- 第四节:Ansible系列之条件判断
- 第五节:Ansible系列之循环
- 第六节: Ansible系列之tags
- 第七节:Ansible系列之Jinja2
- 第三章:Ansible系列之模块
- 第一节:user模块
- 第二节:group模块
- 第三节:cron模块
- 第四节:copy模块
- 第五节: file模块
- 第六节:yum模块
- 第七节:service模块
- 第八节:shell模块
- 第九节:script模块
- 第十节:setup模块
- 第十一节:filesystem和mount模块
- 第十二节:synchronize模块
- 第十三节: get_url模块
- 第十四节: package模块
- 第十五节:stat模块
- 第十六节:unarchive模块
- 第十七节: commang模块
- 第四章:Ansible-playbook介绍
- 第五章:Ansible系统环境
- 第一节:Ansible Role 系统环境之epel设置