所以我仍然是Ansible的新手,我正在尝试生成一个DHCP配置文件作为我的第一个真实世界的Ansible项目 .
我在RHEL7上使用ansible 2.2.1.0 .
因为我将所有配置都存储在yaml中,所以我会失败
---
dhcp_subnets:
windows:
description: "Windows Hosts"
network: 10.33.7.0
subnet: 255.255.255.0
interface_name: eth0.152
range_start: 10.33.7.32
range_end: 10.33.7.250
gateway: 10.33.7.254
domain_name: "testlab.home"
domain_name_servers:
- 10.33.11.21
ntp_servers:
- 10.33.11.1
hosts:
152-rhevm:
- description: "RHEV-M"
- mac: "00:30:48:30:5B:1A"
- address: "10.33.7.20"
Linux:
description: "Linux Hosts"
network: 10.33.7.0
subnet: 255.255.255.0
interface_name: eth0.152
range_start: 10.33.7.32
range_end: 10.33.7.250
gateway: 10.33.7.254
domain_name: "testlab.home"
domain_name_servers:
- 10.33.11.21
ntp_servers:
- 10.33.11.1
hosts:
152-rhevm:
- description: "RHEV-M"
- mac: "00:30:48:30:5B:1A"
- address: "10.33.7.20"
在ansible playbook本身中,我可以使用以下代码来打印每个项目的属性
- debug:
msg: "{{item.value.description}}"
with_dict: "{{ dhcp_subnets }}"
tags:
- debug
但是,当我使用它生成包含这些属性的配置文件时,我不知道如何执行此操作 . 我看不到jinja2的with_dict选项 .
我原本希望在with_dict循环中使用模板,并有一个类似于以下的模板
###############################################################
# DHCP client file - Managed by Ansible
###############################################################
ddns-update-style interim;
ignore client-updates;
{# Here I want to iterate over dhcp_subnets #}
subnet {{ item.value.network }} netmask {{ item.value.subnet }} {
# {{ item.value.description }}
interface "{{ item.value.interface_name }}";
range {{ item.value.range_start }} {{ item.value.range_end }};
option subnet-mask {{ item.value.subnet }};
option routers {{ item.value.gateway }};
option domain-name "{{ item.value.domain_name }}";
option domain-name-servers {{ item.value.domain_name_servers }};
option ntp-servers {{ item.value.ntp_servers }};
}
我试图以错误的方式解决这个问题吗?
我已经阅读了一些类似的问题,但它们似乎涉及到要弄平字典,我很想避免这种情况,如果可能的话 .
任何建议将不胜感激 .
谢谢
1 回答
您可以使用以下语法迭代Jinja中的dict: