在Ansible中省略os_subnet的变量dns_nameservers

时间:2018-08-15 12:38:35

标签: ansible jinja2

如果值未出现在变量文件中,我想从以下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 \“,\”详细信息“:\” \“}}”}

1 个答案:

答案 0 :(得分:0)

您要传递带有单个元素的列表或传递omit关键字(占位符对象),该关键字告诉Ansible不要将整个参数(此处为dns_nameservers)传递给模块:< / p>

 dns_nameservers: "{{ [item.dns] if item.dns is defined else omit }}"

在您的示例中,如果未定义item.dns,则传递了一个列表,其中单个元素是omit占位符。在这种情况下,将定义dns_nameservers参数(该列表在代码中进行了硬编码),并且行为未定义(可能取决于模块)。