Comando de copia de Ansible

El módulo de copia de Ansible le permite copiar archivos y carpetas desde la máquina local a servidores remotos. El módulo de copia es versátil. Puede realizar muchas tareas complejas con él. Analicemos algunas tareas que debe realizar con regularidad.

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.

$ ansible-playbook 1_copy_to_remote.yml
 
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:

# ls -alsh test.txt
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í:

# ls -alsh test.txt
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:

testdir/
|– 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:

tmp/
`– 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í:

$ ansible-playbook 4_copy_to_remote_with_multiple_parameters.yml
 
PLAY [webservers]
******************************************************************
 
TASK [Gathering Facts]
******************************************************************
ok: [172.17.0.3]
 
TASK [Copy files with multiple changes]
******************************************************************
changed: [172.17.0.3]=&gt (item={u‘dest’: u‘/tmp/a.txt’, u‘src’: u‘~/testdir2/test1.txt’,
u‘mode’: u‘0644’})
changed: [172.17.0.3]=&gt (item={u‘dest’: u‘/tmp/b.txt’, u‘src’: u‘~/testdir2/test2.txt’,
u‘mode’: u‘0755’})
changed: [172.17.0.3]=&gt (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.

# cat /tmp/hello.txt
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

Leave a Comment

Your email address will not be published. Required fields are marked *

Hazlo Linux