is_file выдает синтаксическую ошибку в 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

Эта задача выдает следующую ошибку:

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 ответ

Решение
  1. Когда вы начинаете значение ключа YAML с кавычки, вы должны заключить в кавычки все значение, поэтому, если внутри есть какие-либо другие строки, вы должны использовать другую кавычку (например, одинарная кавычка + двойная кавычка).

  2. Ansible ожидает значение when быть утверждением Jinja2, поэтому нет необходимости использовать {{ внутри.

  3. Потому что 2. что вам нужно использовать синтаксис Jinja2 для конкатенации строк variable + 'string',

В совокупности ваше условие должно быть:

when: "(playbook_dir+'/../../../repository.ini')|is_file"
Другие вопросы по тегам