Ansible,with_subelements和skip_missing不起作用

时间:2016-09-06 18:28:18

标签: ansible ansible-playbook

我有以下问题:
定义我的nginx站点的host_var(摘录):

nginx_sites:
- server:
    name: site1
    location1:
      config:
        name: "/"
        [...]
- server:
    name: site2
    location1:
      config:
        name: "/"
        [...]
    location2:
      config:
        name: "/secretspace"
        [...]
      htaccess:
        username:
          password: somepassword

在这个例子中我有2个站点。第二个有两个位置,第二个位置有一个名为“htaccess”的子元素。这是我想要用来创建相应的htaccess文件。

我尝试了这个安全的任务:

- name: Creating htaccess files if nessecary
  debug: msg="Huhu {{ item.0.name }}  {{ item.1 }}"
  with_subelements:
  - "{{ nginx_sites }}"
  - "htaccess"
  - flags:
    skip_missing: True

当<{1}}中有一个名为“htaccess”元素的子元素时,应该 imho打印一个调试语句,如果不存在,则跳过它。 但没有任何反应:

nginx_sites

知道我在这里做错了吗?

2 个答案:

答案 0 :(得分:1)

with_subelements用于迭代列表子元素 如果您修改输入数据以创建位置列表而不是命名属性(location1,location2等):

nginx_sites:
  - server:
      name: site1
      locations:
        - config:
            name: "/"
  - server:
      name: site2
      locations:
        - config:
            name: "/"
        - config:
            name: "/secretspace"
          htaccess:
            username:
              password: somepassword

然后,您可以迭代您的位置并选择定义了htaccess的位置:

- name: Creating htaccess files if nessecary
  debug: msg="Huhu {{ item.0.server.name }}  {{ item.1.htaccess }}"
  when: item.1.htaccess is defined
  with_subelements:
  - "{{ nginx_sites }}"
  - "server.locations"

另请注意,您应指定&#34;完整路径&#34;对于子元素。在原始示例中,htaccess将永远不会匹配任何内容,但server.location2.htaccess会(虽然此项不是列表的错误上升)。

答案 1 :(得分:1)

这对我有用

- name: Creating htaccess files if nessecary
  debug: msg="Huhu {{ item.0.name }}  {{ item.1 }}"
  with_subelements:
  - "{{ nginx_sites }}"
  - "htaccess"
  - skip_missing: True