Ansible Galaxy – guide complet : utiliser des scripts déjà existants

Vous connaissez désormais le site Ansible Galaxy, qui regroupe des scripts déjà tout prêts en fonction de vos besoins. A présent, je vous propose d’apprendre à intégrer ces différents scripts pour monter un serveur en une seule commande. Pour une meilleure prise en main d’Ansible Galaxy, prenons un exemple concret.

Description d’un projet utilisant des scripts déjà existants

Comme vous le savez, j’aime les sites WordPress. Avec Louise, nous en avons réalisé un certain nombre pour Graphivox. La plupart du temps, le client a besoin d’un site web et il faut mettre en place la même architecture à chaque fois.

Architecture WordPress

Voici notre installation de base :

  • Les fichiers PHP de WordPress.
  • Les fichiers sont interprétés par le langage PHP 7.2 intégré au serveur Apache.
  • Le moteur PHP interroge la base de données MySQL.
  • Tout cet environnement est protégé des attaques d’hackers grâce à Fail2ban.

Cette installation fonctionne sur un serveur Linux.

Recherche des scripts déjà existants dans Ansible Galaxy

Pour chaque composant, nous devons effectuer une recherche sur Ansible Galaxy et choisir celui qui convient le mieux. Si vous souhaitez vous prendre au jeu, lancez vos recherches sur ce site. Puis comparez vos résultats avec ceux du tableau ci-dessous.

Nom/LienDescription
geerlingguy.apacheInstallation du moteur Apache permettant de générer les pages HTML.
geerlingguy.php-versionsInstallation d’une version spécifique de PHP.
geerlingguy.phpInstallation de PHP.
geerlingguy.mysqlInstallation du moteur de base de données MySQL.
geerlingguy.php-mysqlInstallation de l’extension PHP pour réaliser des requêtes vers une base MySQL.
oefenweb.wordpressInstallation de WordPress.
oefenweb.fail2banInstallation de Fail2Ban.

Téléchargement/installation des scripts pour Ansible

Il faut télécharger/installer les scripts d’Ansible Galaxy sur l’ordinateur. Ne vous inquiétez pas : l’idée n’est pas d’installer WordPress sur votre ordinateur. Pour qu’Ansible installe WordPress sur une machine distante ou une machine virtuelle, il doit avoir les scripts pré-téléchargés provenant d’Ansible Galaxy dans un répertoire spécifique d’installation. Dans le cas de notre exemple, lancez la commande suivante :

ansible-galaxy install geerlingguy.apache geerlingguy.php-versions geerlingguy.php geerlingguy.mysql geerlingguy.php-mysql oefenweb.wordpress oefenweb.fail2ban

Le résultat est le suivant :

Ansible-Galaxy Install Script

Comme vous pouvez le constater, les scripts sont téléchargés depuis GitHub et placés dans le répertoire .ansible/roles/.

Comment inclure des rôles dans un Playbook

Si le terme Playbook ne vous parle pas, je vous invite à lire cet article de présentation d’un script Ansible. Pour inclure un rôle, il suffit d’utiliser la propriété roles: et d’ajouter une liste d’éléments. Dans notre cas, le fichier playbook.yml est rempli de cette façon :

- hosts: all
  become: yes
  become_method: sudo
  # Liste des rôles à installer
  roles:
  - geerlingguy.apache
  - geerlingguy.php-versions
  - geerlingguy.php
  - geerlingguy.mysql
  - geerlingguy.php-mysql
  - oefenweb.wordpress
  - oefenweb.fail2ban

C’est plutôt simple à inclure. Cependant si on lance le script en l’état, cela risque de ne pas marcher. Pour chaque rôle, il existe des variables de configuration. Par exemple, on peut configurer WordPress en indiquant un mot de passe spécifique. Pour connaître les variables disponibles, il faut savoir lire la documentation.

Lire la documentation d’un rôle

Prenons l’exemple de WordPress qui sera parlant pour pas mal de personnes je pense. Rendez-vous sur la page du rôle oefenweb.wordpress.

Ansible Galaxy - Lire la documentation

Cliquez sur le bouton Read Me.

