有条件的jinja2 ipaddr过滤器在ansible任务中

时间:2015-08-12 09:13:27

标签: ansible ansible-playbook

我正在尝试将任务应用于基于ip block的主机,所以我有了这个。

- name: Conditional task
  debug: msg="{{ ansible_all_ipv4_addresses | ipaddr('192.168.1.0/24') | length > 0 }}"
  when: { ansible_all_ip4_addresses | ipaddr('192.168.1.0/24') | length > 0 }

debug语句按预期工作,为每个主机返回正确的值,但条件不起作用,它在所有主机中执行。如果我删除了when子句中的括号,那么我得到

 ERROR! error while evaluating conditional

我试图用以下内容定义一个事实:

    - set_fact:
      local: "{{ ansible_all_ip4_addresses | ipaddr('192.168.1.0/24') | length > 0 }}"

但我得到了

 ERROR! One or more undefined variables: 'ansible_all_ip4_addresses' is undefined

任何帮助非常感谢

1 个答案:

答案 0 :(得分:0)

你有一个错字。 ansible_all_ip4_addresses必须为ansible_all_ipv4_addressesv之前4丢失。

除此之外,它可以使用无或2个大括号,但不能使用一个:

when: ansible_all_ipv4_addresses | ipaddr('192.168.1.0/24') | length > 0

when: "{{ ansible_all_ipv4_addresses | ipaddr('192.168.1.0/24') | length > 0 }}"