Ansible est un gestionnaire de configuration et un outil de déploiement et d’orchestration très populaire et central dans le monde de l'infrastructure as code (IaC).
Il fait donc également partie de façon centrale du mouvement DevOps car il s’apparente à un véritable couteau suisse de l’automatisation des infrastructures.
Ansible a été créé en 2012 (plus récent que ses concurrents Puppet et Chef) autour d’une recherche de simplicité et du principe de configuration agentless.
Très orienté linux/opensource et versatile il obtient rapidement un franc succès et s’avère être un couteau suisse très adapté à l’automatisation DevOps et Cloud dans des environnements hétérogènes.
Red Hat rachète Ansible en 2015 et développe un certain nombre de produits autour (Ansible Tower, Ansible container avec Openshift).
Ansible est agentless c’est à dire qu’il ne nécessite aucun service/daemon spécifique sur les machines à configurer.
La simplicité d’Ansible provient également du fait qu’il s’appuie sur des technologies linux omniprésentes et devenues universelles.
De fait Ansible fonctionne efficacement sur toutes les distributions linux, debian, centos, ubuntu en particulier (et maintenant également sur Windows).
Ansible est semi-déclaratif c’est à dire qu’il s’exécute séquentiellement mais idéalement de façon idempotente.
Il permet d’avoir un état descriptif de la configuration:
Peut être utilisé pour des opérations ponctuelles comme le déploiement:
Les cas d’usages d’Ansible vont de …:
petit:
moyen:
grand:
Ansible est très complémentaire à docker:
docker_container
.Maintenant un peu abandonné, Ansible Container
rend possible de construire et déployer des conteneurs docker avec du code ansible. Concrètement le langage Ansible remplace le langage Dockerfile pour la construction des images Docker.
Pour l’installation plusieurs options sont possibles:
Avec pip
le gestionnaire de paquet du langage python: pip3 install ansible
pip3 install ansible --upgrade
Avec le gestionnaire de paquet de la distribution ou homebrew sur OSX:
sudo apt-add-repository --yes --update ppa:ansible/ansible
Pour voir l’ensemble des fichiers installés par un paquet pip3
:
pip3 show -f ansible | less
Pour tester la connexion aux serveurs on utilise la commande ad hoc suivante. ansible all -m ping
Il s’agit d’une liste de machines sur lesquelles vont s’exécuter les modules Ansible. Les machines de cette liste sont:
exemple:
[all:vars]
ansible_ssh_user=elie
ansible_python_interpreter=/usr/bin/python3
[worker_nodes]
workernode1 ansible_host=10.164.210.101 pays=France
[dbservers]
pgnode1 ansible_host=10.164.210.111 pays=France
pgnode2 ansible_host=10.164.210.112 pays=Allemagne
[appservers]
appnode1 ansible_host=10.164.210.121
appnode2 ansible_host=10.164.210.122 pays=Allemagne
Les inventaires peuvent également être au format YAML (plus lisible mais pas toujours intuitif) ou JSON (pour les machines).
On a souvent besoin dans l’inventaire de précisier plusieurs options pour se connecter. Voici les principales :
ansible_host
: essentiel, pour dire à Ansible comment accéder à l’hostansible_user
: quel est l’user à utiliser par Ansible pour la connexion SSHansible_ssh_private_key_file
: où se trouve la clé privée pour la connexion SSHansible_connection
: demander à Ansible d’utiliser autre chose que du SSH pour la connexionansible_python_interpreter=/usr/bin/python3
: option parfois nécessaire pour spécifier à Ansible où trouver Python sur la machine installéeAnsible se configure classiquement au niveau global dans le dossier /etc/ansible/
dans lequel on retrouve en autre l’inventaire par défaut et des paramètre de configuration.
Ansible est très fortement configurable pour s’adapter à des environnement contraints. Liste des paramètre de configuration:
Alternativement on peut configurer ansible par projet avec un fichier ansible.cfg
présent à la racine. Toute commande ansible lancée à la racine du projet récupère automatiquement cette configuration.