强制创建文件事先ansible条件包括

时间:2016-10-04 15:07:20

标签: ansible ansible-playbook

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}}

1 个答案:

答案 0 :(得分:2)

带有include的{​​p> when在常识中没有条件 它实际上包括include-file中的每个任务,并将给定的when语句附加到包含任务的每个任务中 所以它希望包含文件存在。

您可以尝试使用with_first_foundskip: 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有关跳过选项的回答。