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


47

Я использую Ansible 1.6.6для обеспечения моей машины.

В моей книге воспроизведения есть шаблонное задание, которое создает файл назначения из шаблона Jinja2:

tasks:
    - template: src=somefile.j2 dest=/etc/somefile.conf

Я не хочу заменять, somefile.confесли он уже существует. Это возможно с Ansible? Если так, то как?

Ответы:


61

Вы можете проверить существование файла с помощью stat, а затем использовать шаблон, только если файл не существует.

tasks:
  - stat: path=/etc/somefile.conf
    register: st
  - template: src=somefile.j2 dest=/etc/somefile.conf
    when: not st.stat.exists

42

Вы можете просто использовать параметр силы модуля шаблона:

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потому что параметр force был добавлен после их записи.


2
мой ответ использует stat, потому что во время вопроса / ответа не было аргумента силы, доступного для шаблона
Teftin

10

Вы можете сначала проверить, существует ли файл назначения или нет, а затем принять решение на основе вывода его результата.

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   

1
Я предпочитаю этот ответ, потому что он называет его задачи :)
Асфанд Кази

-3

По моему мнению, самое простое решение - использовать атрибут «force = no» из модуля шаблона.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.