Démarrer avec Ansible pour configurer son labo DevOps
Ansible est devenu l’outil de référence en matière de gestion de configuration. Il convient dès lors à en connaître le fonctionnement. Cet article vous en donne les premiers rudiments, associé à GitHub et Vagrant.
La seule installation de Linux ne suffit pas si l’on souhaite lancer ses propres expérimentations DevOps ; les machines virtuelles doivent être configurées pour s’adapter à l’application et à ses utilisateurs, et imiter au plus près l’environnement de production réel. Les outils de gestion de configuration sont d’une grande aide quand il s’agit de gérer ces nouveaux systèmes et leurs mises à jour, car ils éliminent le travail manuel.
Il existe de nombreux outils de gestion de configuration, mais cet article ne portera que sur Ansible, devenu une des références des entreprises. C'est un bon outil, sans agent, si on souhaite apprendre les concepts d'automatisation de DevOps.
Ansible est un outil open source né chez Red Hat.
Installer et exécuter Ansible
Pour apprendre Ansible, il convient d’installer certains prérequis : Ansible sur la VM maître et Python sur les nœuds. Pour les besoins de cet article, l'outil de gestion de configuration a été associé à Vagrant - l'installation fait partie du processus de provisioning de Vagrant :
Vagrant copie le fichier depuis le même dossier que le fichier Vagrant et l'exécute à l'intérieur de la machine virtuelle node1 pendant le provisioning. Le fichier contient des commandes pour installer certains paquets :
node1 et node2 utilisent ce même script pour installer Python, qui fournit l'environnement d'exécution d'Ansible. Pour la VM maître, utilisez un script différent appelé ansible.sh pour installer Ansible ainsi que Python. Vous avez déjà créé les VMs, alors utilisez la commande vagrant provision pour que Vagrant exécute ces scripts. Utilisez vagrant destroy, puis vagrant up pour avoir un déploiement propre.
Une fois la configuration d’Ansible finalisée, committez à Git en ajoutant les deux nouveaux fichiers script shell (.sh) puis en validant les modifications :
Ce laboratoire DevOps nécessite une authentification par clé RSA pour que l'utilisateur de la VM maître puisse se connecter (SSH) dans les nœuds sans mot de passe. C'est ainsi qu'Ansible gère la configuration sans agent : Il se connecte via SSH et exécute des commandes. Utilisez ssh vagrant pour vous connecter au maître, puis exécutez la commande ssh-keygen pour créer des clés RSA pour l’utilisateur Vagrant :
La commande ssh-copy-id copie une clé dans node1. Il vous invite à accepter la clé SSH et à fournir le mot de passe de l'utilisateur Vagrant, qui est vagrant. Exécutez à nouveau la commande pour copier la clé dans le nœud2 :
Le laboratoire est maintenant configuré, mais ce n’est que le début. Regardez le fichier d'inventaire qui liste les machines gérées par Ansible. La liste d'inventaire par défaut est conservée dans /etc/ansible/hosts, où sont listés le maître et les nœuds en deux groupes :
Cette configuration n'a pas de système de résolution de noms, alors référez-vous aux nœuds par leurs adresses IP. Il est également important que vous puissiez parler aux deux nœuds en utilisant le module Ansible ping avec la commande ansible nodes -m ping :
Les deux nœuds doivent répondre par un pong, qui vérifie que la connexion SSH fonctionne et que l'inventaire contient les bonnes adresses IP. A ce stade, vous pouvez continuer à exécuter des commandes individuelles, mais pour vraiment apprendre Ansible, placez les commandes dans un playbook qui fonctionne à partir d'une seule invite. Les playbooks sont écrits en YAML. Le playbook pour pinger les nœuds est simple :
Pour exécuter le playbook, utilisez la commande ansible-playbook et passez-lui le nom du fichier YAML :
Dans cet exemple, deux tâches ont été effectuées pour chaque nœud : la tâche d'installation est un test – il vérifie que l'utilisateur peut bien parler au nœud-, puis la tâche ping s'exécute. La tâche ping est redondante, car la tâche d'installation vérifie qu'Ansible fonctionne. Les playbooks peuvent contenir des centaines de lignes de tâches.