when 条件
基本用法
使用 when 条件来控制任务或角色是运行还是被跳过。这通常用于根据目标系统的事实更改播放行为。考虑一下这本剧本:
- hosts: all
tasks:
- include: Ubuntu.yml
when: ansible_os_family == "Ubuntu"
- include: RHEL.yml
when: ansible_os_family == "RedHat"
Ubuntu.yml
和 RHEL.yml
包含一些特定于分布的逻辑。
另一种常见用法是将结果限制为某些 Ansible 库存组中的结果。考虑此库存文件:
[dbs]
mydb01
[webservers]
myweb01
这本剧本:
- hosts: all
tasks:
- name: Restart Apache on webservers
become: yes
service:
name: apache2
state: restarted
when: webservers in group_names
这是使用 group_names
魔术变量 。
条件语法和逻辑
单一条件
句法
when: (condition)
例
when: ansible_os_family == "Debian"
when: ansible_pkg_mgr == "apt"
when: myvariablename is defined
布尔过滤器
例
when: result|failed
多个条件
句法
When: condition1 and/or condition2
示例(简单)
when: ansible_os_family == "Debian" and ansible_pkg_mgr == "apt"
示例(复杂)
使用括号清晰或控制优先级。AND
的优先级高于 OR
。
条款可以跨越行:
when:
ansible_distribution in ['RedHat', 'CentOS', 'ScientificLinux'] and
(ansible_distribution_version|version_compare('7', '<') or
ansible_distribution_version|version_compare('8', '>='))
or
ansible_distribution == 'Fedora'
or
ansible_distribution == 'Ubuntu' and
ansible_distribution_version|version_compare('15.04', '>=')
请注意使用括号将第一个分布检查中的或分组。