如何用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 %}
关键修改说明
- 外层循环使用
items()方法:通过static_dhcp_groups.items()同时获取组名(group_name)和对应的主机列表(host_list),这是Ansible中遍历字典键值对的标准方式。 - 内层直接访问字典属性:
host_list是由主机字典组成的列表,遍历每个host后,直接用host.hostname、host.mac_address等获取对应字段即可,无需额外的key或value属性。
验证结果
修正后的模板会生成你需要的DHCP配置格式,完全匹配目标输出。
内容的提问来源于stack exchange,提问作者dutsnekcirf
相关产品推荐
相关产品推荐

