如果值未出现在变量文件中,我想从以下Openstack函数中省略dns_nameservers变量:
F()
直到现在,我都尝试用 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)
我收到以下错误:
原因:“ [u'8.8.8.8”,u'8.8.8.9']”无效 名称服务器。 '[u'8.8.8.8',u'8.8.8.9']'无效 IP地址。\“,\”类型\“:\” HTTPBadRequest \“,\”详细信息“:\” \“}}”}
答案 0 :(得分:0)
您要传递带有单个元素的列表或传递omit
关键字(占位符对象),该关键字告诉Ansible不要将整个参数(此处为dns_nameservers
)传递给模块:< / p>
dns_nameservers: "{{ [item.dns] if item.dns is defined else omit }}"
在您的示例中,如果未定义item.dns
,则传递了一个列表,其中单个元素是omit
占位符。在这种情况下,将定义dns_nameservers
参数(该列表在代码中进行了硬编码),并且行为未定义(可能取决于模块)。