有没有办法在 Ansible 2.0 中为变量提供条件语句?
中将有公共变量(例如location、timezone、domain、lang、language、paper、time等),$ROLES_PATH/vars/main.yml
并且可能会在 playbook 和/或 Jinja2 模板中调用/使用,如下所示:
'{{ target_location }}'
'{{ target_timezone }}'
'{{ target_domain }}'
'{{ target_lang }}'
'{{ target_language }}'
'{{ target_paper }}'
'{{ target_time }}'
但是,target_*
当目标机器的 IP 地址属于 if/else 语句中所述的子网之一时,变量的值将自动更改。或者,当目标机器属于清单文件中的组(按位置)时,可以构造条件。
$ROLES_PATH/vars/main.yml 中变量的伪代码
---
target_location: '{{ location }}'
target_timezone: '{{ timezone }}'
target_domain: '{{ domain }}'
target_lang: '{{ lang }}'
target_language: '{{ language }}'
target_paper: '{{ paper }}'
target_time: '{{ time }}'
if {{ ansible_eth0.ipv4.address }} belongs to 192.168.1.0/24 or 172.16.1.0/24 or 10.10.1.0/24 then
location: "London"
timezone: "Europe/London"
domain: "uk.example.com"
lang: "en_GB.UTF-8"
language: "en_GB:en"
paper: "en_GB.UTF-8"
time: "en_GB.UTF-8"
elif {{ ansible_eth0.ipv4.address }} belongs to 192.168.2.0/24 or 172.16.2.0/24 or 10.10.2.0/24 then
location: "Tokyo"
timezone: "Asia/Tokyo"
domain: "jp.example.com"
lang: "ja_JP.UTF-8"
language: "ja_JP"
paper: "ja_JP.UTF-8"
time: "ja_JP.UTF-8"
elif {{ ansible_eth0.ipv4.address }} belongs to 192.168.3.0/24 or 172.16.3.0/24 or 10.10.3.0/24 then
location: "Sydney"
timezone: "Australia/Sydney"
domain: "au.example.com"
lang: "en_AU.UTF-8"
language: "en_AU:en"
paper: "en_AU.UTF-8"
time: "en_AU.UTF-8"
else
location: "Los Angeles"
timezone: "America/Los_Angeles"
domain: "example.com"
lang: "en_US.UTF-8"
language: "en_US:en"
paper: "en_US.UTF-8"
time: "en_US.UTF-8"
fi
有没有办法按照最佳实践在 Ansible 2.0 中实现上述目标?