所以我对 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 }};
}
我是否试图以错误的方式解决这个问题?
我已经阅读了一些类似的问题,但它们似乎涉及必须整理字典,如果可能的话,我很想避免这种情况。
任何建议将不胜感激。
谢谢