Introducción
El contenido de Ansible puede provenir de roles y colecciones. En entornos de laboratorio restringidos, los archivos de contenido local son más seguros que las descargas de Internet.
En este laboratorio, empaquetará un rol local, lo instalará a través de un archivo de requisitos, inspeccionará las colecciones preinstaladas y aplicará el rol instalado.
Crear un proyecto de instalación de contenido
En este paso, creará un proyecto con una fuente de contenido local, un rol instalado, un playbook y directorios de salida.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory,roles,vendor_src/local_message/{tasks,meta},playbooks,managed,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
roles_path = ./roles
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[managed]
host ansible_connection=local
EOF
Este laboratorio separa la fuente del rol del contenido del rol instalado. vendor_src/local_message representa el contenido que recibió o creó, mientras que roles/local_message será la copia instalada que Ansible cargará realmente.
Crear una fuente de rol local
En este paso, creará una pequeña fuente de rol fuera del directorio roles instalado. Esto simula la recepción de contenido de rol desde una fuente confiable.
Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible. Esto mantiene los comandos estables incluso cuando LabEx ejecuta cada paso por separado.
cd /home/labex/project/rhce-ansible
cat > vendor_src/local_message/tasks/main.yml <<'EOF'
---
- name: Ensure local message directory exists
ansible.builtin.file:
path: /home/labex/project/rhce-ansible/managed/local-message
state: directory
mode: '0755'
- name: Write message from installed role
ansible.builtin.copy:
dest: /home/labex/project/rhce-ansible/managed/local-message/message.txt
content: |
installed_role=local_message
mode: '0644'
EOF
cat > vendor_src/local_message/meta/main.yml <<'EOF'
---
galaxy_info:
author: LabEx
description: Local role for RHCE Ansible prep
license: MIT
min_ansible_version: '2.16'
dependencies: []
EOF
La fuente del rol tiene la misma estructura básica que un rol normal: la lógica de las tareas en tasks/main.yml y los metadatos del rol en meta/main.yml. La tarea escribe un mensaje visible para que pueda comprobar que el rol instalado se ejecutó.
tar -czf vendor_src/local_message.tar.gz -C vendor_src local_message
El archivo comprimido simula un paquete de rol sin conexión. El uso de un archivo local mantiene el laboratorio determinista mientras se enseña el flujo de trabajo de requirements.yml.
ls -l vendor_src/local_message.tar.gz
Instalar el rol desde los requisitos
En este paso, escribirá un archivo de requisitos de rol que apunte al archivo local y lo instalará en roles.
Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible. Esto mantiene los comandos estables incluso cuando LabEx ejecuta cada paso por separado.
cd /home/labex/project/rhce-ansible
cat > requirements.yml <<'EOF'
---
roles:
- name: local_message
src: file:///home/labex/project/rhce-ansible/vendor_src/local_message.tar.gz
EOF
La fuente file:// apunta ansible-galaxy al archivo local. Esta es la misma idea que usar una fuente remota, pero sin depender del acceso a la red.
ansible-galaxy role install -r requirements.yml -p roles --force
La opción -r lee los requisitos, -p roles elige el directorio de instalación y --force hace que el comando sea repetible si vuelve a ejecutar el laboratorio.
find roles/local_message -maxdepth 2 -type f -print
Debería ver los archivos tasks/main.yml y meta/main.yml del rol instalado. El playbook utilizará la ruta del rol instalado, no el directorio vendor_src original.
Inspeccionar el contenido de la colección instalada
En este paso, inspeccionará una colección instalada. La imagen de RHEL10 ya incluye colecciones comunes, por lo que este laboratorio evita una descarga de Internet mientras muestra el descubrimiento de colecciones. Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible. Esto mantiene los comandos estables incluso cuando LabEx ejecuta cada paso por separado.
cd /home/labex/project/rhce-ansible
ansible-galaxy collection list ansible.posix | tee reports/collection-list.txt
ansible-doc ansible.posix.acl | sed -n "1,20p"
Las colecciones empaquetan módulos bajo un espacio de nombres. Aquí, ansible.posix.acl significa el módulo acl de la colección ansible.posix, y ansible-doc demuestra que Ansible puede encontrar su documentación localmente.
Aplicar el rol instalado
En este paso, aplicará el rol instalado desde los requisitos. Esto demuestra que Ansible puede encontrar y ejecutar el contenido del rol instalado. Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible. Esto mantiene los comandos estables incluso cuando LabEx ejecuta cada paso por separado.
cd /home/labex/project/rhce-ansible
cat > playbooks/use-installed-role.yml <<'EOF'
---
- name: Use a locally installed role
hosts: managed
gather_facts: false
roles:
- role: local_message
EOF
El playbook hace referencia solo a local_message porque roles_path apunta al directorio de instalación. Eso mantiene el playbook independiente de la ubicación del archivo.
ansible-playbook playbooks/use-installed-role.yml | tee reports/installed-role-run.txt
La ejecución debería finalizar con failed=0 y crear el archivo de mensaje desde la tarea del rol instalado.
cat managed/local-message/message.txt
Resumen
Ha empaquetado e instalado un rol local a través de requirements.yml, inspeccionado el contenido de una colección instalada y aplicado el rol instalado desde un playbook.


