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 ответ
Решение
Когда вы начинаете значение ключа YAML с кавычки, вы должны заключить в кавычки все значение, поэтому, если внутри есть какие-либо другие строки, вы должны использовать другую кавычку (например, одинарная кавычка + двойная кавычка).
Ansible ожидает значение
when
быть утверждением Jinja2, поэтому нет необходимости использовать{{
внутри.Потому что 2. что вам нужно использовать синтаксис Jinja2 для конкатенации строк
variable + 'string'
,
В совокупности ваше условие должно быть:
when: "(playbook_dir+'/../../../repository.ini')|is_file"