Copiar archivos de local a remoto
La mayoría de las veces, copiará archivos de servidores locales a remotos. Aquí hay un ejemplo de libro de jugadas para realizar una tarea de este tipo.
– hosts: webservers
tasks:
– name: Copy file to a remote server
copy:
src: ~/test.txt
dest: /tmp
En el ejemplo anterior, estamos apuntando a todo el grupo de servidores web en nuestro inventario de Ansible. La fuente es test.txt que reside en el directorio de inicio de nuestra máquina local y el destino es la carpeta / tmp en la máquina remota.
PLAY [webservers]
****************************************************************************
TASK [Gathering Facts]
****************************************************************************
ok: [172.17.0.3]
TASK [Ansible copy file to remote server]
****************************************************************************
changed: [172.17.0.3]
PLAY RECAP
*****************************************************************************
172.17.0.3 : ok=2 changed=1 unreachable=0 failed=0
Si ejecutamos el libro de jugadas, deberíamos ver los resultados como el anterior.
Los permisos predeterminados se establecen en 0644 en la máquina remota:
0 -rw-rw-r– 1 a_user a_user 0 Apr 20 08:49 test.txt
Puede cambiar eso agregando el parámetro de modo:
– hosts: webservers
tasks:
– name: Copy file to a remote server
copy:
src: ~/test.txt
dest: /tmp
mode: 0744
Entonces, sus permisos en el control remoto se verán así:
0 -rwxr–r– 1 a_user a_user 0 Apr 20 08:54 test.txt
Copia de directorios de local a remoto
Para copiar directorios, tiene dos opciones. Si coloca una / después del nombre del directorio, copiará cualquier cosa dentro de ese directorio a la carpeta de destino. Si no pone /, primero creará el directorio en el destino y luego copiará todo lo que hay dentro.
Probemos el módulo de copia con el siguiente directorio ubicado en nuestra carpeta de inicio local:
|– nested1
| `– test1.txt
|– nested2
| `– test2.txt
`– test0.txt
Si usamos el siguiente código:
– hosts: webservers
tasks:
– name: Copy directory to remote server
copy:
src: ~/testdir
dest: /tmp
Luego obtenemos lo siguiente en el servidor remoto:
`– testdir
|– nested1
| `– test1.txt
|– nested2
| `– test2.txt
`– test0.txt
Copia de archivos entre directorios en máquinas remotas
La copia de Ansible le permite copiar archivos de un directorio a otro en la misma máquina remota. Pero puede realizar esto solo para archivos, no puede copiar directorios. Tienes que usar el parámetro remote_src para que Ansible conozca tus intenciones.
– hosts: webservers
tasks:
– name: Copy file between directories on a remote server
copy:
src: /tmp/test.txt
dest: ~/test.txt
remote_src: yes
El código anterior copiará /tmp/test.txt al directorio de inicio del usuario ( / home / [nombre de usuario] /) .
Copia de archivos con varios parámetros
Puede pasar parámetros individuales para archivos.
– hosts: webservers
tasks:
– name: Copy files with multiple changes
copy:
src: “{{ item.src }}”
dest: “{{ item.dest }}”
mode: “{{item.mode}}”
with_items:
– { src: ‘~/testdir2/test1.txt’, dest: ‘/tmp/a.txt’, mode: ‘0644’}
– { src: ‘~/testdir2/test2.txt’, dest: ‘/tmp/b.txt’, mode: ‘0755’}
– { src: ‘~/testdir2/test3.txt’, dest: ‘/tmp/c.txt’, mode: ‘0644’}
En el ejemplo anterior, estamos cambiando el nombre y estableciendo permisos individuales para los archivos. La salida de Ansible se ve así:
PLAY [webservers]
******************************************************************
TASK [Gathering Facts]
******************************************************************
ok: [172.17.0.3]
TASK [Copy files with multiple changes]
******************************************************************
changed: [172.17.0.3]=> (item={u‘dest’: u‘/tmp/a.txt’, u‘src’: u‘~/testdir2/test1.txt’,
u‘mode’: u‘0644’})
changed: [172.17.0.3]=> (item={u‘dest’: u‘/tmp/b.txt’, u‘src’: u‘~/testdir2/test2.txt’,
u‘mode’: u‘0755’})
changed: [172.17.0.3]=> (item={u‘dest’: u‘/tmp/c.txt’, u‘src’: u‘~/testdir2/test3.txt’,
u‘mode’: u‘0644’})
PLAY RECAP
**************************************************************************
172.17.0.3 : ok=2 changed=1 unreachable=0 failed=0
Creación de contenido en servidores remotos
Puede utilizar el módulo de copia para crear contenido en servidores remotos directamente desde el archivo del libro de jugadas. Aquí hay un ejemplo:
– hosts: webservers
tasks:
– name: Use ansible copy to create content in a remote server
copy:
content: “Hello Server!n”
dest: /tmp/hello.txt
Esto creará el archivo hello.txt en el servidor remoto que contendrá “Hello Server!” texto.
Hello Server
Conclusión
La copia de Ansible es un módulo útil que le ayuda a copiar archivos entre servidores. Debería facilitar las tareas de configuración.
Estudio adicional:
http://docs.ansible.com/ansible/latest/modules/copy_module.html