Outils pour utilisateurs

Outils du site


ansible

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
ansible [2016/06/12 13:56] – [Installation des dépendances] cecileansible [2021/01/31 14:09] (Version actuelle) tonio
Ligne 3: Ligne 3:
 =====Préambule===== =====Préambule=====
  
 +Ansible est un outil permettant d'installer et de configurer des ordinateurs automatiquement.
 +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'Ansible (sur la machine de contrôle)===== =====Installation d'Ansible (sur la machine de contrôle)=====
  
Ligne 22: Ligne 24:
         * python-dev         * python-dev
         * libffi-dev         * libffi-dev
 +        * libssl-dev
         * ou tout autre paquet manquant mentionné par pip durant l'installation         * ou tout autre paquet manquant mentionné par pip durant l'installation
  
  
-=====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'option -m permet de lancer un module) <code>ansible localhost -m ping</code>   * On teste que Ansible sait se connecter à la machine distante : (l'option -m permet de lancer un module) <code>ansible localhost -m ping</code>
 +
 +=====Création d'un fichier hosts=====
 +
 +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 :** 
 +<code>mamachine.example.com</code>
 +    
 +**Un fichier plus complexe :**
 +<code>mamachine.example.com ansible_port=1234 ansible_user=johnrambo</code>
 +    
 +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'utiliser le fichier hosts que l'on vient de créer. 
 +<code>
 +ansible -i ./ansible_hosts mamachine.example.com -m ping 
 +
 +ansible […] -m apt -a "name=cowsay state=present"
 +</code>
 +
 +
 +Si on veut voir tous les arguments possibles, on lit LA DOC http://docs.ansible.com/apt_module.html
 +ou via la commande : <code>ansible-doc apt</code>
 +
 +
 +Si on ne se connecte pas en root,  
 +
 +  * si on utilise su, on ajoute <code> --become --become-method=su --ask-become-pass </code>
 +  * si on utilise sudo, on ajoute <code> --become --become-method=sudo --ask-become-pass </code>
 +
 +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) : <code> -m apt -a "name=apache2 state=latest update_cache=yes" </code> qui fait un apt update suivit d'un apt install.
 +
 +=====Les playbooks=====
 +
 +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).
 +<code>
 +- hosts: mamachine.example.com
 +  tasks:
 +    - ping:
 +</code>
 +
 +Pour l'exécuter : <code> ansible-playbook -i <chemin de l'inventaire> playbook-test.yml) </code>
 +
 +En pratique, on définit une liste de tasks :
 +<code>
 +- hosts: mamachine.example.com
 +  tasks:
 +    - <nom module>: arg1=val1 arg2=val2
 +    - <nom module>: arg=val
 +</code>
 +
 +Et mieux : on ajoute un commentaire à chaque task (via la ligne name) :
 +<code>
 +- 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
 +</code>
 +
 +Problème : pour créer des arc-en ciels magique, il faut avoir les droits root, on modifie donc :
 +<code>
 +- 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
 +</code>
 +
 +et dans la ligne de commande ansible-playbook, on ajoute l'option <code> --ask-become-pass </code>
 +
 +**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é "magicsystem" (module user)
 +
 +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.
 +
 +  * 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'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".
 +
 +<code>
 +- 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 }}"
 +</code>
 +
 +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.
 +
 +====Les templates====
 +
 +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.
 +
 +====Les "facts"====
 +
 +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.
 +
 +
 +=====Commandes utiles=====
 +
 +<code>
 +ansible-playbook --ask-become-pass --check --diff -l slash.faimaison.net -t celutz,nginx playbook-fma.yml -vvv
 +</code>
 +  * Demande le mot de passe du host : <code>--ask-become-pass</code>
 +  * Limite le déploiement au host renseigné : <code>-l <host></code>
 +  * Concerne les tags renseignés : <code>-t <tags></code>
 +
 +====Options utiles====
 +
 +  * Tester le playbook : <code>--check --diff</code>
 +  * Lancer étape par étape de manière à choisir d'exécuter une tâche précise ou non : <code>--step</code>
 +  * Démarrer sur une tâche précise : <code>--start-at-task="install packages"</code>
 +
 +
 +Voici un autre exemple pour commencer:
 +[[ansible:pourcommencer|ansible:pourcommencer]]
ansible.1465739801.txt.gz · Dernière modification : 2016/06/12 13:56 de cecile