Lire ceci dans d'autres langues :
Anglais, Japonais, Portugais du Brésil, Français, Espagnol.
Cet exercice s'appuie sur les exercices précédents et approfondit vos compétences en Ansible en vous guidant à travers la création d'un rôle qui configure Apache (httpd). Vous utiliserez les connaissances acquises pour intégrer des variables, des gestionnaires et un modèle pour un index.html personnalisé. Ce rôle montre comment encapsuler des tâches, des variables, des modèles et des gestionnaires dans une structure réutilisable pour une automatisation efficace.
Les rôles dans Ansible organisent des tâches d'automatisation et des ressources connexes, telles que des variables, des modèles et des gestionnaires, dans un répertoire structuré. Cet exercice se concentre sur la création d'un rôle de configuration Apache, en mettant l'accent sur la réutilisabilité et la modularité.
En nous appuyant sur notre travail précédent avec la configuration d'Apache, créons un playbook Ansible dédié au nettoyage de notre environnement. Cette étape ouvre la voie à l'introduction d'un nouveau rôle Apache, offrant une vision claire des ajustements effectués. Grâce à ce processus, nous approfondirons notre compréhension de la polyvalence et de la réutilisabilité offertes par les Rôles Ansible.
Exécutez le playbook Ansible suivant pour nettoyer l'environnement :
---
- name: Cleanup Environment
hosts: all
become: true
vars:
package_name: httpd
tasks:
- name: Remove Apache from web servers
ansible.builtin.dnf:
name: "{{ package_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: "{{ item }}"
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: ''
Nous allons développer un rôle nommé apache
pour installer, configurer et gérer Apache.
- Générer la Structure du Rôle :
Créez le rôle à l'aide d'ansible-galaxy, en spécifiant le répertoire des rôles pour la sortie.
[student@ansible-1 lab_inventory]$ mkdir roles
[student@ansible-1 lab_inventory]$ ansible-galaxy init --offline roles/apache
- Définir les Variables du Rôle :
Remplissez /home/student/lab_inventory/roles/apache/vars/main.yml
avec des variables spécifiques à Apache :
---
# vars file for roles/apache
apache_package_name: httpd
apache_service_name: httpd
- Configurer les Tâches du Rôle :
Ajustez /home/student/lab_inventory/roles/apache/tasks/main.yml
pour inclure des tâches pour l'installation d'Apache et la gestion des services :
---
# tasks file for ansible-files/roles/apache
- name: Install Apache web server
ansible.builtin.package:
name: "{{ apache_package_name }}"
state: present
- name: Ensure Apache is running and enabled
ansible.builtin.service:
name: "{{ apache_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
- Implémenter les Gestionnaires :
Dans /home/student/lab_inventory/roles/apache/handlers/main.yml
, créez un gestionnaire pour redémarrer firewalld si sa configuration change :
---
# handlers file for ansible-files/roles/apache
- name: Reload Firewall
ansible.builtin.service:
name: firewalld
state: reloaded
- Créer et Déployer le Modèle :
Utilisez un modèle Jinja2 pour un index.html
personnalisé. Stockez le modèle dans templates/index.html.j2
:
<html>
<head>
<title>Welcome to {{ ansible_hostname }}</title>
</head>
<body>
<h1>Hello from {{ ansible_hostname }}</h1>
</body>
</html>
- Mettre à jour
tasks/main.yml
pour déployer ce modèleindex.html
:
- name: Deploy custom index.html
ansible.builtin.template:
src: index.html.j2
dest: /var/www/html/index.html
Intégrez le rôle apache
dans un playbook nommé deploy_apache.yml
situé dans /home/student/lab_inventory
pour l'appliquer à vos hôtes du groupe 'web' (node1, node2, node3).
- name: Setup Apache Web Servers
hosts: web
become: true
roles:
- apache
Lancez votre playbook pour configurer Apache sur les serveurs web désignés :
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
Une fois le playbook terminé, vérifiez que httpd
fonctionne bien sur tous les nœuds 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
Une fois que httpd
a été vérifié comme étant en fonctionnement, vérifiez si le serveur web Apache sert bien le fichier index.html
approprié :
[student@ansible-1 lab_inventory]$ curl http://node1
<html>
<head>
<title>Welcome to node1</title>
</head>
<body>
<h1>Hello from node1</h1>
</body>
</html>
Navigation
Exercice précédent - Exercice suivant
Cliquez ici pour revenir à l'atelier Ansible pour Red Hat Enterprise Linux