Ansible : Gestion et Configuration d'un parc Linux

Rédigé par Nerd Aucun commentaire


19 janvier 2019 Articles ansible gestion configuration linux playbook yaml


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 de la configuration d'un parc de serveurs.

Il offre des commandes permettant d'automatiser un deploiement d'infrastructure, par exemple sur un serveur d'enchainer la création d'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!

Dans la vraie vie ca donne quoi ?

On peut donc executer des commandes de base, ou appeler des scenarios complets (fichier 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 que c'est certainement plus fiable et surtout que c'est idempotent (chose que peu d'admins gèrent dans leur scripts à mon avis!)

 


 

Installer Ansible

Je pars du principe que la machine Ansible maitre est sous Redhat / Centos (gestionnaire de package yum.)

sudo yum install -y ansible

 

Pour pouvoir se connecter en SSH sur les machines cibles, le user utilisé de la machine maitre (toto par exemple) doit envoyer sa clé publique sur toutes les machines cibles.
Il le fait sur un compte distant (ansible par exemple) ayant des droits sudo.
 

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

Evidemment on peut aussi le faire sur le compte root distant mais ce n'est pas conseillé.

 

On teste la connexion root en installant à distance le package python.
Ce paquet est normalement déjà présent par défaut (c'est un prérequis à Ansible côté client, le seul d'ailleurs)

 

ssh ansible@centos01 "yum install -y python "

 

 

Configuration de base

Voilà, Ansible est installé. Faisons un tour rapide sur les fichiers de base

  • /etc/ansible/ansible.cfg :Fichier de configuration par défaut, inutile d'y toucher pour le moment.

  • /etc/ansible/roles/* :Ce dossier contient les rôles installés, nous verrons plus tard l'intérêt d'un rôle, inutile d'y toucher pour le moment.

  • /etc/ansible/hosts : C'est l'inventaire contenant toutes les machines qu'on veut gérer. Il suit le format INI en gros avec des [sections]

# /etc/ansible/hosts

# Machines sans groupe
192.168.0.10 # IP directe
mon_serveur  # si on donne un hostname, ce dernier doit etre resolvable (par DNS, /etc/hosts, etc)
192.168.0.[220:230] # l'intervalle permet d'économiser l'écriture, n'hésitez pas!
db[2:8].domain.com

# C'est un groupe
[DB_group]
192.168.0.200
192.168.0.205:52 # Si le port SSH n'est pas standard, on peut le préciser
centos09



# Ces variables s'appliqueront à tout mon groupe DB_group
[DB_group:vars]
ansible_user=root # indique le user distant utilisé


# Un autre groupe
[Webserver_group]
192.168.0.200 # une machine peut faire partie de plusieurs groupes
centos50 ansible_host=192.168.0.50 ansible_user=toto # on peut appliquer des variables à un host en particulier


# Ceci est pour l'exemple mais il existe deja implicitement un groupe "all" contenant tous les hosts de l'inventaire (excepté localhost)
[all]
DB_group
Webserver_group

L'inventaire est le coeur d'Ansible, donc je vous conseille de l'écrire avec beaucoup d'intelligence, ca rendra votre travail 100X plus facile ensuite.

 

 


Un exemple simple

Ansible fonctionne à partir de modules : file, user, stats, systemd,  etc
Chaque module prend différents paramètres et permet d'effectuer une action précise.

Pour tester la bonne installation, nous allons utiliser le module ping mais attention ce n'est pas un ping au sens littéral mais un ping au sens Ansible, c'est à dire qu'il teste le bon fonctionnement de la liaison SSH puis de la présence de Python côté client.

ansible -m ping centos01
centos01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
 

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


Écrire un commentaire

Quelle est la quatrième lettre du mot 1wyrk ? :