Ansible Copy

Ansible proporciona la funcionalidad de copiar los archivos y directorios con la ayuda de los módulos copy y fetch. El módulo copy es versátil.

El módulo copy se utiliza para copiar archivos y carpetas de la máquina local a los servidores remotos. Y el módulo fetch para copiar datos de la máquina remota a la máquina local.

Si quieres copiar archivos después de sustituirlos con variables, como archivos de configuración con cambios de IP, o puedes usar el módulo de plantillas también. Puede realizar un montón de tareas complicadas con este módulo.

Copiar archivos de local a remoto

El módulo de copia se utiliza para comprobar el archivo establecido en el parámetro src, en la máquina local. Y luego, copiará los datos a la ruta de la máquina remota especificada en el destpath.

En el siguiente ejemplo, copiaremos el archivo sample.txt en el directorio home de la máquina local, al destino es el directorio /tmp en el servidor remoto. Mientras no especifiquemos ningún permiso para el archivo, el permiso por defecto para el archivo remoto se establece como -rw-rw-r-(0664).

Caso 1: Si el archivo ya está presente en el servidor remoto, pero el contenido del archivo de origen es diferente, entonces el archivo de destino será modificado. Puede controlar esto estableciendo el parámetro force. El valor predeterminado es «sí». Así que modifica el archivo por defecto.

Si no quiere que se modifique el archivo, si el archivo de origen es diferente, entonces puede establecerlo como No. La siguiente tarea copiará el archivo si el archivo no existe en el servidor remoto.

Caso 2: Si el archivo no se encontró en la máquina local, el Ansible lanzará un error.

Por ejemplo: fatal: : FAILED!=> {«changed»: false, «failed»: true, «msg»: «unable to find ‘~/sample.txt’ in expected paths.»}

Copiando directorios de local a remoto

También puedes copiar carpetas o directorios utilizando el módulo de copia de Ansible. Si la ruta ‘src’ es un directorio, entonces se copiará recursivamente. O se copiará todo el directorio.

Hay dos variaciones diferentes para esta tarea. Dependiendo de si tiene el carácter ‘/’ al final de la ruta ‘src’ o no.

El primer método creará un directorio en el servidor remoto, con el nombre establecido en el parámetro src. Luego, copiará y pegará el contenido de la carpeta de origen en ese directorio.

Si quieres este comportamiento, entonces no da el ‘/’ después de la ruta en el parámetro src.

En el siguiente ejemplo, primero creará un directorio llamado copy_dir_ex en el /tmp del servidor remoto.

Copiar archivos entre directorios en la máquina remota

Ansible copy permite copiar los archivos de un directorio a otro en la misma máquina remota. Pero esto es sólo para los archivos, no para los directorios. Puede utilizar el parámetro remote_src para que Ansible conozca sus intenciones.

El siguiente código copiará /tmp/test.txt al directorio principal del usuario (/home//).