如何通过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
我正在尝试使用 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