ansible 当条件
示例
基本用法
使用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_namesmagic变量。
条件语法与逻辑
单一条件
语法
when:(condition)
例
when:ansible_os_family=="Debian"
when:ansible_pkg_mgr=="apt"
when:myvariablenameisdefined
布尔过滤器
例
when:result|failed
多种条件
语法
When:condition1and/orcondition2
示例(简单)
when:ansible_os_family=="Debian"andansible_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', '>=')
请注意,在第一次分配检查中使用括号将“或”分组。