Найдите ключ json, где другой ключ является условием в том же объекте в Ansible - PullRequest
0 голосов
/ 03 апреля 2020

Как вывести значение ключа как другой ключ в том же объекте, что и условие - я хочу вывести все " guest_name " в новый список, где " power_state " равно " poweredOn"

Я использую модуль vmware_vm_info и анализирую данные с помощью json_query

Вывод:

    {
        "guest_name": "Ubuntu sec 10.9",
        "ip_address": "",
        "power_state": "poweredOff",
    },

    {
        "guest_fullname": "Ubuntu Linux (64-bit)",
        "guest_name": "Ubuntu 10.8",
        "power_state": "poweredOn",
    },...]

Требуемый результат:

"guest_name": "name", "name2", ...

1 Ответ

0 голосов
/ 03 апреля 2020

Используйте selectattr для фильтрации всех poweredOn экземпляров, затем используйте map фильтр для извлечения guest_name из каждого экземпляра.

Учитывая, что json находится в my_var, вы можете сделать это следующим образом:

- debug:
    msg: "{{ my_var | selectattr('power_state', 'match', 'poweredOn') | map(attribute='guest_name') | list }}"

Будет выведен список экземпляров, которые «poweredOn»:

ok: [localhost] => {
    "msg": [
        "Ubuntu 10.8"
    ]
}
...