我正试图通过使用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 }}
现在我必须在route部分添加几行:
...
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文件中创建一个列表,其中包含一个ip列表。
ROUTES:
- ip: "aaa.AAA.aaa.AAA"
- ip: "bbb.BBB.bbb.BBB"
- ip: "ccc.CCC.ccc.CCC"
- ip :"...."
- n
我想在遍历这个列表时将这个列表插入到我的netplan文件中。
但是我不让它工作。你有什么提示或建议吗?提前谢谢
你添加了loop over 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,以避免字符串
前出现空白。result in result file:
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