制作API GET cal我得到以下JSON结构:
{
"metadata": {
"grand_total_entities": 231,
"total_entities": 0,
"count": 231
},
"entities": [
{
"allow_live_migrate": true,
"gpus_assigned": false,
"ha_priority": 0,
"memory_mb": 1024,
"name": "test-ansible2",
"num_cores_per_vcpu": 2,
"num_vcpus": 1,
"power_state": "off",
"timezone": "UTC",
"uuid": "e1aff9d4-c834-4515-8c08-235d1674a47b",
"vm_features": {
"AGENT_VM": false
},
"vm_logical_timestamp": 1
},
{
"allow_live_migrate": true,
"gpus_assigned": false,
"ha_priority": 0,
"memory_mb": 1024,
"name": "test-ansible1",
"num_cores_per_vcpu": 1,
"num_vcpus": 1,
"power_state": "off",
"timezone": "UTC",
"uuid": "4b3b315e-f313-43bb-941b-03c298937b4d",
"vm_features": {
"AGENT_VM": false
},
"vm_logical_timestamp": 1
},
{
"allow_live_migrate": true,
"gpus_assigned": false,
"ha_priority": 0,
"memory_mb": 4096,
"name": "test",
"num_cores_per_vcpu": 1,
"num_vcpus": 2,
"power_state": "off",
"timezone": "UTC",
"uuid": "fbe9a1ac-cf45-4efa-9d65-b3257548a9f4",
"vm_features": {
"AGENT_VM": false
},
"vm_logical_timestamp": 17
},
]
}
在我的Ansible剧本中,我注册了一个包含此内容的变量。 我需要获得一个UUID列表“test-ansible1”和“test-ansible2”,但我很难找到最好的方法。 请注意,我有另一个变量,其中包含我需要查找UUID的名称列表。
需要使用这些UUID为与特定名称对应的所有UUID发出poweron命令。
你们会怎么做?
我采取了一些方法,但我似乎无法得到我想要的东西所以我更喜欢不受影响的意见。
P.S。:这就是Nutanix AHV作为API获取所有vms的回报。在我看来,我无法获得特定的VM JSON信息,只能获取所有VM。
感谢。
答案 0 :(得分:1)
以下是一些Jinja2魔法:
old_index value
new_index
DF1 0 a0
1 a1
2 a2
3 a3
DF2 0 b0
1 b1
2 b2
3 b3
DF3 0 c0
1 c1
2 c2
3 c3
说明:
- debug:
msg: "{{ mynames | map('extract', dict(test_json | json_query('entities[].[name,uuid]'))) | list }}"
vars:
mynames:
- test-ansible1
- test-ansible2
将原始json数据减少为元素列表,这些元素是两个项目的列表 - 名称值和uuid值:
test_json | json_query('entities[].[name,uuid]')
顺便说一句,您可以使用http://jmespath.org/来测试查询语句。
[
[
"test-ansible2",
"e1aff9d4-c834-4515-8c08-235d1674a47b"
],
[
"test-ansible1",
"4b3b315e-f313-43bb-941b-03c298937b4d"
],
[
"test",
"fbe9a1ac-cf45-4efa-9d65-b3257548a9f4"
]
]
应用于此类结构时(" touples"列表)生成字典:
dict(...)
然后我们将{
"test": "fbe9a1ac-cf45-4efa-9d65-b3257548a9f4",
"test-ansible1": "4b3b315e-f313-43bb-941b-03c298937b4d",
"test-ansible2": "e1aff9d4-c834-4515-8c08-235d1674a47b"
}
过滤器应用为per documentation,仅获取必需的元素:
extract