Cómo mover/cambiar el nombre de un archivo usando una tarea de Ansible en un sistema remoto
¿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.
A partir de la versión 2.0 , en el módulo de copia puede utilizar remote_src
el parámetro.
Si True
irá 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.
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
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 stat
sugiere @Bruce P. Ahora hago esto como una tarea con creates
. Creo que esto es mucho más claro.
- 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 mv
comando solo cuando /path/to/src
existe y /path/to/dest
no 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.