【发布时间】:2020-10-18 14:29:08
【问题描述】:
我有一个 Ansible playbook,它查询设备清单 API 并返回一个 JSON 结果,其中包含许多遵循这种格式的记录:
{
"service_level": "Test",
"tags": [
"Application:MyApp1"
],
"fqdn": "matestsvcapp1.vipcustomers.com",
"ip": "172.20.11.237",
"name": "matestsvcapp1.vipcustomers.com"
}
然后我遍历这些 ansible 任务以查询我关心的每个 IP 地址的 JSON 结果:
- name: Set JMESQuery
set_fact:
jmesquery: "Devices[?ip_addresses[?ip.contains(@,'{{ ip_to_query }}' )]].{ip: '{{ ip_to_query }}', tags: tags[], , service_level: service_level }"
- name: Store values
set_fact:
inven_results: "{{ (inven_results| default([])) + (existing_device_info.json | to_json | from_json | json_query(jmesquery)) }}"
然后我继续在 ansible 中做其他任务,将这些数据推送到其他系统中,一切正常。
但是,我刚刚收到管理层的请求,他们希望在我将这些数据推送到的某些系统中看到“服务级别”表示为标签。因此,我需要将 'tags' 和 'service_level' 项目组合起来,结果如下所示:
{
"tags": [
"Application:MyApp1",
"service_level:Test"
],
"fqdn": "matestsvcapp1.vipcustomers.com",
"ip": "172.20.11.237",
"name": "matestsvcapp1.vipcustomers.com"
}
我尝试修改 JMESPath 查询以使用 join function 将结果连接在一起,并尝试使用 combine or map 以“ansible”方式进行操作,但我无法让其中任何一个工作.
对处理这个问题的正确方法有什么想法吗?提前致谢!
注意:'tags' 是一个字符串列表,尽管它是用 key:value 格式编写的,但它实际上只是一个字符串。
【问题讨论】:
-
我不清楚您的数据到底是什么样的。您能否发布一个包含示例数据的最小剧本,以完全重现您尝试解决的问题?