首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环遍历字典字典,其中包含带ansible和jinja2的列表

循环遍历字典字典,其中包含带ansible和jinja2的列表
EN

Stack Overflow用户
提问于 2022-10-14 22:10:56
回答 1查看 26关注 0票数 0

我有以下数据结构:

代码语言:javascript
复制
static_dhcp_groups:
  'site hypervisors':
    - hostname: "hypervisor-1"
      mac_address: "f0:1f:af:ce:60:d9"
      ip_address: "192.168.10.1"
    - hostname: "hypervisor-2"
      mac_address: "f0:1f:af:ce:60:da"
      ip_address: "192.168.10.2"
  'site workstations':
    - hostname: "workstation-1"
      mac_address: "52:54:00:cb:93:ac"
      ip_address: "192.168.10.50"

我想要创建一个jinja模板,它将生成一个文件,如下所示:

代码语言:javascript
复制
# site hypervisors
group {
  host hypervisor-1 {
    hardware ethernet f0:1f:af:ce:60:d9;
    fixed-address 192.168.10.1;
  }
  host hypervisor-2 {
    hardware ethernet f0:1f:af:ce:60:da;
    fixed-address 192.168.10.2;
  }
}

# site workstations
group {
  host workstation-1 {
    hardware ethernet 52:54:00:cb:93:ac;
    fixed-address 192.168.10.50;
  }
}

我正在努力循环数据以获得我需要的结果。到目前为止,我的jinja2模板如下所示:

代码语言:javascript
复制
{% for dhcp_group in static_dhcp_groups %}
# {{ dhcp_group.key }}
group {
  {% for dhcp_host in dhcp_group %}
  host {{ dhcp_host.key.hostname }} {
    hardware ethernet {{ dhcp_host.key.mac_address }};
    fixed-address {{ dhcp_host.key.ip_address }};
  } 
  {% endfor %}
}

{% endfor %}

我收到的错误消息如下:

代码语言:javascript
复制
TASK [generate the file.] ****************************************************************************************************************************************************************************************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ansible.errors.AnsibleUndefinedVariable: 'ansible.parsing.yaml.objects.AnsibleUnicode object' has no attribute 'key'
fatal: [localhost]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'ansible.parsing.yaml.objects.AnsibleUnicode object' has no attribute 'key'"}

我很难弄清楚该用什么来提取单个的字典元素。它应该是dhcp_host.key.hostname,dhcp_host.value.hostname,dhcp_host.item.hostname,还是与[]不同的?我完全被困住了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-14 22:25:26

我朋友帮我修的。jinja2模板应该如下所示:

代码语言:javascript
复制
{% for dhcp_group in static_dhcp_groups %}
# {{ dhcp_group }}
group {
{% for dhcp_host in static_dhcp_groups[dhcp_group] %}
  host {{ dhcp_host.hostname }} {
    hardware ethernet {{ dhcp_host.mac_address }};
    fixed-address {{ dhcp_host.ip_address }};
  }
{% endfor %}
}

{% endfor %}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74075273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档