Cómo copiar un archivo desde una máquina local a un host remoto utilizando Ansible

AnsibleAnsibleBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Ansible es una poderosa herramienta de automatización de código abierto que simplifica la gestión de infraestructuras y aplicaciones. En este tutorial, exploraremos cómo utilizar Ansible para copiar un archivo desde tu máquina local a un host remoto, una tarea común en la administración de sistemas y los flujos de trabajo de DevOps.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("Ansible")) -.-> ansible/ModuleOperationsGroup(["Module Operations"]) ansible(("Ansible")) -.-> ansible/PlaybookEssentialsGroup(["Playbook Essentials"]) ansible/ModuleOperationsGroup -.-> ansible/copy("Transfer Files") ansible/ModuleOperationsGroup -.-> ansible/file("Manage Files/Directories") ansible/ModuleOperationsGroup -.-> ansible/template("Generate Files from Templates") ansible/PlaybookEssentialsGroup -.-> ansible/playbook("Execute Playbook") ansible/PlaybookEssentialsGroup -.-> ansible/roles("Assign Roles") subgraph Lab Skills ansible/copy -.-> lab-414918{{"Cómo copiar un archivo desde una máquina local a un host remoto utilizando Ansible"}} ansible/file -.-> lab-414918{{"Cómo copiar un archivo desde una máquina local a un host remoto utilizando Ansible"}} ansible/template -.-> lab-414918{{"Cómo copiar un archivo desde una máquina local a un host remoto utilizando Ansible"}} ansible/playbook -.-> lab-414918{{"Cómo copiar un archivo desde una máquina local a un host remoto utilizando Ansible"}} ansible/roles -.-> lab-414918{{"Cómo copiar un archivo desde una máquina local a un host remoto utilizando Ansible"}} end

Introducción a Ansible

Ansible es una poderosa herramienta de automatización de código abierto que simplifica el proceso de gestión y configuración de sistemas remotos. Está diseñada para ser fácil de usar, sin agentes y altamente escalable, lo que la convierte en una excelente opción para profesionales de TI y equipos de DevOps.

¿Qué es Ansible?

Ansible es una herramienta de gestión de configuración y orquestación que te permite automatizar diversas tareas, como la implementación de software, la gestión de configuración y el aprovisionamiento de infraestructuras. Utiliza un lenguaje simple y legible por humanos llamado YAML para definir el estado deseado de tus sistemas, y luego ejecuta las acciones necesarias para llevar esos sistemas al estado deseado.

Características principales de Ansible

  • Sin agentes: Ansible no requiere que se instale ningún software especial o agentes en los sistemas remotos que gestiona. Utiliza SSH (o Windows Remote Management) para comunicarse con los hosts remotos.
  • Enfoque declarativo: Ansible utiliza un enfoque declarativo, donde defines el estado deseado de tus sistemas y Ansible se encarga de los pasos necesarios para alcanzar ese estado.
  • Diseño modular: Ansible está diseñado con una arquitectura modular, lo que te permite extender su funcionalidad utilizando módulos preconstruidos o creando tus propios módulos personalizados.
  • Idempotencia: Las tareas de Ansible están diseñadas para ser idempotentes, lo que significa que ejecutar la misma tarea varias veces no cambiará el resultado final.
  • Simple y legible: La sintaxis basada en YAML de Ansible es fácil de leer y escribir, lo que la hace accesible tanto para usuarios experimentados como para novatos.

Casos de uso de Ansible

Ansible se puede utilizar en una amplia gama de escenarios, incluyendo:

  • Implementación de software
  • Gestión de configuración
  • Aprovisionamiento de infraestructuras
  • Orquestación de aplicaciones
  • Gestión de seguridad y cumplimiento
  • Pipelines de Integración Continua/Despliegue Continuo (CI/CD)

Primeros pasos con Ansible

Para comenzar con Ansible, necesitarás tener un nodo de control (la máquina desde la cual ejecutarás los comandos de Ansible) y uno o más hosts remotos (los sistemas que deseas gestionar). En el nodo de control, necesitarás instalar Ansible y configurar tu archivo de inventario, que define los hosts remotos que deseas gestionar.

A continuación, se muestra un ejemplo de cómo instalar Ansible en un sistema Ubuntu 22.04:

sudo apt update
sudo apt install -y ansible

Con Ansible instalado, puedes comenzar a automatizar tus tareas de gestión de infraestructuras y aplicaciones.

Copiando archivos con Ansible

Una de las tareas más comunes en la automatización de infraestructuras es copiar archivos desde el nodo de control (la máquina que ejecuta Ansible) a los hosts remotos. Ansible ofrece una forma simple y eficiente de realizar esta tarea utilizando el módulo copy.

El módulo copy

