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
我有以下问题:
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