Ansible: присвоить JSON значение переменной - PullRequest
0 голосов
/ 12 марта 2020

Я использую модуль пользовательских фактов, чтобы вернуть JSON обратно в Ansible 2.9

ok: [Host] => {
    "msg": {
        "changed": false,
        "failed": false,
        "msg": "Successfully completed the view storage volume operation",
        "storage_status": {
            "Message": {
                "Controller": {
                    "AHCI.Embedded.3-1": {},
                    "RAID.Integrated.1-1": {
                        "Enclosure": {
                            "Enclosure.Internal.0-1:RAID.Integrated.1-1": {
                                "PhysicalDisk": [
                                    "Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1",
                                    "Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1"
                                ]
                            }
                        },
                        "VirtualDisk": {
                            "Disk.Virtual.0:RAID.Integrated.1-1": {
                                "PhysicalDisk": [
                                    "Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1",
                                    "Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1"
                                ]
                            }
                        }
                    }
                }
            },
            "Status": "Success"
        }
    }
}

И я хотел бы присвоить значение "Disk.Virtual.0:RAID.Integrated.1-1" переменной с помощью модуля set_fact. Используя следующий фильтр:

{{ disks['storage_status']['Message']['Controller']['RAID.Integrated.1-1']['VirtualDisk'] }}

Я могу просто выбрать следующее:

ok : [Host] => {
        "msg": {
            "Disk.Virtual.0:RAID.Integrated.1-1": {
                "PhysicalDisk": [
                    "Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1",
                    "Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1"
                ]
            }
        }
    }

Но я не могу понять, как захватить Disk.Virtual.0:RAID.Integrated.1-1 и назначить его переменная.

Любая помощь / руководство будет принята с благодарностью.

Спасибо

1 Ответ

1 голос
/ 12 марта 2020

Используйте dict поиск с .key:

  - debug:
      msg: "{{ lookup('dict', disks['storage_status']['Message']['Controller']['RAID.Integrated.1-1']['VirtualDisk']).key }}"

Дает:

TASK [debug] *****************************************
ok: [localhost] => {
    "msg": "Disk.Virtual.0:RAID.Integrated.1-1"
}

Чтобы назначить переменную (my_var), используйте set_fact:

  - set_fact:
      my_var: "{{ lookup('dict', disks['storage_status']['Message']['Controller']['RAID.Integrated.1-1']['VirtualDisk']).key }}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...