У меня есть конкретный вывод JSON, показанный ниже, с использованием фиктивных данных, загруженных внутри переменной в Ansible:
"nodes": {
"100.29.28.153": {
"agent": "UP",
"db": "UP",
"info": " ",
"type": "Master",
"xlog": "6C\/2400A990",
"xloginfo": ""
},
"100.29.28.154": {
"agent": "UP",
"db": "UP",
"info": " ",
"type": "Standby",
"xlog": "6C\/2400A990",
"xloginfo": ""
},
"100.29.28.155": {
"agent": "UP",
"db": "N\/A",
"info": " ",
"type": "Witness"
},
"100.29.28.163": {
"agent": "UP",
"db": "UP",
"info": " ",
"type": "Standby",
"xlog": "6C\/2400A990",
"xloginfo": ""
},
"100.29.28.165": {
"agent": "UP",
"db": "N\/A",
"info": " ",
"type": "Witness"
}
}
Как мне проанализировать это в Ansible и зарегистрировать новую переменную, используя type = Master в качестве средства выбора IP-адреса этого узла? В приведенном выше примере для новой переменной Ansible должно быть установлено значение "100.29.28.153", поскольку этот IP-адрес является главным узлом.

Например, объединив фильтр dict2items с JMESPath:
- set_fact:
my_var: "{{ nodes | dict2items | json_query('[?value.type==`Master`] | [0].key') }}"