Introducción
Los roles permiten empaquetar valores predeterminados, tareas, plantillas, archivos y manejadores en una estructura reutilizable. Ayudan a mantener los playbooks breves y facilitan el intercambio de automatizaciones.
En este laboratorio, creará un rol manualmente, añadirá valores predeterminados, una plantilla y tareas, y luego lo aplicará a dos alias de host.
Crear un proyecto de práctica de roles
En este paso, creará un proyecto con un directorio de roles y dos alias de host web locales.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory,roles,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'
[web]
web1 ansible_connection=local
web2 ansible_connection=local
EOF
La configuración roles_path = ./roles le indica a Ansible dónde buscar los nombres de los roles utilizados por los playbooks. Sin ella, es posible que Ansible solo busque en las rutas de roles del sistema o del usuario.
Crear la estructura de directorios del rol
En este paso, creará los directorios clave del rol. defaults almacena variables de baja precedencia, tasks almacena la lógica de las tareas y templates almacena las plantillas Jinja2.
Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible. Esto mantiene la estabilidad de los comandos incluso cuando LabEx ejecuta cada paso por separado.
cd /home/labex/project/rhce-ansible
mkdir -p roles/web_banner/{defaults,tasks,templates}
find roles/web_banner -maxdepth 2 -type d | sort
La salida debería mostrar la raíz del rol junto con defaults, tasks y templates. Estos nombres son significativos para Ansible; por ejemplo, tasks/main.yml es el punto de entrada de las tareas para el rol.
Añadir valores predeterminados y una plantilla al rol
En este paso, añadirá variables predeterminadas y una plantilla. El rol utilizará estos valores a menos que un playbook o el inventario los sobrescriban. Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible.
cd /home/labex/project/rhce-ansible
cat > roles/web_banner/defaults/main.yml <<'EOF'
---
banner_message: Welcome to RHCE Ansible Prep
EOF
cat > roles/web_banner/templates/banner.txt.j2 <<'EOF'
Host: {{ inventory_hostname }}
Message: {{ banner_message }}
EOF
Los valores predeterminados son variables de rol de baja precedencia. Proporcionan al rol un valor utilizable cuando el playbook o el inventario no proporcionan uno, permitiendo al mismo tiempo que quien los llame pueda sobrescribirlos más tarde.
cat roles/web_banner/defaults/main.yml roles/web_banner/templates/banner.txt.j2
La plantilla combina el alias del host actual con el mensaje predeterminado. Cuando el rol se ejecute para dos hosts, la misma plantilla debería generar dos líneas Host: diferentes.
Añadir tareas al rol y aplicarlo
En este paso, añadirá tasks/main.yml y un playbook que aplique el rol. El rol creará un directorio para el host y generará un archivo de banner por cada host.
Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible.
cd /home/labex/project/rhce-ansible
cat > roles/web_banner/tasks/main.yml <<'EOF'
---
- name: Ensure host banner directory exists
ansible.builtin.file:
path: "/home/labex/project/rhce-ansible/managed/{{ inventory_hostname }}"
state: directory
mode: '0755'
- name: Render host banner
ansible.builtin.template:
src: banner.txt.j2
dest: "/home/labex/project/rhce-ansible/managed/{{ inventory_hostname }}/banner.txt"
mode: '0644'
EOF
cat > playbooks/apply-role.yml <<'EOF'
---
- name: Apply reusable web banner role
hosts: web
gather_facts: false
roles:
- role: web_banner
EOF
El archivo de tareas del rol contiene la implementación, mientras que playbooks/apply-role.yml permanece breve y solo nombra el rol. Este es el valor principal de los roles: una estructura reutilizable sin tener que repetir cada tarea en cada playbook.
ansible-playbook playbooks/apply-role.yml --syntax-check
Ejecutar el playbook basado en roles
En este paso, ejecutará el playbook e inspeccionará los archivos generados. El playbook se mantiene breve porque el rol contiene la implementación reutilizable. Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/apply-role.yml | tee reports/role-run.txt
La ejecución debería realizar el rol una vez por cada alias de host en el grupo web. Un resumen exitoso con failed=0 significa que el rol se encontró a través de roles_path y sus tareas se completaron.
cat managed/web1/banner.txt managed/web2/banner.txt
Los archivos generados deberían compartir el mismo mensaje pero tener líneas Host: diferentes. Esto demuestra que el rol reutilizó la misma lógica mientras generaba datos específicos para cada host.
Resumen
Ha construido una estructura de rol reutilizable, ha añadido valores predeterminados, tareas y una plantilla, ha aplicado el rol desde un playbook y ha verificado el resultado generado.


