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?

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

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.


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   

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.