список заказов от ansible сетевых интерфейсов - PullRequest
1 голос
/ 14 июля 2020

Я пытаюсь настроить linux docker хост с ansible. как уже известно, docker создает сетевые интерфейсы. у моей машины также есть два сетевых интерфейса для работы в разных сетях. фрагмент playbook выглядит так:

    - name: Dump grep matching interfaces from ansible_interfaces
      set_fact:
         interfaces_list: "{{ ansible_interfaces | select('match', '^(ens)[0-9]+') | list
         }}"
    
    - name: Push 50-net.yaml
      template:
        src: netplan.j2
        dest: "/etc/netplan/50-net.yaml"
        owner: root
        group: root
        mode: u=rw,g=r,o=r

шаблон netplan.j2 как этот

network:
    ethernets:
        {{ interfaces_list[0] }}:
          addresses: [{{ prod_net_ip }}/24]
          gateway4: <gateway-ip>
          nameservers:
            addresses: [<dns-server-ip>]
          dhcp4: no
        {{ interfaces_list[1] }}:
          addresses: [{{ storage_net_ip }}/24]
          dhcp4: no
    version: 2

это просто для того, чтобы понять, что я пытаюсь сделать.

список_интерфейсов может выглядеть так "['ens224', 'ens192']"

, но сети определяются вручную, а не с DHCP, поэтому мне нужен список в правильном порядке. "['ens192', 'ens224']"

Как я могу заказать interfaces_list на первом или даже на другом шаге?

1 Ответ

1 голос
/ 14 июля 2020

Как я могу упорядочить interface_list на первом шаге или даже на другом шаге?

Список можно отсортировать с помощью фильтра sort jinja2 на самом шаге set_fact вот так,

- set_fact:
    interfaces_list: "{{ ansible_interfaces | select('match', '^(ens)[0-9]+') | sort | list }}"

отладка дает,

ok: [localhost] => 
  interfaces_list:
  - ens192
  - ens224
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...