я использую Ansible 1.6.6
для подготовки моей машины.
Eсть шаблонная задача в моей пьесе, которая создает целевой файл из шаблона Jinja2:
tasks:
- template: src=somefile.j2 dest=/etc/somefile.conf
Я не хочу заменять somefile.conf
если он уже существует. Возможно ли это с помощью Ansible? Если да, то как?
Вы можете проверить наличие файла с помощью stat, а затем использовать шаблон, только если файл не существует.
tasks:
- stat: path=/etc/somefile.conf
register: st
- template: src=somefile.j2 dest=/etc/somefile.conf
when: not st.stat.exists
Вы можете просто использовать сила параметр модуля шаблона:
tasks:
- template: src=somefile.j2 dest=/etc/somefile.conf force=no
Или назвать задачу ;-)
tasks:
- name: Create file from template if it doesn't exist already.
template:
src: somefile.j2
dest:/etc/somefile.conf
force: no
Из Модуль шаблонов Ansible документы:
force: значение по умолчанию - yes, при этом удаленный файл заменяется, если содержимое отличается от исходного. Если нет, файл будет передан только в том случае, если место назначения не существует.
Другие ответы используют stat
поскольку сила параметр был добавлен после того, как они были записаны.
Вы можете сначала проверить, существует ли целевой файл, а затем принять решение на основе его результата.
tasks:
- name: Check that the somefile.conf exists
stat:
path: /etc/somefile.conf
register: stat_result
- name: Copy the template, if it doesnt exist already
template:
src: somefile.j2
dest: /etc/somefile.conf
when: stat_result.stat.exists == False
По моему мнению, самое простое решение - использовать атрибут force = no из модуля шаблона.