is_file在Ansible中产生语法错误

GMi*_*ael 0 yaml jinja2 ansible

我将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
Run Code Online (Sandbox Code Playgroud)

此任务产生以下错误:

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:
. . . . 
Run Code Online (Sandbox Code Playgroud)

我竭尽所能。

tec*_*raf 5

  1. 当用引号将YAML键值开头时,必须对整个值进行引号,因此,如果内部还有其他字符串,则应使用其他引号(例如,单引号+双引号)。

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

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

综合考虑,您的条件应为:

when: "(playbook_dir+'/../../../repository.ini')|is_file"
Run Code Online (Sandbox Code Playgroud)