Je continue de chercher des fonctions à mon raspberry pi et intéressons nous cette fois au gestionnaire de configuration et en particulier à Ansible. Pourquoi Ansible et non pas Puppet ou Chef qui sont plus connus ? Tout simplement parce que Ansible fonctionne sans avoir à installer un agent sur les clients contrairement aux deux autres. Une simple connexion SSH lui suffit.

J’ai donc décidé d’installer Ansible sur mon raspberry pi car lui ne nécessite pas de rafraîchissement contrairement à mes autres machines tournant sous Ubuntu. Cela va donc m’aider à configurer mes machines très rapidement. Dans un premier temps, on installe Ubuntu et dans un second temps, on lance sa post-installation qui va être entièrement automatisée par Ansible à l’aide d’un playbook.

Installation d’Ansible

Nous allons plutôt utiliser la version plus récente disponible dans le gestionnaire pip que celle disponible en package :

sudo apt-get install python-pip python-dev sshpass
sudo pip install ansible

Vérification de la bonne installation d’Ansible

Contrôlons la version installée

ansible --version
ansible 1.8.2
  configured module search path = /usr/share/ansible

Premiers pas avec Ansible

Lançons la commande suivante qui va simplement lancer en local (-c local) un shell qui executera la commande echo salut B0B

ansible all -i "localhost," -c local -m shell -a 'echo Salut B0B'

Ce qui donne à l’écran :

localhost | success | rc=0 >>
salut B0B

La commande a fonctionné avec succès. Cet exemple est assez simple mais pour des tâches plus évoluées nous allons faire appel au playbook (livre de recette) d’Ansible. Ces playbooks utilisent la syntaxe très simple YAML

sudo vi playbook.yml
---
- hosts: localhost
  tasks:
  - shell: echo 'Salut B0B'

Pour exécuter ce playbook il faut utiliser la commande ansible-playbook

ansible-playbook -i "localhost," -c local playbook.yml

L’affichage est un peu différent :

PLAY [localhost] **************************************************************

GATHERING FACTS ***************************************************************
ok: [localhost]

TASK: [shell echo 'Salut B0B'] ************************************************
changed: [localhost]

PLAY RECAP ********************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0

Lancement d’Ansible sur plusieurs serveurs

Dans un premier temps, il faut créer un fichier qui définit la liste des serveurs à utiliser :

sudo vi /etc/ansible/hosts

Il faut ajouter soit les noms DNS des machines ou leur adresse IP dans des groupes. Le nom du groupe est entre [ groupe ]

[portables]
bob-port ansible_ssh_host=192.168.0.31

[fixe]
bob-fixe ansible_ssh_host=192.168.0.29

Il faut ensuite créer une clé SSH et diffuser la clé publique sur les machines clientes :

ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.0.13

Démarrons l’agent SSH qui évitera de rentrer la paraphrase à chaque commande :

ssh-agent bash
ssh-add ~/.ssh/id_rsa

Et pour finir lançons le module ( -m ) ping sur les postes fixes :

ansible fixes -m ping

Et bonne nouvelle elle est atteignable :

bob-fixe | success >> {
    "changed": false,
    "ping": "pong"
}

Lors d’un prochain billet nous aborderons l’écriture d’un playbook plus évolué permettant de configurer et d’installer un nouveau serveur.