Tests Ansible
Objectifs du chapitre et prérequis
Précédemment, vous avez abordé la mise en place d’un vérificateur de syntaxe (ansible-lint). Ce type d’outil est relativement intéressant afin de vérifier qu’aucune erreur de syntaxe ne s’est glissée dans un playbook.
Dans ce qui va suivre, les capacités de l’outil Ansible Lint seront approfondies puis l’accent sera mis sur la mise en place de tests plus poussés avec Molecule.
Linter Ansible
1. Contexte
L’outil ansible-lint a été abordé plus tôt lors de la présentation de Git. Par défaut, ce dernier vérifie certaines règles prédéfinies. Ces règles permettent de vérifier indifféremment :
-
la structure du YAML ;
-
la présence du champ name sur les tâches ;
-
l’utilisation des champs become à la place de sudo ;
-
etc.
2. Lancement de l’analyse
Le lancement de l’analyse d’un playbook se fait à l’aide de la commande ansible-lint suivie du playbook à analyser. Ici, un exemple de lancement avec le playbook install-mariadb.yml des chapitres précédents :
$ ansible-lint install-mariadb.yml
Si rien n’est spécifié, la commande ne renverra aucune information. L’ajout de l’option -v permettra d’avoir quelques informations supplémentaires sur les opérations réalisées. Ci-dessous la sortie récupérée lors de l’ajout de cette option :
WARNING Overriding detected file kind 'yaml' with 'playbook' for
given positional argument: install-mariadb.yml
WARNING Listing 13 violation(s) that are fatal
[...]
Rule Violation Summary
count tag profile rule associated tags
2 yaml[colons] basic formatting, yaml
3...
Présentation de Molecule
1. Contexte
L’outil Linter d’Ansible permet de repérer les erreurs de syntaxe et de contrôler - dans une certaine mesure - la qualité des playbooks et des rôles produits. Malgré tout, rien ne remplace le lancement d’un playbook pour tester que tout fonctionne. Molecule est là pour automatiser ce processus d’installation et de vérification.
Pour fonctionner, Molecule s’appuie sur Ansible Galaxy (qui a été évoqué rapidement dans le chapitre sur les playbooks, rôles et notions avancées). Il étend cet outil afin d’y ajouter des fonctions pour faciliter le lancement de tests. On retrouve notamment les capacités suivantes :
-
Création de scénarios de test.
-
Utilisation de pilotes permettant la création d’environnement de tests (Podman, Docker, Vagrant, etc.).
-
Intégration de plusieurs outils de vérification (notamment yamllint et ansible-lint).
2. Prérequis et installation de Molecule
Afin de pouvoir fonctionner correctement, Molecule s’appuie sur de nombreux outils. Une solution recommandée est de simuler l’infrastructure à l’aide de conteneurs. Ce type de solution est simple et surtout léger à mettre en œuvre.
À cette fin, l’utilisateur dispose de plusieurs choix. Dans ce qui va suivre, l’accent sera mis sur l’utilisation de Podman même si quelques indications seront également données pour la mise en place de Docker.
Les autres outils nécessaires seront la commande ansible, l’outil yamllint ainsi que ansible-linter.
Molecule...
Utilisation de Molecule
Molecule est en place ainsi que le moteur de conteneurs. La suite de l’exercice va reprendre le rôle d’installation d’Apache des chapitres précédents afin d’y ajouter un jeu de tests.
1. Fichier de configuration molecule.yml
La commande molecule à son lancement va chercher le fichier molecule.yml dans un sous-répertoire du répertoire molecule (molecule/*/molecule.yml). Par convention, le fichier molecule/default/molecule.yml est souvent utilisé.
Ce fichier au format YAML permet de piloter le cycle de vie complet du lancement des tests.
Ci-dessous l’ensemble des champs disponibles :
-
dependency : gestionnaire des dépendances (Galaxy par défaut)
-
driver : gestionnaire de machines virtuelles (ou containers)
-
lint : nom de l’outil de vérification YAML
-
plateforms : liste des machines virtuelles/containers de tests
-
provisioner : mécanisme permettant de créer les machines virtuelles/containers
-
verifier : outil de vérification des actions réalisées par Ansible
2. Création d’un rôle Apache
a. Initialisation du rôle
Afin d’intégrer le rôle d’installation d’Apache, un rôle vide va être initialisé. Pour cela, la commande molecule sera lancée avec les options suivantes :
-
Les instructions init role suivies d’un contexte et du nom du rôle séparés par un point (eni.apache par exemple) ainsi que l’option --driver-name suivie du pilote de test à utiliser (podman ou docker).
Ci-dessous la commande complète à lancer dans le cas de l’utilisation de Podman :...