Jacques Foucry bio photo

Jacques Foucry

IT, râleur et faiseur de pain

Email



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-simplejson1.

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

1
$ apt-get install python

RedHat

1
$ sudo yum install python

OSX

Nous allons utiliser les portages homebrew

1
$ brew install python

Installation des prérequis sur les clients

Debian

1
$ sudo apt-get install python-simplejson

RedHat

1
$ sudo yum install python-simplejson

OSX

Homebrew a installé pour nous pip qui va nous permettre d’installer facilement python-simplejson

1
$ sudo pip install 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 :

1
$ sudo pip install ansible

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.

1
$ sudo mkdir /etc/ansible
1
2
3
4
5
6
7
8
9
10
11
12
$ cat /etc/ansible/hosts
[user]
tintin
haddock
dupond
dupont
castafiore

[serveur]
bordurie
syldavie
gopal

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é.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ ansible all -m ping -u root
tintin | success >> {
    "changed": false, 
    "ping": "pong"
}

haddock | success >> {
    "changed": false, 
    "ping": "pong"
}

... 

gopal | success >> {
    "changed": false, 
    "ping": "pong"
}

Simple n’est-il pas ?

Analysons la commande passée :

  • ansible → la commande ansible
  • all → nous nous adressons à toutes les machines
  • -m ping → nous utilisons le module ping
  • -u root → l’utilisateur sur la machine cible est root

Et voilà !3 Amusez-vous avec cet exemple en attendant la suite des aventures.


Billet Suivant

  1. On me signale dans l’oreillette qu’à partir de python 2.5 l’installation de simplejson sur les clients n’est pas nécessaire 

  2. Il sera intéressant d’utiliser Ansible pour faire cette distribution. Nous verrons plus tard comment nous y prendre. 

  3. À prononcer à l’américaine 


Laisser un commentaire

Les commentaires sont soumis à modération.