Назад | Перейти на главную страницу

Как мне найти имя второй сетевой карты с помощью ansible?

Я развертываю что-то с Ansible на хосте Linux, и мне нужно, чтобы он слушал только второй сетевой адаптер на хосте.

Глядя на доступные факты, я вижу, что в ansible_interfaces перечислены все мои сетевые адаптеры, например

 "ansible_interfaces": [
        "lo", 
        "ens9f0", 
        "ens9f1"
 ]

Я знаю, что это не так, поэтому могу сбрасывать со счетов это. И, посмотрев на ansible_default_ipv4.alias, я вижу, что мой основной - ens9f0.

В пьесе / сборнике сценариев, как я могу определить, что ens9f1 является второстепенным?

Вариант использования в том, что я хочу сделать в шаблоне что-то вроде следующего:

Listen {{ ansible_second_nic.ipv4.address }}

Каждая машина, на которой я работаю, может иметь разные имена сетевых адаптеров, поэтому я не могу жестко запрограммировать их в своих ролях. Исторически я бы просто предположил, что eth1, но это уже небезопасно.

Взять ansible_interfaces, вычесть 'lo' и ansible_default_ipv4.alias, возьмите первый элемент оставшегося списка:

- debug:
    msg: "{{ ansible_interfaces | difference(['lo',ansible_default_ipv4.alias]) | first }}"

Я заметил, что сетевые карты в "ansible_interfaces" не всегда возвращаются по порядку (я имею дело с 3, и мне нужно знать, какая из них вторая). Так что вам, возможно, придется сначала пропустить его через sort:

- debug:
msg: "{{ ansible_interfaces | difference(['lo',ansible_default_ipv4.alias]) | sort | first }}"

Я пробовал использовать «facter_interfaces» вместо «ansible_interfaces», потому что он возвращает сетевые адаптеры по порядку, но я, похоже, не могу управлять этим выводом ... возможно, потому что это строка вместо списка? Я слишком новичок, чтобы знать.