[FRENCH] La gestion de configuration: Introduction d'Ansible
Introduction
Ansible fait partie des outils Open Source les plus robustes dans le marché de gestion de configurations, et qui permet d’automatiser le provisionnement d’infrastructures, l’installation et le déploiement des applications et/ou logiciels, et les tâches quotidiennes que peuvent réaliser les administrateurs/techniciens IT dans les différents types de plateformes porteuses (On-Premise, Cloud...).
La particularité d’Ansible c’est qu’il se connecte au système cible par défaut via une connexion Secure Shell (SSH), et réalise dessus une série d’instructions qui devraient s’exécuter manuellement à travers des programmes appelés “modules d’Ansible”. Il n’a besoin d’aucun daemon ni de base de données supplémentaire pour son exécution. Contrairement à d’autres gestionnaires de configurations concurrent, Ansible est donc “Agentless” et ne nécessite pas d’installations supplémentaires sur les machines sur lesquelles il va s’exécuter.
Les instructions d’Ansible sont exécutées par ce que nous appelons des “Playbooks”, qui sont un modèle de tâche d’automatisation et des opérations complexes qui ne nécessitent aucune intervention humaine. Ces playbooks sont écrits en langage YAML, qui a la particularité d’être facilement lisible pour l’Homme et sont exécutés sur une machine, un ensemble de machines à travers la notion “d’inventaires”. Ansible peut aussi exécuter les différentes instructions par des simples commandes Ad-Hoc, mais cela devient compliqué à faire dès lors qu’on manipule de longues et complexes instructions.
Exemple:
ansible < HOST > -m ping (Cette commande permet de ping un host déclaré dans l’inventaire ou le localhost, l’option -m permet de spécifier le module invoqué).
Plus de détails sur les commandes Adhocs sont disponibles via la commande "man ansible".
Exemple de playbook:
Pour lancer un playbook, nous utilisons la commande suivante: ansible-playbook nginx-deploy.yml (Il est recommandé d'utiliser l'option --syntax-check qui permet vérifier les éventuelles erreures de syntaxe YAML).
Vous trouvez sur ce lien de la documentation officielle Red Hat, plus de détails à propos les playbooks et leurs syntaxes.
Il est aussi facile d’installation, à travers une simple commande Linux nous pourrons avoir Ansible fonctionnel.
Comme prérequis il faut s’assurer d’avoir:
- Une machine RHEL ou autres distribution UNIX (La commande d’installation diffère selon l’OS).
- Un utilisateur avec les privilèges d’admin.
- Un “repository” localement configuré ou une souscription.
$ sudo dnf install -y ansible-core
$ ansible –version
Ensuite il faut s’assurer de générer et partager les clefs SSH (ssh-keygen / ssh-copy-id) avec les nœuds qui vont l’utiliser, ainsi que crée l’utilisateur Ansible dans ces machines et le donné des droits nécessaires pour une connexion sans mot de passe (dans /etc/sudoers.d), enfin nous pouvons modifier le fichier d’inventaire qui contient les hôtes administrés ainsi que le fichier de conf (ansible.cfg).
Ansible utilise deux puissants moyens pour gérer les playbooks:
Les rôles: Les rôles sont des éléments réutilisables comprenant des composants Ansible (variables, fichiers, templates, tâches…), leur but étant de faciliter la manipulation des exécutions Ansible.
Les collections: sont un format qui rend possibles aux développeurs de codes d’utiliser/partager de manière centralisé le code YAML qu’ils ont développé (que l’on peut trouver dans Ansible Galaxy).
Ansible dispose d’une plateforme graphique qui se base sur un framework puissant, et sans agent, créé par Red Hat nommée “Red Hat Ansible Automation Plateform” anciennement connu sous le nom d’Ansible Tower, et qui permet de gérer les différents composants et les automatismes à grand échelle de bout en bout, elle permet aux utilisateurs de créer et gérer les différentes configurations sur les différents types de plateformes multi-cloud. Plus de détails sur l’installation de Red Hat Ansible Tower se trouvent ici.
L’interface web d’Ansible Tower, comme nous constatons dans la figure ci-dessus, montre un résumé de l’activité récente, le nombre d’hôtes gérés ainsi qu’un résumé de tous les problèmes rencontrés lors des différentes exécutions. Ansible Tower permet une visualisation plus “claire” des différents composants d’Ansible, Il est aussi indispensable de comprendre certains concepts et conventions de dénomination.
• Les Projets: Les projets peuvent être vu comme une collection de playbooks dans Ansible Tower. Ces playbooks résident dans votre instance Ansible Tower oudans un système de contrôle de version de code source pris en charge par Tower.
• L’Inventaire: Un inventaire est un ensemble d’hôtes sur lesquels vous pouvez exécuter des tâches. L’inventaire est divisé en groupes et ces groupes contiennent les hôtes réels. Les groupes peuvent être configurés manuellement en saisissant un nom d’hôte dans Tower, en utilisant l’un des fournisseurs de cloud pris en charge par Ansible Tower ou en utilisant un script d’inventaire dynamique (En se basant sur des Tags de machines dans vSphere par exemple...).
• Informations d’identification: Les informations d’identification sont utilisées par Tower pour l’authentification lors du lancement de tâches sur des machines, de la synchronisation avec des sources d’inventaire et de l’importation de contenu de projet à partir de systèmes de contrôle.
• Les Modèles: Un modèle de tâche est un ensemble de paramètres qui rend possible d’exécuter une tâche Ansible. Les modèles de tâche sont utiles pour exécuter plusieurs fois la même tâche. Ils facilitent également la réutilisation du contenu du playbook Ansible et la collaboration entre équipes. Pour exécuter une tâche, vous devez d’abord créer un modèle de tâche.
• Les tâches: sont essentiellement des instances de Playbooks Ansible lancés depuis Tower dans l’inventaire de l’hôte.
Conclusion
Avec ceci, nous avons vu de manière générale la définition d’Ansible, ses composants, sa manière de fonctionnement ainsi que le rôle que joue la plateforme web Ansible Tower et les facilités que cela offre. Dans le prochain chapitre, nous allons voir en détail un cas pratique d’utilisation d’Ansible, Ansible Tower et l’automatisation de déploiements d’application via les pipelines MS Azure DevOps.