Как с ansible я могу получить доступ к некоторому значению, которому предшествует случайный ключ в многоуровневом файле json - PullRequest
0 голосов
/ 03 октября 2019

Я запускаю ANSIBLE Playbook, который выводит информацию в формате JSON. Этот массив имеет цикл, который имеет несколько не идентичных ключей, таких как " / VRF1 / 192.168.10.10 " с разными значениями. Пожалуйста, смотрите ниже, меня интересуют "адрес", "имя", "monitor_status", "Availability_status", "status_description" и "session_status":

ok: [1.1.1.1] => {
    "BigIP_facts": {
        "ansible_facts": {
            "node": {
                "/VRF1/10.10.10.10": {
                            "address": "10.10.10.10",
                            "connection_limit": 0,
                            "description": "",
                            "dynamic_ratio": 1,
                            "monitor_rule": {
                                "monitor_templates": [
                                    "/VRF1/icmp-60s"
                                ],
                                "quorum": 0,
                                "type": "MONITOR_RULE_TYPE_SINGLE"
                            },
                            "monitor_status": "MONITOR_STATUS_DOWN",
                            "name": "10.10.10.10",
                            "object_status": {
                                "availability_status": "AVAILABILITY_STATUS_RED",
                                "enabled_status": "ENABLED_STATUS_ENABLED",
                                "status_description": "/VRF1/icmp-60s: No successful responses received before deadline. @2019/09/20 13:04:38. "
                            },
                            "rate_limit": 0,
                            "ratio": 1,
                            "session_status": "SESSION_STATUS_ENABLED"
                },
                "/VRF1/20.20.20.20": {
                            "address": "20.20.20.20",
                            "connection_limit": 0,
                            "description": "",
                            "dynamic_ratio": 1,
                            "monitor_rule": {
                                "monitor_templates": [
                                    "/Common/gateway_icmp"
                                ],
                                "quorum": 0,
                                "type": "MONITOR_RULE_TYPE_SINGLE"
                            },
                            "monitor_status": "MONITOR_STATUS_DOWN",
                            "name": "20.20.20.20",
                            "object_status": {
                                "availability_status": "AVAILABILITY_STATUS_RED",
                                "enabled_status": "ENABLED_STATUS_ENABLED",
                                "status_description": "/Common/gateway_icmp: No successful responses received before deadline. @2019/09/20 13:04:58. "
                            },
                            "rate_limit": 0,
                            "ratio": 1,
                            "session_status": "SESSION_STATUS_ENABLED"
                }

          }
       }
    }
}

1 Ответ

0 голосов
/ 04 октября 2019

Фильтр dict2items позволяет вам обойти это:

- name: show the monitor statuses
  debug:
    msg: >-
     {{ BigIP_facts.ansible_facts.node
     | dict2items
     | map(attribute="value.monitor_status")
     | list }}

Подставляя туда свои map() или {% for kv in (BigIP_facts.ansible_facts.node | dict2items) %}, если с ним легче работатьимперативный код

...