Instalar roles y colecciones de contenido

AnsibleBeginner
Practicar Ahora

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.