Ansible 强制预先创建文件可解析条件包含

Ansible 强制预先创建文件可解析条件包含,ansible,ansible-playbook,Ansible,Ansible Playbook,我认为,只要将一个变量设置为true/false值,我就可以有条件地包括特定于应用程序的剧本,如下所示: # "Run application specific configuration scripts" - include: "app_cfg/{{ app_name }}.yml" when: "{{ app_conf[app_name].app_cfg }}" ignore_errors: no tags: - conf 不幸的是,Ansible迫使我提前创建文件:

我认为,只要将一个变量设置为
true/false
值,我就可以有条件地包括特定于应用程序的剧本,如下所示:

# "Run application specific configuration scripts"
- include: "app_cfg/{{ app_name }}.yml"
  when: "{{ app_conf[app_name].app_cfg }}"
  ignore_errors: no
  tags:
    - conf
不幸的是,
Ansible
迫使我提前创建文件:

app_conf:
  my_app_1:
    app_cfg: no
  my_app_2:
    app_cfg: yes

包括
,当
在常识中不是有条件的。
它实际上包括include文件中的每个任务,并将给定的
语句附加到包含的每个任务中。
所以它希望包含文件存在

您可以尝试使用
跳过:true

大概是这样的:

# ansible --version
ansible 1.9.2
如果
app\u cfg
为true,并且
不存在.file
(将被跳过),则应该提供有效的配置名称


请参阅关于跳过选项的答案。

在常识中不是有条件时,将
包括在
中。
它实际上包括include文件中的每个任务,并将给定的
语句附加到包含的每个任务中。
所以它希望包含文件存在

您可以尝试使用
跳过:true

大概是这样的:

# ansible --version
ansible 1.9.2
如果
app\u cfg
为true,并且
不存在.file
(将被跳过),则应该提供有效的配置名称


请参阅关于跳过选项的答案。

虽然有点难看,但仍然是一个很棒的功能,我在ansible docs丛林中完全错过了这一功能。谢谢我不得不接受你的答案,因为它确实会产生错误:<代码>错误:[Debug + +WITH项目]是一个已删除的未被删除的特性< /Calp> @ Nar·NASK,考虑升级到AnEffice 2。x:在2中,您还可以使用循环和任务IsSee。我知道我应该(最终我会),不幸的是,我目前没有这个选项,因为我必须解决大量生产剧本中ansible版本之间的(潜在)不匹配。。。谢谢你的见解。虽然有点难看,但仍然是一个伟大的功能,这是我在ansible docs丛林中完全错过的。谢谢我不得不接受你的答案,因为它确实会产生错误:<代码>错误:[Debug + +WITH项目]是一个已删除的未被删除的特性< /Calp> @ Nar·NASK,考虑升级到AnEffice 2。x:在2中,您还可以使用循环和任务IsSee。我知道我应该(最终我会),不幸的是,我目前没有这个选项,因为我必须解决大量生产剧本中ansible版本之间的(潜在)不匹配。。。不管怎样,谢谢你的见解。
# 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