Présentation
Ansible c’est quoi ?
Section titled “Ansible c’est quoi ?”Ansible est un outil de gestion de configurations créé par Michael DEHAAN au travers de la société éponyme « Ansible Inc. » sous licence GPL-3.0. En octobre 2015, RedHat rachètera la société pour intégrer l’outil dans ses suites logicielles. Malgré ce rachat, Ansible reste OpenSource et le dépot de développement est disponible sur GitHub.
Le principe d’Ansible est de fournir un outil de gestion de configuration à caractère impératif. C’est-à-dire qu’Ansible ne conserve pas d’état des cibles, il se contente d’exécuter ce qui est demandé et oublie immédiatement le contexte.
L’outil permet de faire de la gestion de parc à grande échelle, sur une grande variété de type d’équipements, de systèmes et d’applications. Parmi les possibilités, il est possible de citer les grands classiques que sont :
- GNU/Linux
- Windows
- Cisco
- Prometheus
- FortiGate
- …
Ansible dispose de plusieurs forces qui le rendent « facile » à appréhender :
- Le code qui sera exécuté est écrit en Python, ce qui le rend accessible par le plus grand nombre
- Les déclarations d’utilisation sont du YAML
Pour l’instant qui fait quoi et quel language est utilisé où reste un peu flou, il faudra avancer un peu plus pour avoir les subtilités.
Mais pas d’inquiétude si vous n’êtes pas à l’aise avec Python, vous ne commencerez à en voir que si vous avez des besoins qui ne sont pas couvert part ce qui existe dans la communauté, ou si vous souhaitez vous même contribuer.
Principe d’idempotence
Section titled “Principe d’idempotence”Le principe d’idempotence introduit le fait suivant :
Si une opération a le même effet qu’on l’applique une ou plusieurs fois, alors elle est caractérisé d’idempotente
Dans le cas d’Ansible, le principe d’idempotence induit qu’autant de fois que l’on demandera l’application de la même configuration, l’état restera le même que lors de la première exécution. Cette composante est « nécessaire » compte tenu du fait qu’Ansible est un outil impératif.
Les différentes notions
Section titled “Les différentes notions”Ansible est composé de plusieurs notions que vous retrouverez souvent :
- Inventaires
- Modules
- Rôles
- Collections
- Playbooks
Je vous donne un peu de contexte pour les différents éléments.
Inventaires
Section titled “Inventaires”Les inventaires d’Ansible sont à considérer comme le « référentiel » des équipements que vous allez configurer. Ils contiendront plusieurs choses :
- Les informations de connexion des équipements (nom d’hôte et/ou adresse IP)
- Des variables qui permettront de configurer finement les ensembles de machine (ou la machine spécifique)
Modules
Section titled “Modules”Les modules Ansible sont ce que l’on peut le plus apparenter à « l’exécuteur » d’actions. Ils sont écrit en Python, ce sont eux qui se chargent d’effectuer les actions sur les équipements.
Ansible en fournit et en maintient nativement beaucoup, et la communauté s’est chargée de générer une énormément de complément pour une large gamme d’équipements et applications.
Les rôles sont des ensembles de configuration Ansible, écrit en YAML, qui permettent d’effectuer un ensemble d’actions sur une cible afin d’obtenir un état final désiré.
Ansible ne maintient pas à ma connaissance de rôle, en revanche la communauté est très active de ce côté là. On retrouve même des éditeurs qui fournissent les rôles nécessaire pour déployer leurs applications.
Collections
Section titled “Collections”Les collections sont un regroupement de différents modules et/ou rôles qui correspondent à un domaine d’application. Elles permettent d’accéder facilement aux modules et/ou aux rôles qu’elles contiennent.
Vous serez confrontés aux collections à tout moment avec Ansible, l’ensemble des modules existant faisant parti de collections.
Par exemple, on retrouve les collections « communes » suivantes :
- ansible.builtin : Collections contenant les modules gérés par Ansible et intégré nativement
- ansible.posix : Collection contenant des modules gérés par Ansible pour des utilitaires courants tels que firewalld
- community.general : Collection communautaire contenant beaucoup de modules génériques
- community.postgresql : Collection communautaire contenant des modules pour l’intéraction avec PostgreSQL
- …
Playbooks
Section titled “Playbooks”Les playbooks permettent de faire la jonction entre l’inventaire et les modules/roles.
Sont défini dans un playbook :
- Les groupes ou les équipements à qui vont s’appliquer les rôles/tâches
- La list des tâches ou rôles à appliquer
Et ensuite ?
Section titled “Et ensuite ?”Ensuite,… je vais rentrer en peu plus dans les détails de tout ça. Le tout avec des exemples.