Il n’y a pas de secret : le contenu de cette page provient du Readme déposé sur le projet GitHub. En première partie se trouve la liste des propriétés utilisables avec une petite description. Le développeur qui a écrit le script indique quelles sont les propriétés requises dans sa documentation. Sur ce projet, il y a :

  • name : le nom du site.
  • dbname : le nom de la base de données.
  • dbuser : le nom de l’utilisateur pour accéder à la base de données.
  • dbpass : le mot de passe de l’utilisateur pour accéder à la base de données.
  • path : le chemin du dossier d’installation de WordPress.
  • url : l’URL du site web.
  • title : le nom visible par les visiteurs du site.
  • admin_email : l’adresse mail pour le compte administrateur.
  • admin_password : le mot de passe du compte administrateur.
  • themes : liste de thèmes.
  • themes.{n}.name : le nom du thème.
  • plugins : liste de plugins.
  • plugins.{n}.name : le nom du plugin.
  • options : liste d’options.

Vous avez pu remarquer la présence de {n} servant à indiquer que nous sommes dans une liste d’élément. Pour chaque élément n, il y a telle et telle propriété. Par exemple : themes est une propriété de type liste. Dans cette liste on peut trouver par exemple :

themes:
      - name: twentytwelve
      - name: twentythirteen

Il y a n propriétés avec la mention name.

Dans la seconde partie de la documentation, l’auteur présente un exemple de configuration dans un Playbook.

Comment intégrer les variables de configuration dans un Playbook ?

Création du fichier de configuration

Je vous conseille à minima de créer un fichier qui contient la configuration de tout les rôles. Si vous êtes pointilleux, vous pouvez créer un fichier de configuration par rôles. Les fichiers de configurations sont de type YAML. Ils se constituent de cette manière :

#  Nom du role
<nom_de_variable_simple>: <valeur_de_variable_simple>
<liste_variable>:
 - <propriete_1>: <valeur_propriete_1>

Je pense que vous avez compris l’idée. Pour mieux illustrer mon propos, voici un exemple avec le rôle WordPress.

#WORDPRESS
wordpress_installs:
  - name: wordpress
    dbname: wordpress
    dbuser: wordpress
    dbpass: 'heCrE7*d2KEs'
    dbhost: localhost
    path: /var/www/html/wordpress/
    url: http://10.10.10.10
    title: wordpress
    admin_name: admin
    admin_email: admin@debian.com
    admin_password: 'tuFr8=aPra@a'
    themes:
      - name: twentytwelve
        activate: true
      - name: twentythirteen
    plugins:
      - name: contact-form-7
        activate: false
      - name: simple-fields
    users: {}
    options: []
queries: []

Intégration du fichier de configuration dans le Playbook

Pour ajouter notre fichier de configuration, il suffit d’utiliser la propriété vars_files: qui attend une liste de fichier.

Voici un petit exemple :

- hosts: all
  become: yes
  become_method: sudo
  # Liste des rôles à installer
  roles:
  - oefenweb.wordpress
  vars_files:
    - main.yml

Conclusion

Vous êtes maintenant capable de compléter le fichier de configuration pour créer un site WordPress avec Ansible. En effectuant cet exercice, vous serez plus à l’aise sur cette technologie. J’ai déposé le Playbook ainsi que le fichier de configuration sur GitHub. Je vous conseille vivement de les lire après avoir fini votre version. Maintenant que vous avez un bon aperçu de la puissance d’Ansible, je vous recommande de lire cet article Molecule : l’outil créateur de scripts Ansible. Molecule permet notamment de structurer les scripts Ansible.

Si vous rencontrez des problèmes, les commentaires sont là pour vous.

REDUISEZ VOTRE IMPACT... PARTAGEZ CET ARTICLE !

CLIQUEZ SUR LE BOUTON "JE PARTAGE" : LE POST CI-DESSUS EST AUTOMATIQUEMENT COPIÉ.

A PRESENT, RENDEZ-VOUS SUR LINKEDIN ET PARTAGEZ CE CONTENU SUR VOTRE PROFIL !

Jérémy PASTOURET
Jérémy PASTOURET
Journaliste en recherche constante de nouveaux outils plus légers, accessibles à tous et respectueux de la vie privée de leurs utilisateurs.

Commentaires

Ecrire un commentaire

Je m'abonne à la newsletter mensuelle

💌 Consultez nos dernières newsletters
Les Enovateurs

Retrouvez-nous aussi sur

linkedin