省略操作系统子网';Ansible中的s变量dns_名称服务器
如果变量文件中没有出现值,我想从以下Openstack函数中省略dns_nameservers变量:省略操作系统子网';Ansible中的s变量dns_名称服务器,ansible,jinja2,Ansible,Jinja2,如果变量文件中没有出现值,我想从以下Openstack函数中省略dns_nameservers变量: os_subnet: cloud: "{{ item.cloud }}" state: present validate_certs: no no_gateway_ip: yes dns_nameservers: - "{{ item.dns | default(None) }}" enable_dhcp: yes
os_subnet:
cloud: "{{ item.cloud }}"
state: present
validate_certs: no
no_gateway_ip: yes
dns_nameservers:
- "{{ item.dns | default(None) }}"
enable_dhcp: yes
name: "{{ item.subnet }}"
network_name: "{{ item.network }}"
cidr: "{{ item.cidr }}"
allocation_pool_start: "{{ item.allocation_pool_start }}"
allocation_pool_end: "{{ item.allocation_pool_end }}"
host_routes: "{{ item.host_routes | default(omit) }}"
with_items:
- "{{ subnets }}"
tags: subnets
到目前为止,我一直试图用|default(omit)
和|default(None)
忽略它,但它不起作用。是否有任何过滤器可以提供帮助或其他方式
编辑:
变量文件:
- cloud: tenant1
network: nw
subnet: nw_subnet
cidr: 172.12.17.64/26
dns:
- 8.8.8.8
- 8.8.8.9
allocation_pool_start: 172.12.17.68
allocation_pool_end: 172.12.17.70
host_routes:
- destination: 0.0.0.0/0
nexthop: 172.12.17.65
我得到以下错误:
原因:“[u'8.8.8.8',u'8.8.9']”不是有效的
名称服务器。”[u'8.8.8.8',u'8.8.8.9']'不是有效的
IP地址。\“,\”类型\“:\”HTTPBadRequest\“,\”详细信息\“:\”}
您想要传递一个包含单个元素的列表,或者传递一个
ommit
关键字(占位符对象),它告诉Ansible不要将整个参数(dns\u nameservers
此处)传递给模块:
dns_nameservers: "{{ [item.dns] if item.dns is defined else omit }}"
在您的示例中,如果未定义
item.dns
,则传递了一个列表,其中单个元素是omit
占位符。在这种情况下,dns\u nameservers
参数已定义(代码中硬编码的列表),行为未定义(可能取决于模块)。感谢您的解释。如果我在dns_名称服务器中没有或只有一个元素,它确实可以工作,但是如果我有多个元素,我应该如何继续?在变量文件中,我已将dns定义为:dns:-8.8.8
\n-8.8.8.9
,但它没有以这种方式工作。我尝试过这种方式,但我遇到了一个错误。我已经用我正在尝试的变量文件和错误更新了我的问题。代码已按您的建议更改。我已修改语法以接受多个值;接受后,我将宣布答案有效