Découverte de Ansible
Où l’on découvrira Ansible, petit à petit, comme l’oiseau fait son nid
Le problème
Comme beaucoup de sysadmin, j’ai parfois besoin de diffuser un fichier sur tous les postes utilisateurs (par exemple un nouveau fichier /etc/fstab
).
Plusieurs solutions sont alors envisageables :
- me connecter sur chacune des machines et faire la modification avec
vi
; - copier le nouveau fichier sur les machines ;
- créer un patch, diffuser se patch et l’appliquer sur chacune des machines ;
- faire un script qui prend en entrée la liste des machines et qui fait l’une des opérations déjà listées plus haut ;
- utiliser un produit faire le travail et peut être plus.
Ansible est l’un des nombreux projets qui permettent de mettre en place le dernier point. Citons puppet, chef. Il y a sans doute bien d’autres projets qui entrent dans ce cadre.
J’ai choisi Ansible parce qu’il me semble plus simple à mettre en place (mais peut-être que je me trompe) que les deux autres projets.
prérequis
Ansible est un projet écrit en Python. Il vous faudra donc un python récent (2.7 ou 3.x) sur le machine que nous appellerons “maître” et sur les clients (donc à priori toutes les machines de votre réseau) la bibliothèque python-simplejson
1.
Il est aussi indispensable que la communication ssh
entre le maître et les clients fonctionne. Pour l’instant, je me suis arrangé pour que l’utilisateur root
de chaque client accepte une connexion de mon utilisateur (jacques
) avec ma clef rsa
. Pour cela j’ai dû copier ma clef sur les clients, avec ssh-copy-id
.2
Installation des prérequis sur la machine maître
Je vais essayer d’être exhaustif dans les installations (Debian/Redhat/OSX), tant sur le maître que sur les clients
Debian
|
|
RedHat
|
|
OSX
Nous allons utiliser les portages homebrew
|
|
Installation des prérequis sur les clients
Debian
|
|
RedHat
|
|
OSX
Homebrew a installé pour nous pip
qui va nous permettre d’installer facilement python-simplejson
|
|
Installation de Ansible sur la machine maître
Nous l’avons déjà vu, Ansible est écrit en Pyhton. Nous allons donc utiliser les facilités du langage et de son environnement pour réaliser l’installation. Quelle que soit la plateforme (Debian/RedHat/OSX) nous procéderons de la même façon :
|
|
Configuration de Ansible
La configuration de base est très simple. Tellement simple que nous allons rapidement la complexifier. Il faut créer dans le répertoire /etc/ansible
(il faut sans doute créer le répertoire lui-même), un fichier hosts
qui contient la liste des machines que nous voulons administrer. Il est possible de grouper ces machines selon un critère. Par exemple les serveurs d’un côté et les machines utilisateurs de l’autre. Chacune de ces catégories est repérée par son nom entre crochets ([serveurs]).
Si le fichier /etc/ansible/hosts
existe déjà, vous pouvez supprimer son contenu. Conservez tout de même les premières lignes qui expliquent le contenu du fichier, cela peut toujours servir.
|
|
|
|
Ainsi, il sera possible de s’adresser à une machine (castofiore
), un groupe de machine (serveur
) ou à toutes les machines (all
).
Premier test
Tout est réuni pour faire un premier test. Ansible est installé, nous avons un fichier host
, nous pouvons contacter nos clients par ssh
et python-simplejson
est installé.
|
|
Simple n’est-il pas ?
Analysons la commande passée :
ansible
→ la commande ansibleall
→ nous nous adressons à toutes les machines-m ping
→ nous utilisons le module ping-u root
→ l’utilisateur sur la machine cible estroot
Et voilà !3 Amusez-vous avec cet exemple en attendant la suite des aventures.