Ansible:在完成循环时应用

Ansible:在完成循环时应用,ansible,Ansible,我想将ansible中的循环与应用于它的when语句结合起来。然而,当语句应用于每个循环迭代时,这就消除了将一个语句应用于整个循环的可能性。有人知道怎么做吗 我以前遇到过这个问题,但在这个特定的例子中,它涉及一个可能存在或不存在的变量。我想做的是: - name: Loop debug: msg: "{{ item }}" with_items: x.y|default([]) but-only-run-this-loop-when: x is defined 默认过滤器负

我想将ansible中的循环与应用于它的when语句结合起来。然而,当语句应用于每个循环迭代时,这就消除了将一个语句应用于整个循环的可能性。有人知道怎么做吗

我以前遇到过这个问题,但在这个特定的例子中,它涉及一个可能存在或不存在的变量。我想做的是:

- name: Loop
  debug:
    msg: "{{ item }}"
  with_items: x.y|default([])
  but-only-run-this-loop-when: x is defined
默认过滤器负责未定义y的实例。因为在我的例子中,可能没有定义als,所以我需要,但只在需要时运行这个循环。显然,这不是一个真正的可解释的陈述。我应该用什么来代替

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

- 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 }}'
例如,在主机变量中:

x:
  y:
    - "foo"
    - "bar"
但我确信这不是解决问题的办法。

也有类似的答案。您可以在一行中使用多个默认值:

- name: Loop
  debug:
    msg: "{{ item }}"
  with_items: (x | default({})).y | default([])
而且当语句作为一个整体绑定到循环任务时(至少在当前的Ansible 2.2中),也没有办法绑定