Outils pour utilisateurs

Outils du site


ansible

Ansible

Préambule

  • une machine de contrôle (ex: laptop)
  • une machine à configurer (ex: serveur)

Installation d'Ansible (sur la machine de contrôle)

  • Installation de virtualenv
    sudo apt-get install virtualenvwrapper 
  • On doit relancer l'émulateur de terminal ensuite.
  • Création du virtualenv ansible
    mkvirtualenv ansible
  • Démarrer le virtualenv (Il faut être « dans » le virtualenv pour travailler avec ansible)
    workon ansible
  • Installer ansible dans le virtualnv (pour avoir la v2 et ça tombe bien c'est le but du jeu)
    pip install ansible
  • Si pip install couine il faut vérifier si les paquets suivant sont installés
    • build-essential
    • python-dev
    • libffi-dev
    • libssl-dev
    • ou tout autre paquet manquant mentionné par pip durant l'installation

Installation des dépendances (sur la machine à contrôler)

  • Sur la machine distante, il y a quelques dépendances à installer, mais pas Ansible:
    • python-apt python-yaml
  • On choisit une machine distante (ou locale), accessible en SSH, ici ça sera localhost
  • On teste que Ansible sait se connecter à la machine distante : (l'option -m permet de lancer un module)
    ansible localhost -m ping

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 :

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.

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.

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,

  • si on utilise su, on ajoute
     --become --become-method=su --ask-become-pass 
  • si on utilise sudo, on ajoute
     --become --become-method=sudo --ask-become-pass 

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.

Les playbooks

Documentation officielle : http://docs.ansible.com/ansible/playbooks_intro.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 :

  • 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

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'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.

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.

Bug Wheezy / Ansible version 2.1.0.0

Erreur au lancement des commandes Ansible :

fatal: [machine]: FAILED! => {"changed": false, "failed": true, "msg": "unsupported parameter for module: gather_subset"}

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  = all

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: 2016/12/13 11:21 par cecile