来自 ansible 网络接口的订单列表

order list from ansible network interfaces

我正在尝试设置一个 linux docker 主机 w/ansible。 众所周知,docker 创建网络接口。 我的机器还有两个网络接口,用于不同网络的联网。 剧本片段如下所示:

    - 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

这只是为了了解我正在尝试做的事情。

interfaces_list 可以像这样
“['ens224','ens192']”

但网络是手动定义的,而不是使用 dhcp,所以我需要按正确顺序排列的列表。
"['ens192','ens224']"

如何在第一步或什至在另一步中订购 interfaces_list

How can i order the interfaces_list in the first step or even in another step?

可以在 set_fact 步骤本身使用 sort jinja2 过滤器对列表进行排序,

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

调试给出,

ok: [localhost] => 
  interfaces_list:
  - ens192
  - ens224