Ansible尝试应用嵌套元素的情况,我不想
问题描述:
在vars/all.yml
Ansible尝试应用嵌套元素的情况,我不想
websites:
-
dest: test_project
db_password: 'xxxx'
delete: false
而一个main.yml
这有一个条件要求backend.yml
- debug: msg={{ websites | selectattr("dest", "equalto", project_name) | list }}
register: website
ok: [xxx.com] => {
"changed": false,
"msg": [
{
"db_password": "xxxx",
"delete": false,
"dest": "test_project",
}
]
}
- include: backend.yml
when: not website.msg.delete|bool
#static: no #tried this too, but has no effect
然后给定一个项目,backend.yml
包含:
...
- name: Grant ACL for write inside "wp-content" (default)
acl:
name: "{{ ansible_www_home }}/{{ item[0].dest }}/wp-content/"
entity: "{{ item[1] }}"
etype: group
permissions: rwx
state: present
with_nested:
- "{{ website.msg }}"
- ['www-data', 'test']
...
错误是
The conditional check 'not item.delete|bool' failed.
The error was: error while evaluating conditional (not item.delete|bool): 'list object' has no attribute 'delete'
The error appears to have been in 'backend.yml': line 58, column 3, but may be elsewhere in the file depending on the exact syntax problem
好像Ansible正在努力寻找delete
性质的第二嵌套数组['www-data', 'test']
这当然是不存在的。
我不明白为什么ansible会试图将我的包含条件应用于此级别。如果item.delete不正确,我不想尝试调用这个条件,我只想要包含该文件。backend.yml
你有关于如何解决它的想法?
PS:我试图添加static: no
到main.yml
的条件,但它没有效果。
答
好了,所以,计算过,多愚蠢的错误进行了改造,解决办法是:
- include: backend.yml
when: not website.msg.0.delete|bool
static: no
什么你想做的事,当你写的'时:不item.delete | bool'? – techraf
我不想包含'backend.yml'(安装项目)。只是跳过这个文件的包含。 –
什么是'item'?循环定义在哪里? – techraf