Leer esto en otros idiomas:
Inglés, Japonés, Portugués de Brasil, Francés, Español.
Este ejercicio se basa en los ejercicios anteriores y avanza tus habilidades en Ansible guiándote a través de la creación de un rol que configura Apache (httpd). Tomarás el conocimiento que has aprendido para ahora integrar variables, manejadores y una plantilla para un index.html personalizado. Este rol demuestra cómo encapsular tareas, variables, plantillas y manejadores en una estructura reutilizable para una automatización eficiente.
Los roles en Ansible organizan tareas de automatización relacionadas y recursos, como variables, plantillas y manejadores, en un directorio estructurado. Este ejercicio se centra en crear un rol de configuración de Apache, enfatizando la reutilización y modularidad.
Basándonos en nuestro trabajo previo con la configuración de Apache, vamos a crear un playbook de Ansible dedicado a limpiar nuestro entorno. Este paso allana el camino para que introduzcamos un nuevo rol de Apache, proporcionando una visión clara de los ajustes realizados. A través de este proceso, obtendremos una comprensión más profunda de la versatilidad y reutilización que ofrecen los Roles de Ansible.
Ejecute el siguiente playbook de Ansible para limpiar el entorno:
---
- name: Cleanup Environment
hosts: all
become: true
vars:
package_name: httpd
tasks:
- name: Remove Apache from web servers
ansible.builtin.dnf:
name: ""
state: absent
when: inventory_hostname in groups['web']
- name: Remove firewalld
ansible.builtin.dnf:
name: firewalld
state: absent
- name: Delete created users
ansible.builtin.user:
name: ""
state: absent
remove: true # Use 'remove: true’ to delete home directories
loop:
- alice
- bob
- carol
- Roger
- name: Reset MOTD to an empty message
ansible.builtin.copy:
dest: /etc/motd
content: ''
Desarrollaremos un rol llamado apache
para instalar, configurar y gestionar Apache.
Cree el rol usando ansible-galaxy, especificando el directorio de roles para la salida.
[student@ansible-1 lab_inventory]$ mkdir roles
[student@ansible-1 lab_inventory]$ ansible-galaxy init --offline roles/apache
Poblamos /home/student/lab_inventory/roles/apache/vars/main.yml
con variables específicas de Apache:
---
# vars file for roles/apache
apache_package_name: httpd
apache_service_name: httpd
Ajustamos /home/student/lab_inventory/roles/apache/tasks/main.yml
para incluir tareas para la instalación y gestión del servicio Apache:
---
# tasks file for ansible-files/roles/apache
- name: Install Apache web server
ansible.builtin.package:
name: ""
state: present
- name: Ensure Apache is running and enabled
ansible.builtin.service:
name: ""
state: started
enabled: true
- name: Install firewalld
ansible.builtin.dnf:
name: firewalld
state: present
- name: Ensure firewalld is running
ansible.builtin.service:
name: firewalld
state: started
enabled: true
- name: Allow HTTPS traffic on web servers
ansible.posix.firewalld:
service: https
permanent: true
state: enabled
when: inventory_hostname in groups['web']
notify: Reload Firewall
En /home/student/lab_inventory/roles/apache/handlers/main.yml
, creamos un manejador para reiniciar firewalld si su configuración cambia:
---
# handlers file for ansible-files/roles/apache
- name: Reload Firewall
ansible.builtin.service:
name: firewalld
state: reloaded
Utilizamos una plantilla Jinja2 para un index.html
personalizado. Almacene la plantilla en templates/index.html.j2
:
<html>
<head>
<title>Welcome to </title>
</head>
<body>
<h1>Hello from </h1>
</body>
</html>
tasks/main.yml
para desplegar esta plantilla index.html
:- name: Deploy custom index.html
ansible.builtin.template:
src: index.html.j2
dest: /var/www/html/index.html
Incruste el rol apache
en un playbook llamado deploy_apache.yml
dentro de /home/student/lab_inventory
para aplicarlo a sus hosts del grupo ‘web’ (node1, node2, node3).
- name: Setup Apache Web Servers
hosts: web
become: true
roles:
- apache
Lanza tu playbook para configurar Apache en los servidores web designados:
ansible-navigator run deploy_apache.yml -m stdout
PLAY [Setup Apache Web Servers] ************************************************
TASK [Gathering Facts] *********************************************************
ok: [node2]
ok: [node1]
ok: [node3]
TASK [apache : Install Apache web server] **************************************
changed: [node1]
changed: [node2]
changed: [node3]
TASK [apache : Ensure Apache is running and enabled] ***************************
changed: [node2]
changed: [node1]
changed: [node3]
TASK [apache : Deploy custom index.html] ***************************************
changed: [node1]
changed: [node2]
changed: [node3]
RUNNING HANDLER [apache : Reload Firewall] *************************************
ok: [node2]
ok: [node1]
ok: [node3]
PLAY RECAP *********************************************************************
node1 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node2 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node3 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Una vez completado el playbook, verifica que httpd
esté corriendo en todos los nodos web.
[rhel@control ~]$ ssh node1 "systemctl status httpd"
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2024-01-29 16:49:13 UTC; 3min 46s ago
[rhel@control ~]$ ssh node2 "systemctl status httpd"
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2024-01-29 16:49:13 UTC; 3min 58s ago
Una vez que se haya verificado que httpd
está corriendo, comprueba si el servidor web Apache está sirviendo el archivo index.html
apropiado:
[student@ansible-1 lab_inventory]$ curl http://node1
<html>
<head>
<title>Welcome to node1</title>
</head>
<body>
<h1>Hello from node1</h1>
</body>
</html>
Navegación
Ejercicio anterior - Próximo ejercicio
Haz clic aquí para volver al taller de Ansible para Red Hat Enterprise Linux