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', '>=')
請注意使用括號將第一個分佈檢查中的或分組。