true/false
我认为只要将一个变量设置为app_conf:
my_app_1:
app_cfg: no
my_app_2:
app_cfg: yes
值就可以有条件地包含特定于应用程序的剧本:
Ansible
不幸的是ERROR: file could not read: <...>/tasks/app_cfg/app_config.yml
迫使我事先创建文件:
# ansible --version
ansible 1.9.2
有没有办法可以避免创建一堆空文件?
{{1}}
答案 0 :(得分:2)
include
的{p> when
在常识中没有条件
它实际上包括include-file中的每个任务,并将给定的when
语句附加到包含任务的每个任务中
所以它希望包含文件存在。
您可以尝试使用with_first_found
和skip: true
处理此问题
像这样:
# warning, code not tested
- include: "app_cfg/{{ app_name }}.yml"
with_first_found:
- files:
- "{{ app_conf[app_name].app_cfg | ternary('app_cfg/'+app_name+'.yml', 'unexisting.file') }}"
skip: true
tags: conf
如果app_cfg
为真,它应该提供有效的配置名称,否则将提供unexisting.file
(将被跳过)。
请参阅this有关跳过选项的回答。