ansible
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteProchaine révisionLes deux révisions suivantes | ||
ansible [2016/06/12 13:56] – [Installation des dépendances] cecile | ansible [2017/12/15 15:20] – [Préambule] dam | ||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
=====Préambule===== | =====Préambule===== | ||
+ | Ansible est un outil permettant d' | ||
+ | Pour cela, il faut : | ||
* une machine de contrôle (ex: laptop) | * une machine de contrôle (ex: laptop) | ||
* une machine à configurer (ex: serveur) | * une machine à configurer (ex: serveur) | ||
+ | Remarque : la machine de contrôle peut être la machine à configurer | ||
=====Installation d' | =====Installation d' | ||
Ligne 22: | Ligne 24: | ||
* python-dev | * python-dev | ||
* libffi-dev | * libffi-dev | ||
+ | * libssl-dev | ||
* ou tout autre paquet manquant mentionné par pip durant l' | * ou tout autre paquet manquant mentionné par pip durant l' | ||
- | =====Installation des dépendances (sur la machine à controller)===== | + | =====Installation des dépendances (sur la machine à contrôler)===== |
* Sur la machine distante, il y a quelques dépendances à installer, mais pas Ansible: | * Sur la machine distante, il y a quelques dépendances à installer, mais pas Ansible: | ||
Ligne 33: | Ligne 36: | ||
* On teste que Ansible sait se connecter à la machine distante : (l' | * On teste que Ansible sait se connecter à la machine distante : (l' | ||
+ | |||
+ | =====Création d'un fichier hosts===== | ||
+ | |||
+ | http:// | ||
+ | |||
+ | 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 " | ||
+ | |||
+ | **un fichier hosts simple :** | ||
+ | < | ||
+ | | ||
+ | **Un fichier plus complexe :** | ||
+ | < | ||
+ | | ||
+ | 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. | ||
+ | |||
+ | =====Utilisation de la commande ansible (commandes ad-hoc)===== | ||
+ | |||
+ | On peut ensuite demander à ansible d' | ||
+ | < | ||
+ | ansible -i ./ | ||
+ | |||
+ | ansible […] -m apt -a " | ||
+ | </ | ||
+ | |||
+ | |||
+ | Si on veut voir tous les arguments possibles, on lit LA DOC http:// | ||
+ | ou via la commande : < | ||
+ | |||
+ | |||
+ | Si on ne se connecte pas en root, | ||
+ | |||
+ | * si on utilise su, on ajoute < | ||
+ | * si on utilise sudo, on ajoute < | ||
+ | |||
+ | Super astuce, pour mettre à jour un paquet sur plein de machines (ex: erreur de sécu sur apache) : < | ||
+ | |||
+ | =====Les playbooks===== | ||
+ | |||
+ | Documentation officielle : http:// | ||
+ | |||
+ | 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' | ||
+ | |||
+ | 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, | ||
+ | |||
+ | **Exercice 1 :** | ||
+ | |||
+ | Faire un playbook pour la machine de test qui fait : | ||
+ | |||
+ | * vérifier que cowsay est désinstallé (module apt) | ||
+ | * créer un utilisateur unix nommé " | ||
+ | |||
+ | Documentation : http:// | ||
+ | |||
+ | **Solution 1 :** | ||
+ | < | ||
+ | tasks: | ||
+ | - name: installer la vache qui parle | ||
+ | apt: name=cowsay state=absent | ||
+ | - name: créer le magicien magic | ||
+ | user: name=magicsystem | ||
+ | </ | ||
+ | |||
+ | **Exercice 2 :** | ||
+ | |||
+ | Le fichier motd contient le message de bienvenue pour un utilisateur qui se connecte sur la machine. | ||
+ | |||
+ | * Ajouter une task qui renseigne /etc/motd avec le contenu suivant : Bienvenue sur cette machine cher humain. | ||
+ | * Indice : la démarche est de demander à Ansible de copier un fichier local vers la machine à configurer | ||
+ | * Indice : débrouillez-vous pour trouver quel module utiliser <3 (vérifier en se connectant en SSH) | ||
+ | |||
+ | ====Les variables==== | ||
+ | |||
+ | On veut désormais afficher un nom dans le message d' | ||
+ | |||
+ | On avait une section tasks, on va ajouter une sections vars, et on va appeller la variable grace à la syntaxe " | ||
+ | |||
+ | < | ||
+ | - hosts: mamachine.example.com | ||
+ | vars: | ||
+ | - wizard_name: | ||
+ | - rainbow_duration: | ||
+ | tasks: | ||
+ | - name: Réalise un arc-en-ciel magique | ||
+ | rainbow: color=purple duration=" | ||
+ | - name: Vérifie que le magicien est réveillé | ||
+ | wizard: state=up name=" | ||
+ | </ | ||
+ | |||
+ | Note : les moustaches correspondent à la syntaxe de jinja2, cf http:// | ||
+ | |||
+ | Exercice : En reprenant l' | ||
+ | |||
+ | ====Les templates==== | ||
+ | |||
+ | On peut aussi utiliser des variables dans les fichiers qu'on copie (module copy de l' | ||
+ | |||
+ | Documentation : http:// | ||
+ | |||
+ | Exercice : Reprendre l' | ||
+ | |||
+ | ====Les " | ||
+ | |||
+ | Une partie des variables sont pré-définies par ansible, elle s' | ||
+ | |||
+ | La liste est ici : http:// | ||
+ | |||
+ | Exercice: indiquer l' | ||
+ | |||
+ | =====Bug Wheezy / Ansible version 2.1.0.0===== | ||
+ | |||
+ | Erreur au lancement des commandes Ansible : < | ||
+ | fatal: [machine]: FAILED! => {" | ||
+ | |||
+ | Pour corriger le problème, il faut spécifier la valeur all au module dather_subset dans le fichier de configuration. | ||
+ | |||
+ | Pour cela, on crée un fichier ansible.cfg dans le répertoire courant, on ne modifie pas le fichier de configuration dans /etc. | ||
+ | On ajoute les lignes suivantes : | ||
+ | |||
+ | < | ||
+ | [defaults] | ||
+ | # some specific values | ||
+ | gather_subset | ||
+ | </ | ||
+ | |||
+ | On peut aussi spécifier le chemin du fichier host dans le répertoire courant pour ne pas avoir à le spécifier dans les commandes ansible avec le -i. Pour cela on ajoute la ligne : | ||
+ | |||
+ | < | ||
+ | hostfile = <mon fichier host> | ||
+ | </ |
ansible.txt · Dernière modification : 2024/06/13 18:54 de gde