Ansible : Gestion et Configuration d'un parc Linux

Comprendre à quoi sert Ansible, comment l'installer et effectuer un test simple comme exemple.

C'est quoi Ansible

Ansible est un logiciel pour la gestion, configuration et controle des services d'un serveur.

Il offre des commandes permettant d'automatiser un deploiement d'infrastructure, par exemple sur un serveur créer un user avec mots de passe, installer un serveur Apache, envoyer un fichier de confguration, redémarrer le service Apache, etc

Le résultat de ces commandes est retourné au format JSON sur la sortie standard.

Là où ca devient encore plus intéressant, c'est qu'on peut regrouper toutes les commandes en un scenario (playbook) et que tout ca peut être rejoué autant de fois que voulu car ansible est idempotent c'est à dire qu'il va vérifier l'état de la machine cible et ne réappliquer que le strict nécessaire pour obtenir l'état final voulu.
 
Ansible est une alternative aux solutions telles que Puppet ou Chef, à la différence qu'Ansible ne requiert aucun client côté machine cible, il ne requiert qu'un accès SSH et ca c'est de la balle!

Pour aller plus loin

On peut donc executer des commandes de base ou appeler des scenarios (playbook) écrits en language YAML.
Dans les 2 cas on peut appliquer celà sur une machine ou un groupe de machines.
A noter qu'il est possible lors du lancement d'un playbook de spécifier un tag, seuls les blocs du Playbook ayant ce tag seront alors joués.

En lancant un scenario, vous allez par exemple faire tout ca en 2min

  • Créer un utilisateur “web_admin”
  • Ajouter cet utilisateur aux sudoers
  • Installer quelques outils systèmes
  • Installer/configurer Nginx
  • etc

Imaginez que votre serveur crashe, avant vous alliez suivre le document Word pour tout réinstaller en 3h, imaginez que vous deviez le faire sur 4 serveurs web, vous allez y passer la journée.
Là, celà prendra 5 minutes, que vous ayez 1 ou 10 serveurs d'ailleurs.
 

C'est la même si vous voulez changer le password d'un utilisateur, vérifier le /tmp ou bien vous assurer que Apache tourne sur toutes les machines.
En gros ca remplace tout vos petits scripts maison, sauf qu'il n'est pas nécessaire d'avoir quoique ce soit côté client, que c'est certainement plus fiable et surtout que c'est idempotent (chose que peu d'admins gèrent dans leur scripts à mon avis!)

 


 

L'installer

Je pars du principe que les machines sont sous le gestionnaire de package yum.

Sur le serveur maître, il faut :

# installer ansible
sudo yum install -y ansible

 

Sur les comptes root des machines cibles, il faut envoyer la clé du maitre pour que ce dernier puisse s'y connecter en SSH

# On ajoute la clé root sur le serveur cible
ssh-copy-id -i ~/.ssh/id_rsa.pub root@centos01
 

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@centos01's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@centos01'"
and check to make sure that only the key(s) you wanted were added.

 
# On teste la connexion root en installant à distance le package python qui est normalement présent par défaut (c'est un prérequis à Ansible côté client quand même)
ssh centos01 "yum install -y python "

 

 

 

Vient maintenant la configuration des fichiers minimums

/etc/ansible/ansible.cfg

Fichier de configuration par défaut, inutile d'y toucher pour le moment.

/etc/ansible/roles/*

Ce fichier sert surtout quand on applique plusieurs rôles aux playbooks

/etc/ansible/hosts

# une machine peut faire partie d'aucun, un ou plusieurs groupes
# Aussi on peut saisir un intervalle de machine pour économiser l'écriture
192.168.0.10
centos[01:03]

[DB_group]
192.168.0.200
192.168.0.205:52
192.168.0.[220:230]
db[2:8].domain.com

[DB_group:vars]
proxy=proxy.local.com
ntp_server=192.168.0.254


[Webserver_group]
192.168.0.200
192.168.0.100

 


Un exemple simple

On test le bon fonctionnement en spécifiant le nom d'un serveur ou groupe de serveur
ansible -m ping centos01
centos01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
 

 


N'hésitez pas à consulter le Pense-bête Ansible .

Écrire un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec une *

 Se rappeler de moi sur ce site

Quelle est la première lettre du mot oaobfcy ? :