Cómo mover/cambiar el nombre de un archivo usando una tarea de Ansible en un sistema remoto

Resuelto Christian Berendt asked hace 10 años • 14 respuestas

¿Cómo es posible mover/cambiar el nombre de un archivo/directorio usando un módulo Ansible en un sistema remoto? No quiero utilizar las tareas de comando/shell y no quiero copiar el archivo del sistema local al sistema remoto.

Christian Berendt avatar Jun 11 '14 19:06 Christian Berendt
Aceptado

A partir de la versión 2.0 , en el módulo de copia puede utilizar remote_srcel parámetro.

Si Trueirá a la máquina remota/de destino para src.

- name: Copy files from foo to bar
  copy: remote_src=True src=/path/to/foo dest=/path/to/bar

Si desea mover el archivo, debe eliminar el archivo antiguo con el módulo de archivo

- name: Remove old files foo
  file: path=/path/to/foo state=absent

A partir de la versión 2.8, el módulo de copia remote_src admite la copia recursiva.

Alex avatar Jan 04 '2016 15:01 Alex

El módulo de archivos no copia archivos en el sistema remoto. El parámetro src solo lo utiliza el módulo de archivo al crear un enlace simbólico a un archivo.

Si desea mover/cambiar el nombre de un archivo por completo en un sistema remoto, lo mejor que puede hacer es utilizar el módulo de comando para simplemente invocar el comando apropiado:

- name: Move foo to bar
  command: mv /path/to/foo /path/to/bar

Si quieres ponerte sofisticado, primero puedes usar el módulo de estadísticas para comprobar que foo realmente existe:

- name: stat foo
  stat: path=/path/to/foo
  register: foo_stat

- name: Move foo to bar
  command: mv /path/to/foo /path/to/bar
  when: foo_stat.stat.exists
Bruce P avatar Jun 11 '2014 14:06 Bruce P

He encontrado útil la opción de creación en el módulo de comando. Qué tal esto:

- name: Move foo to bar
  command: mv /path/to/foo /path/to/bar
  args:
    creates: /path/to/bar 

Solía ​​​​hacer un enfoque de dos tareas usando como statsugiere @Bruce P. Ahora hago esto como una tarea con creates. Creo que esto es mucho más claro.

Tom Ekberg avatar Jun 27 '2014 17:06 Tom Ekberg
- name: Move the src file to dest
  command: mv /path/to/src /path/to/dest
  args:
    removes: /path/to/src
    creates: /path/to/dest

Esto ejecuta el mvcomando solo cuando /path/to/srcexiste y /path/to/destno existe, por lo que se ejecuta una vez por host, mueve el archivo y luego no se vuelve a ejecutar.

Utilizo este método cuando necesito mover un archivo o directorio en varios cientos de hosts, muchos de los cuales pueden estar apagados en un momento dado. Es idempotente y seguro dejarlo en un libro de jugadas.

Earl Ruby avatar Feb 19 '2021 18:02 Earl Ruby