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 14:00] – [Création d'un fichier hosts] 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 48: Ligne 51:
 Le fichier hosts situé dans le dossier /etc n'est pas à utiliser pour répertorier les machines.  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.  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.1465740018.txt.gz · Dernière modification : 2016/06/12 14:00 de cecile