Anible playbook с циклом json не работает, если ключ json имеет тире в имени

Ansible playbook не работает, если в имени ключа json есть тире, без тире все работает нормально.

Я пытался использовать from_json и json_query, но у меня та же проблема.

Это вывод, который я должен разобрать:

ok: [2.2.2.2] => {
    "bgp": {
        "response": {
            "@status": "success",
            "result": {
                "entry": [
                    {
                        "@peer": "V4",
                        "@vr": "VR",
                        "ORF-entry-received": "0",
                        "aggregate-confed-as": "yes",
                        "config": {
                            "remove-private-as": "yes"
                        },
                        "connect-retry-interval": "15",
                        "established-counts": "0",
                        "holdtime": "0",
                        "holdtime-config": "90",
                        "idle-hold": "15",
                        "keepalive": "0",
                        "keepalive-config": "30",
                        "last-error": null,
                        "last-update-age": "634",
                        "local-address": "3.3.3.3",
                        "msg-total-in": "0",
                        "msg-total-out": "0",
                        "msg-update-in": "0",
                        "msg-update-out": "0",
                        "multi-hop-ttl": "1",
                        "nexthop-peer": "no",
                        "nexthop-self": "no",
                        "nexthop-thirdparty": "yes",
                        "open-delay": "0",
                        "passive": "no",
                        "password-set": "no",
                        "peer-address": "2.2.2.2",
                        "peer-capability": null,
                        "peer-group": "PEER_A",
                        "peer-router-id": "0.0.0.0",
                        "peering-type": "Unspecified",
                        "prefix-counter": null,
                        "prefix-limit": "5000",
                        "reflector-client": "not-client",
                        "remote-as": "65000",
                        "same-confederation": "no",
                        "status": "Connect",
                        "status-duration": "0",
                        "status-flap-counts": "49"
                    }
                ]
            }
        }
    }
}

Это мой текущий код (проблема возникает, когда я добавляю «одноранговый адрес»):

 - debug:
     msg:
       peer-address: "{{ item.peer-address }}"
       status: "{{ item.status }}"
   loop: "{{ (result_3.stdout|from_json).response.result.entry }}"

Это ошибка, которую я получаю:

{"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'peer'\n\nThe error appears to have been in '/etc/ansible/Playbook-v2.yml': line 49, column 6, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - debug:\n ^ here\n"}

Я хочу получить только два ключа и значения, которые я анализирую:

"peer-address": "2.2.2.2"
"status": "Connect"

Эй, могу ли я предложить изменить заголовок вашего вопроса на: «Цикл json не работает, когда ключ содержит тире», я думаю, что это будет немного менее загромождено.

HermanTheGermanHesse 09.04.2019 21:03
Введение в Ansible Roles
Введение в Ansible Roles
Ansible - это отличный инструмент управления конфигурацией, который можно использовать для автоматизации настройки или развертывания на большом...
2
1
1 138
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это ваша проблема здесь:

peer-address: "{{ item.peer-address }}"

Имя peer-address не является допустимым идентификатором (в синтаксисе Jinja, как и в большинстве языков, имена переменных не могут включать -). Вместо этого вы можете использовать альтернативный синтаксис для ссылки на ключи:

peer-address: "{{ item['peer-address'] }}"

Спасибо! Я думал, что делаю что-то очень неправильно

Kostas Demiris 30.11.2021 16:18

Другие вопросы по теме