Catégories
Devops

Ansible

Outil de gestion de configuration, permet de déployer, modifier, maintenir la configuration (fichiers, services, etc.) d’un nombre important d’hôtes de façon centralisée.


Les concepts utilisés sont assez simple, on parle de :

  • nœuds : éléments du réseau: serveurs, matériel réseau, IOC etc.
  • nœud contrôleur ou nœud maitre : machine qui va exécuter les commandes ansible et ansible-playbook etc qui vont déclencher l’exécution des modules Ansible sur les nœuds enfants
  • nœuds gérés ou nœuds enfants
  • inventaire : liste structurée des nœuds à gérer
  • tache : unité d’exécution d’Ansible
  • playbooks : ensemble de taches Ansible a exécuter (fichier yml)
  • modules : c’est là qu’on trouve la puissance de cet outil tant le nombre de modules fournis est important et permet de gérer des type de nœuds ou taches variés

Ansible dispose d’un système de modules qui lui permettent d’agir sur les nœuds, comme par exemple les module copy qui permet de manipuler des fichiers (copier, remplacer, supprimer etc.) ou command qui permet d’exécuter une commande sur les machine distantes.

Installation

Ansible doit être installé sur le nœud contrôleur, c’est à dire la machine qui va exécuter les commandes ansible et ansible-playbook etc qui vont déclencher l’exécution des modules Ansible sur les nœuds gérés.
Python est un prérequis pour toutes les machines (certains modules nécessitent coté nœuds enfants) et pour utiliser Python 3 il faut effectuer une manip dans le fichier d’inventaire (ou spécifier l’argument -e des CLI) :

[all:vars]
ansible_python_interpreter=/usr/bin/python3

Commande ad-hoc

Il est possible d’exécuter une commande de façon unitaire, pour cela on utilisera la commande ansible:

ansible meswebservers -i inventaire.conf  -m copy -a "src=~/fichier dest=~/chemin/fichierdest" --check --diff

ansible meswebservers -i inventaire.conf -m service -a "name=wpa_supplicant state=stopped enabled=no" --become

ansible meswebservers -i inventaire.conf -m apt -a "update_cache=yes autoclean=yes" --become
  • -m : nom du module utilisé (ici copy)
  • -i : nom du fichier d’inventaire (possible d’utiliser localhost à la place)
  • -a : arguments du module
  • --check : dry run
  • --diff : montre les différences à l’exécution
  • --become : effectue un sudo

Playbooks

Le mode d’utilisation par playbooks (qui sont des fichiers de configuration écrit en yaml) permet réellement d’orchestrer, ordonnancer de façon synchrone ou asynchrone des ensemble de plays.

Voici un exemple de playbook (exemple.yml):

hosts: meswebservers
tasks:
  - copy:
      src: '~/fichier'
      dest: 'chemin/fichierdest'

et on exécute le contenu de ce fichier avec la commande:

ansible-playbook -i inventaire.cfg --check exemple.yml 

Modules

Les modules sont le cœur d’Ansible et permettent les exécutions sur les nœuds distants:

  • apt : package manager des distributions dérivées de Debian
  • package (win_chocolatey pour Chocolatey sous Win): utilise le gestionnaire de package de la distribution (apt, brew, yum, etc.) pour installer, mettre à jour ou désinstaller des packages sur l’OS
  • service : équivalent systemctl
  • copy ou fetch : pour envoyer ou recevoir des fichiers vers les nœuds
  • file (win_file pour Win): permet de manipuler des fichiers: création, suppr, modif de permissions ou de propriétaires (voir l’attr state)
  • debug : permet d’afficher des infos (facts, variables ou expressions) lors de l’exécution des playbooks (a utiliser avec --check)
  • command : a n’utiliser qu’en dernier recours, fait partie de la famille des modules de commandes qui permettent d’exécuter des commandes arbitraires sur les nœuds, sans profiter de la gestion d’état d’Ansible.
  • setup : est appelé auto par ansible-playbook, mais peut être appelé par ansible pour récupérer les facts concernant des nœuds.
    Voirgather_subset et gather_facts

Liens

Configuration Management vs Provisioning

popularité des configuration management tools (Chef, Puppet, Ansible, et SaltStack)

Vidéo d’introduction sur Ansible