我正在尝试使用来自 API 的 JSON 响应来查找我尝试使用主机名备份的 VM 的 UUID。API 返回一个哈希列表,其中包括该主机名的主机名和 UUID。当我提供主机名时,我想让 Ansible 返回机器的 UUID。
这是来自 API 的响应示例,我将其存储在 networker_vms
{
"networker_vms.json.vms": [
{
"hostname": ""
},
{
"hostname": ""
},
{
"hostname": "server1.company.com",
"uuid": "1ef92350-a5e3-8df3-6106-208a88aad352"
},
{
"hostname": "server2.company.com",
"uuid": "5003006d-23f4-a515-3722-181238489896"
},
{
"hostname": "server3.company.com",
"uuid": "50640076-07ae-571d-5e69-2183db42d2ee"
},
{
"hostname": "server4.company.com",
"uuid": "500410b1-505a-7539-5efd-89131d671b0a"
},
{
"hostname": "server5.company.com",
"uuid": "5024014b-e788-12a9-bcf6-5475ae50bf7c"
},
{
"hostname": "server6.company.com",
"uuid": "51462200-1abf-1c09-5007-fa72f76854fc"
}
],
}
我能够获得与具有以下 Ansible 片段的主机名一致的 UUID,但是当将“mynames”变量切换为 {{ ansible_hostname }} 之类的东西时,我无法让代码工作 - 我收到错误“意外失败期间模块执行”。我猜这与花括号的堆叠有关,但我不确定....
- name: debug my_uuid
debug:
msg: "{{ mynames | map('extract', dict(networker_vms.json | json_query('vms[].[hostname,uuid]'))) }}"
vars:
mynames:
- server2.company.com
对我来说,搜索特定主机名的 API 调用结果并让 Ansible 将相应的 uuid 放入事实或变量中的最佳方法是什么?
谢谢!