You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible Jinja2生成Netplan配置时子键缩进异常问题求助

Ansible生成Netplan配置的缩进与空行问题

我使用Ansible Playbook结合Jinja2模板,通过变量生成Netplan配置文件,但最终生成的配置存在子键缩进不符合预期、多余空行的问题。

Playbook任务

- name: Configuring Netplan
  template:
    src: config.yaml.j2
    dest: "/some_folder/some_file.yaml"
  when: my_conf != []

变量定义

my_conf变量

my_conf:
  network:
    ethernets:
      eno1:
        "{{ servers[inventory_hostname].eno1 }}"
      eno2:
        "{{ servers[inventory_hostname].eno2 }}"
      eno3:
        "{{ servers[inventory_hostname].eno3 }}"
      eno4:
        "{{ servers[inventory_hostname].eno4 }}"
    vlans:
      "{{ servers[inventory_hostname].vlans }}"
    version: 2

servers变量

servers:
  localhost:
    eno1:
      dhcp4: true
      match:
        macaddress: XX:XX:XX:XX:XX
      set-name: eno1
    eno2:
      dhcp4: true
    eno3:
      dhcp4: true
    eno4:
      addresses:
        - 127.3XX.XXX.XXX
    vlans:
  192.168.XXX.XXX:
    eno1:
      addresses:
        - 192.168.XXX.XXX/XX
    eno2:
      addresses:
        - 192.168.XXX.XXX/XX
    eno3:
      addresses:
        - 127.2XX.XXX.XXX
      gateway4: 127.3XX.XXX.XXX
      nameservers:
        addresses:
          - 127.4XX.XXX.XXX
          - 127.5XX.XXX.XXX
        search:
          - myserver.com
    eno4:
      addresses:
        - 192.168.XXX.XXX/XX
    vlans:
      eno1.101:
        id: 101
        link: eno1
        addresses:
          - 192.168.XXX.XXX/X

Jinja2模板(config.yaml.j2)

network:
  ethernets:
    eno1:
{{ my_conf['network']['ethernets']['eno1']|to_nice_yaml|indent(6, true) }}
    eno2:
{{ my_conf['network']['ethernets']['eno2']|to_nice_yaml|indent(6, true) }}
    eno3:
{{ my_conf['network']['ethernets']['eno3']|to_nice_yaml|indent(6, true) }}
    eno4:
{{ my_conf['network']['ethernets']['eno4']|to_nice_yaml|indent(6, true) }}
{% if my_conf['network']['vlans'] is defined and my_conf['network']['vlans']|d('')|length > 0 %}
  vlans:
{{ my_conf['network']['vlans']|to_nice_yaml|indent(6, true) }}
{% endif %}
  version: {{ my_conf['network']['version']|default('2') }}

生成的不符合预期的配置输出

network:
  ethernets:
    eno1:
      dhcp4: true
      match:
          macaddress: XX:XX:XX:XX:XX
      set-name: eno1

    eno2:
      dhcp4: true

    eno3:
      dhcp4: true

    eno4:
        addresses:
        - 127.3XX.XXX.XXX

  version: 2

内容的提问来源于stack exchange,提问作者Taylan Yuksel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 10:13:22