is_file在Ansible中生成语法错误

时间:2018-02-05 07:06:49

标签: ansible yaml jinja2

我将Ansible 2.3.2.0用于我的项目。在这个项目中,我有一个使用is_file测试的任务:

- name: Create repository.ini file
  template: src="{{ playbook_dir }}/../../../repository.ini" dest="/{{ repository_dir }}/repository.ini"
  when: "{{ playbook_dir }}/../../..//repository.ini"|is_file

此任务会产生以下错误:

The offending line appears to be:

  template: src="{{ playbook_dir }}/../../../repository.ini" dest="/{{ jse_repository_dir }}/repository.ini"
  when: "{{ playbook_dir }}/../../../repository.ini"|is_file
                                                     ^ here
We could be wrong, but this one looks like it might be an issue with
missing quotes.  Always quote template expression brackets when they
start a value. For instance:
. . . . 

我尽力而为但无所作为。

1 个答案:

答案 0 :(得分:4)

  1. 当您使用引号启动YAML键值时,必须引用整个值,因此如果内部有任何其他字符串,则应使用不同的引号(例如,单引号+双引号)。

  2. Ansible期望when的值为Jinja2语句,因此无需在内部使用{{

  3. 因为2.您需要使用Jinja2语法进行字符串连接variable + 'string'

  4. 合并后,您的条件应为:

    when: "(playbook_dir+'/../../../repository.ini')|is_file"