Відповідь: копіюйте шаблон лише тоді, коли файл призначення не існує


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

З модуля шаблону шаблонів відповідей :

сила: за замовчуванням - так, який замінить віддалений файл, коли вміст відрізняється від вихідного. Якщо ні, файл буде передано, лише якщо призначення не існує.

Інші відповіді використовують, statоскільки параметр сили був доданий після їх написання.


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
Я віддаю перевагу цій відповіді, оскільки вона називає її завдання :)
Asfand Qazi

-3

На мою думку, найпростішим рішенням є використання атрибута "force = no" з модуля шаблону

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.