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

如何用Ansible与Jinja2遍历嵌套字典列表生成DHCP配置

问题分析与解决

错误原因

你的Jinja2模板遍历字典的方式有误:

  • 直接遍历static_dhcp_groups时,默认只会拿到字典的键(字符串类型),而非键值对,所以dhcp_group.key会抛出"没有key属性"的错误——因为字符串本身没有key属性。
  • 内层循环中,你错误地尝试用dhcp_host.key.hostname访问主机属性,但dhcp_host其实是列表中的字典元素,直接通过键名访问即可。

修正后的Jinja2模板

{% for group_name, host_list in static_dhcp_groups.items() %}
# {{ group_name }}
group {
  {% for host in host_list %}
  host {{ host.hostname }} {
    hardware ethernet {{ host.mac_address }};
    fixed-address {{ host.ip_address }};
  } 
  {% endfor %}
}

{% endfor %}

关键修改说明

  1. 外层循环使用items()方法:通过static_dhcp_groups.items()同时获取组名(group_name)和对应的主机列表(host_list),这是Ansible中遍历字典键值对的标准方式。
  2. 内层直接访问字典属性:host_list是由主机字典组成的列表,遍历每个host后,直接用host.hostname、host.mac_address等获取对应字段即可,无需额外的key或value属性。

验证结果

修正后的模板会生成你需要的DHCP配置格式,完全匹配目标输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:20:43