ansible - ansible/jinja2 how to get dict from list of merged dicts
问题描述
I'm trying to get a dictionary from list of dictionaries, where: key - it is value of all merged dictionaries items; value - list of items name included into some item.
Another words I need to get dictionary of all roles (as keys) and name of item that has this role (as values).
Example data yaml:
hostgroups:
- name: a-node
roles:
- aaa
- bbb
- ccc
- ddd
- eee
- name: b-node
roles:
- ccc
- ddd
- name: c-node
roles:
- ccc
- ddd
- zzz
- name: d-node
roles:
- ccc
- ddd
I'd like to get file like:
aaa:
a-node
bbb:
b-node
ccc:
a-node
b-node
c-node
d-node
ddd:
a-node
b-node
c-node
d-node
eee:
a-node
zzz:
c-node
It is easy on python, but very difficult on ansible. How to do that?
解决方案
这是您要查找的代码吗?
vars:
hostgroups:
...
role_groups: {}
tasks:
- set_fact:
role_list: "{{ hostgroups|json_query('[].roles')|flatten|unique }}"
- set_fact:
role_groups: "{{ role_groups|combine( { item: hostgroups|json_query(query) } ) }}"
vars:
query: "[?roles.contains(@, '{{ item }}')].name"
loop: "{{ role_list }}"
推荐阅读
- javascript - 通过 URL 打开 Accordion - 深度链接(基础 6.4.3)不起作用
- scala - 限制数据帧分区的最大大小
- git - 为什么 git checkout 不删除新文件?
- ios - 如何比较 AnyObject 是
或不? - excel - 为什么 Visual Basic 编辑器将科学记数法转换为以 # 结尾的数字?
- laravel - laravel SAML 获取 NameId 值
- javascript - 您如何使用 Jest 模拟 Firebase Firestore 方法?
- node.js - 在这里使用@ts-ignore 好吗?
- javascript - ionicon 存在于 DOM 中但不可见(宽度为 0px)
- javascript - 动态 Javascript 地图合并