Получить значение из вывода задачи и отладить сообщение в Ansible Playbook - PullRequest
0 голосов
/ 19 декабря 2018

Мне нужно извлечь значение ipv4Address из вывода ниже JSON, используя set_fact.Наконец, в конечном итоге с некоторыми ошибками.Не могли бы вы предложить мне лучший способ.

Вывод JSON:

    "result_dns": {
      "ansible_facts": {
        "azure_dnsrecordset": [
            {
                "etag": "440922d5-b234-488a-8cbc-97b77f0fef8f",
                "id": "2",
                "name": "test2",
                "properties": {
                    "ARecords": [
                        {
                            "ipv4Address": "10.30.23.5"
                        }
                    ],
                    "TTL": 3600,
                    "fqdn": "test2.testzone.com."
                },
                "type": "Microsoft.Network/dnszones/A"

Я использую set_fact как показано ниже для получения ipv4Address.

    - name: name
      set_fact:
      host_name: "{{ result_dns.ansible_facts.azure_dnsrecordset map(attribute='ipv4Address') | list }}"

Я невозможность отфильтровать значение вышеуказанным методом.Можете ли вы предложить мне лучший способ фильтрации значения.

1 Ответ

0 голосов
/ 19 декабря 2018

Я думаю, что вас раздражает тот факт, что «azure_dnsrecordset» содержит список словарей.Существует только один, но я предполагаю, что в других условиях их может быть несколько.Это выполнит то, что вы просили, но если у вас есть более одной записи, вы можете обнаружить, что ваши требования более подробны, чем в этом вопросе:

# Presumes that you have a 'result_dns' variable set in Ansible containing the JSON
- set_fact:
    ip_s: "{{ ( ip_s | default([]) ) + [ item.1.ipv4Address ] }}"
  with_subelements:
    - "{{ result_dns.ansible_facts.azure_dnsrecordset }}"
    - properties.ARecords
- debug:
    msg: "{{ ip_s }}"

with_subelements , извлекает ключи изсписок словарей.

Это просто приведет к созданию списка IP-адресов, который может оказаться бесполезным в случае, если возвращено несколько наборов записей.Если вы сделаете что-то вроде:

ip_s: "{{ ( ip_s | default([]) ) + [ { 'etag': item.0.etag, 'ip_address': item.1.ipv4Address } ] }}"

, это даст вам список словарей, содержащих ключи 'etag' и 'ip_address', что даст вам возможность идентифицировать наборы записей, из которых они пришли.

Надеюсь, достаточно, чтобы вы начали.

...