1

我正在尝试设置一个带有 ansible 的 linux docker 主机。众所周知,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 ?

4

1 回答 1

2

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

可以使用set_fact 步骤本身的sort jinja2 过滤器对列表进行排序,如下所示,

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

调试给出,

ok: [localhost] => 
  interfaces_list:
  - ens192
  - ens224
于 2020-07-14T12:20:16.657 回答