En este paso, aprenderá a utilizar uno de los módulos de Ansible más fundamentales: ansible.builtin.copy. Este módulo se utiliza para transferir archivos desde su nodo de control (la VM de LabEx) a una ubicación especificada en sus hosts gestionados. En nuestro caso, el host gestionado será localhost en sí mismo. Más allá de la simple copia, el módulo copy le permite controlar con precisión los atributos del archivo, como su propietario, grupo y modo de permisos, lo cual es esencial para una configuración correcta del sistema.
Primero, configuremos nuestro entorno de proyecto. Todo nuestro trabajo se realizará dentro del directorio ~/project.
-
Navegue al directorio del proyecto y cree un subdirectorio para nuestros archivos de origen. Esta es una práctica común para mantener su proyecto organizado.
Instale el paquete ansible-core.
sudo dnf install -y ansible-core
Luego, navegue al directorio del proyecto y cree un subdirectorio para nuestros archivos de origen.
cd ~/project
mkdir files
-
A continuación, cree un archivo de texto simple que copiaremos. Utilizaremos un comando cat con un "documento aquí" para crear el archivo info.txt dentro del directorio files.
cat << EOF > ~/project/files/info.txt
This file was deployed by Ansible.
It contains important system information.
EOF
-
Ahora, cree un archivo de inventario de Ansible. El inventario le dice a Ansible qué hosts gestionar. Para este laboratorio, gestionaremos la máquina local. Cree un archivo llamado inventory.ini.
cat << EOF > ~/project/inventory.ini
localhost ansible_connection=local
EOF
En este inventario, localhost es el host al que nos dirigimos. La variable ansible_connection=local instruye a Ansible a ejecutar las tareas directamente en el nodo de control, sin usar SSH.
-
Cree su primer playbook de Ansible. Este playbook contendrá las instrucciones para copiar el archivo. Use nano o cat para crear un archivo llamado copy_file.yml.
nano ~/project/copy_file.yml
Agregue el siguiente contenido al archivo. Este playbook define una tarea: copiar info.txt al directorio /tmp/ y establecer sus atributos.
---
- name: Deploy a static file to localhost
hosts: localhost
tasks:
- name: Copy info.txt and set attributes
ansible.builtin.copy:
src: files/info.txt
dest: /tmp/info.txt
owner: labex
group: labex
mode: "0640"
Analicemos los parámetros en la tarea copy:
src: files/info.txt: La ruta al archivo de origen en el nodo de control, relativa a la ubicación del playbook.
dest: /tmp/info.txt: La ruta absoluta donde se colocará el archivo en el host gestionado.
owner: labex: Establece el propietario del archivo en el usuario labex.
group: labex: Establece el grupo del archivo en el grupo labex.
mode: '0640': Establece los permisos del archivo. 0640 significa que el propietario puede leer/escribir, el grupo puede leer y los demás no tienen permisos.
-
Ejecute el playbook usando el comando ansible-playbook. La bandera -i especifica nuestro archivo de inventario.
ansible-playbook -i inventory.ini copy_file.yml
Debería ver una salida que indica la ejecución exitosa del playbook, similar a esta:
PLAY [Deploy a static file to localhost] ***************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Copy info.txt and set attributes] ****************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
Finalmente, verifique que el archivo se copió correctamente y tiene los atributos correctos. Use el comando ls -l para verificar los permisos, el propietario y el grupo.
ls -l /tmp/info.txt
La salida debería mostrar que labex es el propietario y el grupo, y los permisos son -rw-r-----.
-rw-r----- 1 labex labex 72 Jul 10 14:30 /tmp/info.txt
También puede ver el contenido del archivo para asegurarse de que se copió completamente.
cat /tmp/info.txt
This file was deployed by Ansible.
It contains important system information.