Я пытаюсь создать условие для запуска роли, чтобы она выполнялась только на серверах, переменная которых соответствует значениям из списка в другой переменной.
Как это работает:
Вар:
architecture:
WebSphere:
block_was_cluster_1:
- cell
- cell2
block_was_cluster_2:
- cell3
- cell4
И задача:
- name: Install
hosts: "{{ hosts }}"
roles:
- { role: download, when: type in architecture.WebSphere.block_was_cluster_1 }
В этом случае роль будет запущена на серверах, где тип переменной = ячейка или ячейка2.
Вопрос в том, как мне установить условие, чтобы роль запускалась на всех серверах, где type = cell или cell2, или cell3, или cell4, то есть с учетом всех вложенных списков в «architecture.WebSphere»
Я пытался поставить условие:
when: type in architecture.WebSphere.items
Но это не работает
Вопрос: «Как мне установить условие, чтобы роль запускалась на всех серверах, где type = cell или cell2, или cell3, или cell4, то есть с учетом всех вложенных списков в« architecture.WebSphere »?»
A: Используйте json_query. Например
- debug:
msg: "{{ architecture.WebSphere|json_query('*')|flatten }}"
- debug:
msg: "{{ item }} is in the architecture"
loop:
- cell
- cell4
- cell9
when: item in architecture.WebSphere|json_query('*')|flatten
дает
ok: [localhost] => {
"msg": [
"cell",
"cell2",
"cell3",
"cell4"
]
}
ok: [localhost] => (item=cell) => {
"msg": "cell is in the architecture"
}
ok: [localhost] => (item=cell4) => {
"msg": "cell4 is in the architecture"
}
skipping: [localhost] => (item=cell9)