Я пишу задачу 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 ...
- 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"
}
протестировано на анзибле 2.9.6
Начните новое воспроизведение, которое может быть в том же файле playbook.
- name: Deploy thing
hosts: my_group_name
tasks:
- name: Do thing
debug:
msg: thing
Не то условие, о котором вы просили. Однако более ясно, что происходит, поскольку игра запускает только хосты, соответствующие шаблону.