Ansile, on continue

Ou l’on continue l’exploration de ansible.

Retour sur le fichier hosts

L’une des questions que je me suis posées est de savoir si on pouvait faire des groupes qui contiennent des groupes.

Par exemple on pourrait avoir une liste des machines de Paris :

1
2
3
4
5
[paris]
tour-eiffel
sacre-coeur
notre-dame
elysee

Et une liste des machines de Bruxelles :

1
2
3
4
5
6
[bruxelles]
atominum
manken-piss
grand-place
brouckere
anspach

Nous avons besoin maintenant de nous adresser à toutes les machines qui sont dans ces deux groupes. Bien sûr nous aurions pu lancer deux fois la commande ansible avec chacun de ces groupes. Mais nous pouvons aussi définir un groupe qui contient les deux groupes déjà existants :

1
2
3
[nord-midi:children]
paris
bruxelles

Il ne nous reste plus qu’à appeller ansible en utilisant le “meta” group comme cible de nos commandes :

1
$ ansible nord-midi -a hostname

Le nouveau groupe doit être déclaré après la définition des deux premiers, c’est la seule contrainte.

Un problème annexe

J’ai plusieurs machines (une grosse quarantaine) listées dans le fichier host de ansible, mais sur lesquelles le paquet python-simplejson n’est pas installé. Du coup ansible n’est pas disponible. Fort heureusement ces machines ont toutes un point commun, leur nom commence par lab.

Grâce à cela je fais pouvoir faire une petite boucle pour installer le paquet manquant et ainsi faire marcher ansible. Voici le petit morceau de shell script qui fait cela1.

1
2
3
4
5
$ for computer in $(cat /etc/ansible/hosts | grep lab)
> do
> echo $computer
> ssh root@$computer yum -y install python-simplejson
> done

Le mot de passe de root vous sera demandé pour chacune des machines.

Une fois le paquet installé, on peut utiliser ansible normalement.


Billet Précédent


  1. Ce code est adapté à des distributions redhat qui utilisent yum. À vous de l’adapter pour le faire fonctionner sur votre distribution particulière. ↩︎