Ansible est un outil permettant d'installer et de configurer des ordinateurs automatiquement. Pour cela, il faut :
Remarque : la machine de contrôle peut être la machine à configurer
sudo apt-get install virtualenvwrapper
mkvirtualenv ansible
workon ansible
pip install ansible
ansible localhost -m ping
http://docs.ansible.com/ansible/intro_inventory.html#hosts-and-groups
On va déclarer dans le fichier Host les machines que l'on va configurer avec Ansible et des paramètres. On peut le nommer “ansible_hosts”, on le met où l'on veut.
un fichier hosts simple :
mamachine.example.com
Un fichier plus complexe :
mamachine.example.com ansible_port=1234 ansible_user=johnrambo
Le fichier hosts situé dans le dossier /etc n'est pas à utiliser pour répertorier les machines. Il est préférable de créer ses propres fichiers de configuration. Par exemple, pour distinguer un fichier host avec les machines de test, et un fichier host avec les machines de prod.
On peut ensuite demander à ansible d'utiliser le fichier hosts que l'on vient de créer.
ansible -i ./ansible_hosts mamachine.example.com -m ping ansible […] -m apt -a "name=cowsay state=present"
Si on veut voir tous les arguments possibles, on lit LA DOC http://docs.ansible.com/apt_module.html ou via la commande :
ansible-doc apt
Si on ne se connecte pas en root,
--become --become-method=su --ask-become-pass
--become --become-method=sudo --ask-become-pass
Si l'on souhaite que ansible demande le mot de passe ssh (dans le cas ou la clé publique n'est pas présent sur le serveur distant), on peut ajouter l'option « -k »
Super astuce, pour mettre à jour un paquet sur plein de machines (ex: erreur de sécu sur apache) :
-m apt -a "name=apache2 state=latest update_cache=yes"
qui fait un apt update suivit d'un apt install.
Documentation officielle : https://docs.ansible.com/ansible/2.8/modules/modules_by_category.html
Le playbook permet de réunir les tâches de configuration au sein d'un fichier.
Exemple simple (fichier nommé playbook-test.yml).
- hosts: mamachine.example.com tasks: - ping:
Pour l'exécuter :
ansible-playbook -i <chemin de l'inventaire> playbook-test.yml)
En pratique, on définit une liste de tasks :
- hosts: mamachine.example.com tasks: - <nom module>: arg1=val1 arg2=val2 - <nom module>: arg=val
Et mieux : on ajoute un commentaire à chaque task (via la ligne name) :
- hosts: mamachine.example.com tasks: - name: Réalise un arc-en-ciel magique rainbow: color=purple duration=42 - name: Vérifie que le magicien est réveillé wizard: state=up name=merlin
Problème : pour créer des arc-en ciels magique, il faut avoir les droits root, on modifie donc :
- hosts: mamachine.example.com tasks: - name: Réalise un arc-en-ciel magique become: yes rainbow: color=purple duration=42 - name: Vérifie que le magicien est réveillé wizard: state=up name=merlin
et dans la ligne de commande ansible-playbook, on ajoute l'option
--ask-become-pass
Exercice 1 :
Faire un playbook pour la machine de test qui fait :
Documentation : http://docs.ansible.com/ansible/list_of_all_modules.html
Exercice 2 :
Le fichier motd contient le message de bienvenue pour un utilisateur qui se connecte sur la machine.
On veut désormais afficher un nom dans le message d'accueil, et que ce nom soit configurable au niveau d'Ansible. On va utiliser les variables.
On avait une section tasks, on va ajouter une sections vars, et on va appeller la variable grace à la syntaxe “moustache”.
- hosts: mamachine.example.com vars: - wizard_name: "Merlin" - rainbow_duration: 42 tasks: - name: Réalise un arc-en-ciel magique rainbow: color=purple duration="{{ rainbow_duration }}" - name: Vérifie que le magicien est réveillé wizard: state=up name="{{ wizard_name }}"
Note : les moustaches correspondent à la syntaxe de jinja2, cf http://docs.ansible.com/ansible/playbooks_variables.html#using-variables-about-jinja2
Exercice : En reprenant l'exercice précédent : définir le nom de l'utilisateur (magicsystem) dans une variable plutôt qu'en dur dans la tâche.
On peut aussi utiliser des variables dans les fichiers qu'on copie (module copy de l'exercice concerné). Cela s'appelle des templates, module template.
Documentation : http://docs.ansible.com/template_module.html
Exercice : Reprendre l'exercice du motd pour personaliser “Bonjour humain” en utilisant le contenu d'une variable.
Une partie des variables sont pré-définies par ansible, elle s'appellent des “facts”. Elles commencent par “ansible_”.
La liste est ici : http://docs.ansible.com/ansible/playbooks_variables.html#information-discovered-from-systems-facts
Exercice: indiquer l'IPv4 de la machine dans le message de bienvenue MOTD.
ansible-playbook --ask-become-pass --check --diff -l slash.faimaison.net -t celutz,nginx playbook-fma.yml -vvv
--ask-become-pass
-l <host>
-t <tags>
--check --diff
--step
--start-at-task="install packages"
Voici un autre exemple pour commencer: ansible:pourcommencer