Ansible : outil d'automatisation

Contributeurs

(SISR2-2016) Anthony Varin, Alexandre Saligny

Ansible et un outil d'automatisation de tâches (déploiement de logiciels et mise à jours)

Prérequis

Outils:

  • Machine sous Debian 8 avec le paquet ssh installé pour pouvoir gérer l'établissement d'une connexion distante récurrente

Remarque:

  • la version de Ansible décrite dans la procédure est la version 1.7 la procédure n'est pas compatible avec les versions supérieures.

Procédures

Installation de Ansible

  1. Installation du paquet Ansible
 apt-get install ansible

Configuration des Hôtes

Pour enregistrer les différente machine cible (hôte) on modifie le fichier /etc/ansible/hosts en ajoutant a la fin du fichier les adresse IP des hôtes:

# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
...
#   - A hostname/ip can be a member of multiple groups

# Ex 1: Ungrouped hosts, specify before any group headers.

#green.example.com
...

#db-[99:101]-node.example.com

[nom du groupe]
ip machine
ip machine

Test de connexion

Pour tester la connexion entre ansible et les machines cibles on utilise la commande:

 ansible all -m ping -u <nom du compte utilisé par le ssh>

Si la communication est établie, on obtient:

ipmachine | success >> {
    "changed": false, 
    "ping": "pong"
}

Playbook

Création d'un script

Il faut créer un dossier playbook dans le dossier /etc/ansible pour pouvoir stocker un script

Structure d'un script

---
- hosts: nom du groupe ou ip machine ou all 
  vars_files:
    - <fichier crypté avec le mot de passe pour basculer en sudo>
  remote_user: <utilisateur ssh>
  sudo: yes #(mode sudo activer)
  tasks:
    - name: <nom de la tache>
      apt: update_cache=yes #(mise à jours update)
    - name: <nom de la deuxième tache>
      apt: upgrade=dist #(installation des mise a jours)
    - name: <nom de la tâche>
      apt: #utilisation de la commande apt
      nom=<nom du paquet>
      state= <statut de la tâche> #(latest= installation de la dernière version ou absent= désinstallation du paquet)
    - name: <nom de la tâche>
      shell: <envoyer directement une commande au hôte exemple shutdown>

Déploiement de script

Il existe de version pour déployer un script:

  • Si dans le script, on n'a pas utilisé l'option vars_files pour renseigner le mot de passe du super-utilisateur; pour lancer le playbook, on utilisera la syntaxe :
ansible-playbook <nom du script> --ask-sudo-pass
  • La deuxième option est de utiliser l'option vars_files

Dans cette version, il faudra :

  • disposer l'éditeur de texte vim (à installer éventuellement)
  • le mot de passe pour basculer en sudo sur la machine distante –> soit mpsudo cette valeur
  • le mot de passe pour décrypter le fichier sécurisé –> soit mpcrypt cette valeur

Procédure :

1. Créer un fichier crypté stockant le mot de passe mpsudo<script .sh>:

ansible-vault create <nom du fichier>

Le mot de passe mpcrypt vous sera demandé pour la création de ce fichier.

2. Enregistrer se mot de passe mpcrypt dans un fichier .txt avec droit d'écriture et de lecture seulement pour le compte root.

3. Déployer le script

 ansible-playbook <nom du script.yml> --vault-password-file=<nom du fichier contenant le mot de passe //mpcrypt//> 

Automatisation pour l'exécution de plusieurs playbook

Le script suivant permet d'exécuter une liste de playbook à la suite

#script nommé autoPlaybooks.sh
ansible-playbook $1 --vault-password-file=<nom du fichier contenant le mot de passe du fichier crypté>
ansible-playbook $2 --vault-password-file=<nom du fichier contenant le mot de passe du fichier crypté>
...
ansible-playbook $x --vault-password-file=<nom du fichier contenant le mot de passe du fichier crypté>

<script .sh> Pour exécuter le script autoPlaybooks.sh:

 ./autoPlaybooks.sh <playbook1.yml> <playbook2.yml> ...