Ansible,with_subelements 和 skip_missing 不起作用

Ansible, with_subelements and skip_missing does not work

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

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

这个 应该 恕我直言,当 nginx_sites 中有一个名为 "htaccess" 元素的子元素时打印调试语句,如果不存在则跳过。 但是没有任何反应:

TASK [nginx : Creating htaccess files if nessecary]  ****************************
task path: /home/dakky/devzone/ansible-cfg-mgmt/roles/nginx/tasks/main.yml:65

PLAY RECAP *********************************************************************
hostname       : ok=1    changed=0    unreachable=0    failed=0   

知道我做错了什么吗?

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

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

然后您可以迭代您的位置和 select 定义了 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"

另请注意,您应该为子元素指定 "full path"。在您的原始示例中,htaccess 永远不会匹配任何内容,但 server.location2.htaccess 会匹配(尽管出现此项目不是列表的错误)。

这对我有用

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