Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Ansible
  3. Introduction à la notion de rôle
Extrait - Ansible Gérez la configuration de vos serveurs et le déploiement de vos applications (3e édition)
Extraits du livre
Ansible Gérez la configuration de vos serveurs et le déploiement de vos applications (3e édition)
2 avis
Revenir à la page d'achat du livre

Introduction à la notion de rôle

Objectifs du chapitre et prérequis

1. Contexte et prérequis

Les précédents chapitres ont introduit la notion de playbook. Vous allez réutiliser ce mécanisme afin de procéder à l’installation d’un wiki basé sur MediaWiki. Ce logiciel est composé de deux parties :

  • La partie présentation tournant sous Apache/PHP.

  • La base de données sous MySQL/MariaDB.

Ces deux composants seront installés sur des machines CentOS stream 8. En cas de difficultés pour disposer de ce type de machines, n’hésitez pas à consulter le chapitre Tester Ansible avec des conteneurs.

Vous pouvez vous rendre sur le site suivant pour en savoir davantage : https://www.mediawiki.org/wiki/MediaWiki

2. Fichiers téléchargeables

Vous pouvez récupérer les exemples des répertoires inventaires et variables sur le repository GitHub suivant : https://github.com/EditionsENI/ansible

Vous pouvez également récupérer ces fichiers dans l’archive chapitre-07.tar.gz depuis la page Informations générales.

Introduction aux rôles Ansible

Comme vu dans les chapitres précédents, les playbooks vous permettent d’enchaîner plusieurs actions (templates, shell, copie de fichiers) ainsi que l’endroit où vous devez les réaliser (méthode de connexion, délégation d’opération, etc.).

Seul problème : quand vous aurez écrit une dizaine de playbooks avec pour chacun plusieurs templates et la gestion de plusieurs fichiers, vous risquez d’avoir un peu de mal à vous organiser. Bien sûr, rien ne vous empêche de commencer à créer des sous-répertoires pour y placer vos templates classés par playbooks.

Viendra aussi inévitablement le besoin de réutiliser des instructions. L’instruction include_task peut vous aider, mais ce mécanisme ne fonctionnera pas dans tous les cas.

La notion de rôle répond à ces deux problématiques :

  • Réutiliser du code dans plusieurs playbooks de manière modulaire.

  • Organiser le code se trouvant dans les playbooks.

Dans le cas qui va suivre, vous travaillerez sur la réutilisation du playbook d’installation d’Apache nécessaire au fonctionnement de MediaWiki.

1. Structure d’un rôle

Un rôle est une structure arborescente contenant certains répertoires et fichiers. Les rôles présents dans le répertoire roles seront automatiquement utilisables par vos playbooks. Il est également possible de les mettre à disposition d’Ansible de la manière suivante :

  • Modification de la variable d’environnement DEFAULT_ROLES_PATH.

  • Modification de l’option...

Installation de MediaWiki

Comme évoqué précédemment, vous avez à votre disposition un rôle pour l’installation d’Apache. Vous allez voir comment vous en servir et comment le compléter.

1. Filtres Jinja et installation d’Apache

 Première chose, vous alimenterez un fichier nommé wiki.yml dans lequel vous déclarerez les machines pour l’installation du wiki. Vous y ajouterez les machines apache1 et mysql1 respectivement dans les groupes apache et mysql.

Ci-dessous le contenu de ce fichier :

apache: 
  hosts: 
    apache1: {} 
 
mysql: 
  hosts: 
    mysql1: {} 

Maintenant que vous avez déclaré les différentes machines et que vous les avez classées dans les groupes ad hoc, vous allez pouvoir vous pencher sur le nouveau playbook d’installation d’Apache. Ce dernier s’appellera install-apache.yml et ne lancera que le rôle générique apache. Ci-dessous le contenu de ce fichier :

- name: "Apache installation" 
  hosts: apache 
  roles: 
    - role: "apache" 

Petit problème : il faut un interpréteur PHP pour pouvoir installer MediaWiki. L’interpréteur PHP s’installe avec le package php. Dans ce cas, vous aurez également besoin de php-mysql et php-xml.

 Plutôt que de créer un nouveau rôle pour l’installation de PHP, vous allez simplement ajouter une tâche conditionnée sur la valeur de la variable php_install.

Ci-dessous l’extrait de code...

Finalisation de l’installation de MediaWiki

Avant de poursuivre la découverte d’Ansible, vous allez revenir sur l’installation de MediaWiki. En effet, certains détails n’ont pas été vus et vont maintenant avoir leur importance.

1. Réentrance et script shell

Un point important : la réentrance du playbook n’a pas été vérifiée.

 Pour cela, relancez l’installation du wiki :

$ ansible-playbook -i wiki.yml install-mediawiki.yml 

Malheureusement, quelque chose ne va pas (extrait) :

PLAY [MediaWiki apache configuration] *************************** 
 
TASK [mediawiki/configuration : mediawiki directory] ************ 
ok: [apache1]  
 
TASK [mediawiki/configuration : uncompress mediawiki archive] *** 
ok: [apache1]  
 
TASK [mediawiki/configuration : mediawiki configuration] ******** 
failed: [apache1] (item=) => {"changed": true, "cmd": ["php", 
"install.php", [...]Un fichier LocalSettings.php a été détecté. 
Pour mettre à niveau cette installation, veuillez exécuter 
update.php à la place[...] 

L’installeur PHP indique qu’il ne peut pas relancer l’installation en raison de la présence du fichier LocalSettings.php. En effet, ce fichier indique que MediaWiki est déjà installé (c’est le fichier de configuration du wiki). Ici, le script vous invite à lancer plutôt la commande update.php.

Lorsque vous rencontrez ce genre d’erreur, on peut parler d’un problème de réentrance. Dans le cas présent, le script ne l’est...