我有这个示例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" }
]
}
如果有人有这样做的想法? 非常感谢您的帮助 最好的问候
答案 0 :(得分:1)
下面的任务可以做到
- 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
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')
}}"