【发布时间】:2021-04-23 14:24:22
【问题描述】:
我有一本包含以下项目的字典。
PID:
Cisco:
- A9K-MOD80-TR
- A9K-RSP440-TR
- ASR9001-LC
- SFP-10G-SR
上面的字典我想用下面的逻辑与下面的列表匹配,如果下面的任何part_id中存在“SFP-10G-SR”(或任何其他值存在),则将“制造商”替换为Cisco(在这种情况下,Cisco 是 dict PID 中的键)。
ok: [localhost] => (item={'hostname': '-', 'device_id': 287, 'serial': '-', 'Name': '-', 'Manufacturer': '', 'part_id': 'ASR9001-LC'})
ok: [localhost] => (item={'hostname': '-', 'device_id': 287, 'serial': '-', 'Name': '-', 'Manufacturer': '', 'part_id': 'SFP-10G-SR'})
我以某种方式设法让它工作,但它很丑陋,而且它的格式很奇怪,下面的代码。
- name: test
set_fact:
new_merged_list: "{{new_merged_list}} {{ item|combine({'Manufacturer': PID|dict2items|json_query(query)}) }}"
loop: "{{ merged_list | flatten(levels=1) }}"
vars:
query: "[?contains(value, '{{item.part_id }}')].key"
- debug:
msg: "{{ new_merged_list }}"
它给了我下面的输出
{
"msg": "
{'hostname': '-', 'device_id': 287, 'serial': '-', 'Name': '-', 'Manufacturer': ['Cisco'], 'part_id': 'ASR9001-LC'}
{'hostname': '-', 'device_id': 287, 'serial': '-', 'Name': '-', 'Manufacturer': ['Cisco'], 'part_id': 'SFP-10G-SR'}
}
如果我在“new_merged_list”上运行调试,我会收到以下消息
"msg": "AnsibleUnsafeText"
我想要的是将以上内容保留为字典,任何人都可以提供更好的解决方案,或者可以帮助将其转换回字典吗?在当前状态下,我在使用“new_merged_list”时遇到问题。
【问题讨论】:
标签: list dictionary ansible json-query