Ansible:应用何时完成循环

时间:2017-02-27 16:51:54

标签: ansible

我想将ansible中的循环与应用于它的when语句结合起来。但是,语句应用于每个循环迭代,从而消除了将一个语句应用于完整循环的可能性。有谁知道怎么做?

之前我遇到过这个问题,但在这个特定情况下,它涉及一个可能存在或可能不存在的变量。我想做的是:

- name: Loop
  debug:
    msg: "{{ item }}"
  with_items: x.y|default([])
  but-only-run-this-loop-when: x is defined

默认过滤器负责处理未定义y的实例。因为在我的情况下x可能也没有定义,我需要but-only-run-this-loop-when。显然,这不是一个真实的回应声明。我该怎么用?

目前,我使用了一些可怕的东西:

- name: kludge1
  set_fact:
    fake_y : "{{ [] }}"

- name: kludge2
  set_fact:
    fake_y : "{{ x.y|default([]) }}"
  when: x is defined

- name: Loop
  debug:
    msg: "{{ item }}"
  with_items: '{{ fake_y }}'

例如在host_vars中:

x:
  y:
    - "foo"
    - "bar"

但我确定这不是可行的方法。

1 个答案:

答案 0 :(得分:1)

有类似的答案here。您可以连续使用多个默认值:

- name: Loop
  debug:
    msg: "{{ item }}"
  with_items: (x | default({})).y | default([])

并且没有办法将when语句作为一个整体绑定到循环任务(至少在当前的Ansible 2.2中)。