我有这个示例yaml文件(haproxy.yml):
---
rules:
aa:
PHP53:
- url: php53-1-aa.my-example.com
PHP55:
- url: php55-1-aa.my-example.com
PHP56:
- url: php56-1-aa.my-example.com
- url: php56-2-aa.my-example.com
- url: php56-3-aa.my-example.com
PHP72:
- url: php72-1-aa.my-example.com
- url: php72-2-aa.my-example.com
- url: php72-3-aa.my-example.com
bb:
PHP53:
- url: php53-1-bb.my-example.com
- url: php53-2-bb.my-example.com
- url: php53-3-bb.my-example.com
PHP55:
- url: php55-1-bb.my-example.com
PHP56:
- url: php56-1-bb.my-example.com
- url: php56-2-bb.my-example.com
- url: php56-3-bb.my-example.com
PHP72:
- url: php72-1-bb.my-example.com
- url: php72-2-bb.my-example.com
- url: php72-3-bb.my-example.com
cc:
PHP55:
- url: php55-1-cc.my-example.com
PHP56:
- url: php56-1-cc.my-example.com
- url: php56-2-cc.my-example.com
- url: php56-3-cc.my-example.com
...
我使用这个剧本来加载这个文件:
---
- name: 'stack-example'
hosts: localhost
gather_facts: no
tasks:
- name: 'include'
include_vars:
file: 'haproxy.yml'
- set_fact:
try: '{{ try|default({}) | combine(item.value) }}'
loop: '{{ lookup("dict", rules) }}'
- debug:
var: try
所有的文件都是两个解释和重现我的问题:-)
我需要使用set_fact
来处理我的变量。
我的主要目标是将所有PHP**合并/分组为一个组。这是我需要的一个例子,我用combine
map
lookup
尝试了很多东西,但都没有得到我期望的结果。
我试着这样做:
{
"PHP53": [
{ "url": "php53-1-aa.my-example.com" },
{ "url": "php53-1-bb.my-example.com" },
{ "url": "php53-2-bb.my-example.com" },
{ "url": "php53-3-bb.my-example.com" }
],
"PHP55": [
{ "url": "php55-1-aa.my-example.com" },
{ "url": "php55-1-bb.my-example.com" },
{ "url": "php55-1-cc.my-example.com" }
],
"PHP56": [
{ "url": "php56-1-aa.my-example.com" },
{ "url": "php56-2-aa.my-example.com" },
{ "url": "php56-3-aa.my-example.com" },
{ "url": "php56-1-bb.my-example.com" },
{ "url": "php56-2-bb.my-example.com" },
{ "url": "php56-3-bb.my-example.com" },
{ "url": "php56-1-cc.my-example.com" },
{ "url": "php56-2-cc.my-example.com" },
{ "url": "php56-3-cc.my-example.com" },
],
"PHP72": [
{ "url": "php72-1-aa.my-example.com" },
{ "url": "php72-2-aa.my-example.com" },
{ "url": "php72-3-aa.my-example.com" },
{ "url": "php72-1-bb.my-example.com" },
{ "url": "php72-2-bb.my-example.com" },
{ "url": "php72-3-bb.my-example.com" }
]
}
如果有人有这样的想法呢?非常感谢您的帮助,致以最诚挚的问候
发布于 2019-07-11 03:13:58
下面的任务可以做到这一点
- set_fact:
rules_grouped: "{{ rules_grouped|
default({})|
combine({item.0: item.1|json_query('[].value')|flatten})
}}"
loop: "{{ rules|
dict2items|
json_query('[*].value')|
map('dict2items')|list|flatten|
groupby('key')
}}"
要了解循环是如何工作的,请将其放入debug并逐步添加过滤器。
- debug
msg: "{{ rules|
dict2items
}}"
- debug
msg: "{{ rules|
dict2items|
json_query('[*].value')
}}"
- debug
msg: "{{ rules|
dict2items|
json_query('[*].value')|
map('dict2items')|list|flatten
}}"
- debug
msg: "{{ rules|
dict2items|
json_query('[*].value')|
map('dict2items')|list|flatten|
groupby('key')
}}"
https://stackoverflow.com/questions/56975784
复制相似问题