如何通过ansible用路由填充netplan配置文件

How to fill netplan config file with routes via ansible

我正在尝试使用 ansible 来管理 netplan。过去效果很好,我使用了以下模板:

network:
  version: 2
  renderer: networkd
  ethernets:
    {{ ansible_default_ipv4.interface }}:
      match:
          macaddress: {{ ansible_default_ipv4.macaddress }}
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      macaddress: {{ ansible_default_ipv4.macaddress }}
      interfaces:
        - {{ ansible_default_ipv4.interface }}
      dhcp4: no
      dhcp6: no
      addresses: [{{ ansible_default_ipv4.address }}/32]
      routes:
        - to: 0.0.0.0/0
          via: {{ ansible_default_ipv4.gateway }}
          on-link: true
      nameservers:
        addresses:
          - {{ DNS1 }}
          - {{ DNS2 }}
          - {{ DNS3 }}

现在我必须在路线部分添加几行:

...
  bridges:
    br0:
      routes:
        - to: 0.0.0.0/0
          via: {{ ansible_default_ipv4.gateway }}
          on-link: true
        - to: {{ IP1 }}/32
          scope: link
        - to: {{ IP2 }}/32
          scope: link
...

现在到了我挣扎的部分。

由于我的本地路由因主机而异,我无法使用静态模板。所以我尝试在主机 vars 文件中创建一个列表,其中包含一个 ips 列表。

ROUTES:
  - ip: "aaa.AAA.aaa.AAA"
  - ip: "bbb.BBB.bbb.BBB"
  - ip: "ccc.CCC.ccc.CCC"
  - ip :"...."
  - n

我想在遍历此列表时将此列表插入到我的 netplan 文件中。

但我没有让它工作。你有什么提示或建议吗? 提前致谢

你在 ROUTES 变量上添加循环

- name: vartest
  hosts: localhost
  vars:
    ROUTES:
      - ip: "aaa.AAA.aaa.AAA"
      - ip: "bbb.BBB.bbb.BBB"
      - ip: "ccc.CCC.ccc.CCC" 
  tasks: 
    - name: display
      template:
        src: test.j2 
        dest: test.conf

模板文件:

        :
      routes:
        - to: 0.0.0.0/0
          via: {{ ansible_default_ipv4.gateway }}
          on-link: true
{% for rec in ROUTES %}
        - to: {{ rec.ip }}/32
          scope: link
{% endfor %}

注意在行首开始循环 jinja2 以避免字符串前出现空格

结果文件中的结果:

  routes:
    - to: 0.0.0.0/0
      via: 10.0.2.2
      on-link: true
    - to: aaa.AAA.aaa.AAA/32
      scope: link
    - to: bbb.BBB.bbb.BBB/32
      scope: link
    - to: ccc.CCC.ccc.CCC/32
      scope: link