0
以下任務正在運行,無論我設置爲ansible_distribution。ansible忽略條件不包裹在jinja2格式
- name: install packages
yum: name={{item.name}} state=installed
when: item.when
with_items:
- { name: 'telnet', when: "ansible_distribution == 'CentOS'" }
- { name: 'net-tools', when: "ansible_distribution == 'Debian'" }
- { name: 'net-tools', when: "ansible_distribution == 'blahblahblah'" }
結果
TASK [Gathering Facts] ***************************************************************************************************************************************************************************************
ok: [172.16.2.3]
TASK [test : install packages] *********************************************************************************************************************************************************************************
ok: [172.16.2.3] => (item={u'when': u"ansible_distribution == 'CentOS'", u'name': u'telnet'})
ok: [172.16.2.3] => (item={u'when': u"ansible_distribution == 'Debian'", u'name': u'net-tools'})
ok: [172.16.2.3] => (item={u'when': u"ansible_distribution == 'blahblahblah'", u'name': u'httpd'})
這裏是我的ansible版本
ansible 2.3.0.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
python version = 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.520150623 (Red Hat 4.8.5-11)]
然而,當包裹的時候條件,像這樣"{{item.when}}"
Jinja2的格式,我獲得以下儘管有警告。
TASK [test : install packages] *********************************************************************************************************************************************************************************
[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: {{item.when}}
skipping: [172.16.2.3] => (item={u'when': u"ansible_distribution == 'blahblahblah'", u'name': u'httpd'})
skipping: [172.16.2.3] => (item={u'when': u"ansible_distribution == 'Debian'", u'name': u'net-tools'})
ok: [172.16.2.3] => (item={u'when': u"ansible_distribution == 'CentOS'", u'name': u'telnet'})
任何想法如何我可以重寫這個任務,而不必包裝jinja2格式的when條件?
它不會忽略,它會盡職地檢查條件表達式的值,並且它是一個非空字符串值,它的計算結果爲「true」。通常,這種體系結構之間的區別是通過包含不同的任務文件或變量文件來實現的。 – techraf