Ansible: copie la plantilla solo cuando el archivo de destino no exista

47

Estoy usando Ansible 1.6.6para aprovisionar mi máquina.

Hay una tarea de plantilla en mi libro de jugadas que crea un archivo de destino desde la plantilla Jinja2:

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

No quiero reemplazar somefile.confsi ya existe. ¿Es posible con Ansible? ¿Si es así, cómo?

Slava Fomin II
fuente

Respuestas:

61

Puede verificar la existencia del archivo usando stat, y luego usar la plantilla solo si el archivo no existe.

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

Puede usar el parámetro de fuerza del módulo de plantilla:

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

O nombrando la tarea ;-)

tasks:
    - name: Create file from template if it doesn't exist already.
      template: 
        src: somefile.j2
        dest:/etc/somefile.conf
        force: no

De los documentos del módulo de plantilla Ansible :

force: el valor predeterminado es yes, que reemplazará el archivo remoto cuando el contenido sea diferente al de la fuente. Si no, el archivo solo se transferirá si el destino no existe.

Otras respuestas se usan statporque el parámetro de fuerza se agregó después de que se escribieron.

sanzante
fuente
2
mi respuesta usa stat, porque en el momento de la pregunta / respuesta no había un argumento de fuerza disponible para la plantilla
Teftin
10

Primero puede verificar si el archivo de destino existe o no y luego tomar una decisión basada en la salida de su resultado.

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   
arbabnazar
fuente
1
Prefiero esta respuesta porque nombra sus tareas :)
Asfand Qazi
-3

Según yo, la solución más fácil es usar el atributo "force = no" del módulo de plantilla

Thibault Richard
fuente