Выход фильтра с ansible - PullRequest
       5

Выход фильтра с ansible

0 голосов
/ 04 февраля 2020

Итак, я подключаюсь с помощью ansible к соединительному устройству под управлением PicOS8. Я выдаю команду, которая имеет следующий вывод:

10.240.18.20,fe80::a94:efff:fe50:b516%eth0
fe80::a94:efff:fe71:d996%vlan.4,10.240.23.34
fe80::a94:efff:fe71:daa6%vlan.4,10.240.23.

Это не всегда стандартно, поскольку иногда адрес ipv4 предшествует ipv6, а иногда ipv6 вообще не существует.

Я регистрирую этот вывод, используя ansible register , скажем как smm_output .

Затем я хочу отобразить вывод, показывая только ip-адреса ipv4 (с пометкой ниже):

   - debug:
       msg: "{{ smm_output.stdout_lines | ipv4('address') }}"

, но вывод пуст. Не уверен, что я делаю здесь неправильно или как строго показывать IP-адреса ipv4 из этого вывода.

1 Ответ

1 голос
/ 05 февраля 2020

Вы должны просмотреть список stdout_lines и разбить строку на список. Попробуйте это:

- debug:
    msg: "{{ item.split(',') | ipv4('address') }}"
  loop: "{{smm_output.stdout_lines}}"

Вы также можете создать отдельный массив только с IPv4

- set_fact:
    ip4: []

- set_fact:
    ip4: "{{ ip4 + (item.split(',') | ipv4('address') )}}"
  loop: "{{smm_output.stdout_lines}}"

- debug:
    var: ip4

, который должен генерировать следующие выходные данные:

TASK [debug] ***********************************************************************************************************************************************************************************************************
ok: [127.0.0.1] => {
    "ip4": [
        "10.240.18.20",
        "10.240.23.34"
    ]
}
...