我正在尝试构建启动角色的条件,以便它仅在变量与另一个变量中的列表的值匹配的服务器上运行。
它是如何工作的:
变量:
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 }
在这种情况下,角色将在变量类型 = cell 或 cell2 的服务器上启动。
问题是,我如何设置条件以便角色在所有类型 = cell 或 cell2 或 cell3 或 cell4 的服务器上启动,也就是说,考虑“architecture.WebSphere”中的所有嵌套列表
我试图提出一个条件:
when: type in architecture.WebSphere.items
但它不起作用
答案1
问:“我如何设置条件,以便角色在所有类型 = cell 或 cell2 或 cell3 或 cell4 的服务器上启动,也就是说,考虑‘architecture.WebSphere’中的所有嵌套列表?”
答:使用json_查询。 例如
- 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)