Назад | Перейти на главную страницу

Ansible: копировать шаблон, только если целевой файл не существует

я использую 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 из модуля шаблона.