我正在编写一个 ansible (v2.9.6) 任务,该任务应仅针对特定组中的主机运行。我该如何编写子句where
来匹配该任务?
when: "'my_group_name' in {{ group_names }}"
出现以下错误
fatal: [hostname1.example.com]: FAILED! => {"msg": "The conditional check ''my_group_name' in {{ group_names }}' failed. The error was: template error while templating string: expected token ',', got 'string'. String: {% if 'my_group_name' in [u'apache_webservers', u'my_group_name', u'webservers', u'ubuntu_servers'] %} True {% else %} False {% endif %}\n\nThe error appears to be in ...
答案1
- name: test playbook
hosts: all
vars:
my_group: openvpn
tasks:
- name: debug
debug:
msg: 'my_group is: {{my_group}} , group_names are: {{group_names}}'
- debug:
msg: 'condition passed'
when: my_group in group_names
结果:
PLAY [test playbook] ************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************
ok: [host1]
ok: [host2]
TASK [debug] ********************************************************************************************************************************************************************************************************************************
ok: [host2] => {
"msg": "my_group is: openvpn , group_names are: ['openvpn']"
}
ok: [host1] => {
"msg": "my_group is: openvpn , group_names are: ['openvpn']"
}
TASK [debug] ********************************************************************************************************************************************************************************************************************************
ok: [host2] => {
"msg": "condition passed"
}
ok: [host1] => {
"msg": "condition passed"
}
在 ansible 2.9.6 上测试
答案2
开始一个新的剧本,可以在同一个剧本文件中。
- name: Deploy thing
hosts: my_group_name
tasks:
- name: Do thing
debug:
msg: thing
这不是您要求的 when 条件。但是,由于该游戏仅运行符合模式的主机,因此可以更清楚地了解正在发生的事情。