El módulo copy en Ansible se utiliza para copiar archivos desde el nodo de control a los hosts remotos. Admite varias opciones, como:

  • src: El archivo o directorio de origen en el nodo de control.
  • dest: La ruta de destino en el host remoto.
  • owner: El propietario del archivo en el host remoto.
  • group: El grupo del archivo en el host remoto.
  • mode: Los permisos del archivo en el host remoto.

Copiando un solo archivo

Para copiar un solo archivo desde el nodo de control a un host remoto, puedes utilizar el siguiente playbook de Ansible:

- hosts: all
  tasks:
    - name: Copy a file
      copy:
        src: /path/to/local/file.txt
        dest: /path/to/remote/file.txt
        owner: myuser
        group: mygroup
        mode: "0644"

En este ejemplo, se utiliza el módulo copy para copiar el archivo file.txt desde la ruta local /path/to/local/file.txt a la ruta remota /path/to/remote/file.txt. El archivo será propiedad del usuario myuser y del grupo mygroup, y tendrá permisos 0644 (lectura y escritura para el propietario, solo lectura para el grupo y otros).

Copiando un directorio

Para copiar un directorio completo desde el nodo de control a un host remoto, puedes utilizar el siguiente playbook de Ansible:

- hosts: all
  tasks:
    - name: Copy a directory
      copy:
        src: /path/to/local/directory/
        dest: /path/to/remote/directory/
        owner: myuser
        group: mygroup
        mode: "0755"
        recursive: yes

En este ejemplo, se utiliza el módulo copy para copiar el contenido del directorio local /path/to/local/directory/ al directorio remoto /path/to/remote/directory/. La opción recursive se establece en yes para garantizar que se copie toda la estructura del directorio. Los archivos y directorios serán propiedad del usuario myuser y del grupo mygroup, y tendrán permisos 0755 (lectura, escritura y ejecución para el propietario, lectura y ejecución para el grupo y otros).

Al utilizar el módulo copy, puedes copiar fácil y eficientemente archivos y directorios desde el nodo de control a los hosts remotos, optimizando tus flujos de trabajo de automatización de infraestructuras.

Ejemplo práctico

En esta sección, veremos un ejemplo práctico de cómo utilizar Ansible para copiar un archivo desde el nodo de control a un host remoto.

Preparando el entorno

Para este ejemplo, asumiremos que tienes la siguiente configuración:

  • Nodo de control: Sistema Ubuntu 22.04 con Ansible instalado
  • Host remoto: Sistema Ubuntu 22.04

Asegúrate de tener acceso SSH al host remoto y de que el usuario ansible en el nodo de control tenga los permisos necesarios para conectarse al host remoto.

Creando el playbook de Ansible

Crea un nuevo archivo llamado copy_file.yml en el nodo de control y agrega el siguiente contenido:

- hosts: all
  tasks:
    - name: Copy a file
      copy:
        src: /path/to/local/file.txt
        dest: /path/to/remote/file.txt
        owner: myuser
        group: mygroup
        mode: "0644"

En este playbook:

  • hosts: all apunta a todos los hosts definidos en tu inventario de Ansible.
  • El módulo copy se utiliza para copiar el archivo file.txt desde la ruta local /path/to/local/file.txt a la ruta remota /path/to/remote/file.txt.
  • El archivo será propiedad del usuario myuser y del grupo mygroup, y tendrá permisos 0644 (lectura y escritura para el propietario, solo lectura para el grupo y otros).

Ejecutando el playbook de Ansible

Para ejecutar el playbook, ejecuta el siguiente comando en el nodo de control:

ansible-playbook copy_file.yml

Ansible se conectará al (los) host(s) remoto(s) utilizando SSH, copiará el archivo y establecerá la propiedad y los permisos adecuados.

Verificando el resultado

Después de ejecutar el playbook, puedes iniciar sesión en el host remoto y verificar que el archivo se haya copiado correctamente:

ssh myuser@remote_host
ls -l /path/to/remote/file.txt

Esto debería mostrar el archivo con la propiedad y los permisos esperados.

Siguiendo este ejemplo práctico, has aprendido cómo utilizar el módulo copy en Ansible para copiar un archivo desde el nodo de control a un host remoto. Puedes adaptar este enfoque a tus casos de uso y requisitos específicos, y seguir explorando la amplia funcionalidad que Ansible ofrece para la automatización de infraestructuras.

Resumen

Este tutorial de Ansible ha proporcionado una guía integral sobre cómo copiar archivos desde tu máquina local a un host remoto. Al aprovechar el módulo de archivos de Ansible, puedes optimizar la gestión de tu infraestructura y garantizar una distribución consistente de archivos en todo tu entorno. Ya seas un usuario experimentado de Ansible o nuevo en la plataforma, este tutorial te ha proporcionado el conocimiento necesario para gestionar de manera eficiente las transferencias de archivos utilizando la herramienta de automatización de Ansible.