Développeur FullStack & Devops

Notes et mémos techniques

Ansible

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

Concepts et vocabulaire

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

Modules Ansible

Ansible dispose d’un système de collections de modules qui lui permettent d’agir sur les nœuds. Les modules sont le cœur d’Ansible et permettent les exécutions sur les nœuds distants, voir doc d'intro et la liste de tous les collections et modules.

On trouvera par exemple le module command qui permet d’exécuter une commande sur les machine distantes.

Facts

Les facts sont des informations basiques concernant un nœud, recueillis par Ansible.
Voir gather_subset et gather_facts

Installation

Ansible doit être pour utiliser Python 3, sur les machines hotes, pour Python3 devrait etre détecté automatiquement, cependant, il est possible de spécifier explicitement l'emplacement du binaire a utiliser à traver un 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 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

Liens

devops
linux
productivite
rédigé le 04/04/20 , maj le 14/02/22 par Behrouze
A proposCheat SheetsOutilsVidéos