Introduction

Ansible est une solution d’orchestration d’administration et permet ainsi d’automatiser des tâches à travers des playbooks.

Il va ainsi permettre de lancer les actions de vérification et d’application des mises à jour à distance et de manière centralisée avec une seule commande.

Configuration d’Ansible

Créer le répertoire des configurations Ansible dans le répertoire personnel :

$ mkdir -p ~/ansible/playbooks
$ cd ~/ansible

Les serveurs

Créer le fichier d’inventaire ~/ansible/inventory pour configurer les serveurs que vous souhaitez mettre à jour (ceux-ci seront rassemblés dans un groupe [debian]).

[debian:vars]
ansible_user=<nom d'utilisateur>
ansible_port=<port ssh> 

[debian]
serveur1.lan ansible_host=192.168.1.4 ansible_become_pass='{{ serveur1_sudo_pass }}'
serveur2.com ansible_become_pass='{{ serveur2_sudo_pass }}'

On y renseigne les variables applicables aux serveurs du groupe debian :

On renseigne ensuite dans le groupe la liste des serveurs.

Le coffre-fort

Pour permettre à Ansible de réaliser des actions d’administration avec élévation de privilège, il est nécessaire de lui donner accès aux crédentiels du compte utilisé. Pour cela, et afin de ne pas stocker les mots de passe en clair, nous utiliserons la fonctionnalité de coffre-fort d’Ansible (cela s’appelle un vault).

Dans le même répertoire que le playbook qui sera créé plus tard, lancer la commande suivante pour initialiser le coffre-fort et lui donner un mot de passe global :

$ ansible-vault create passwd.yml
New Vault password: 
Confirm New Vault password: 

Cette commande crée un fichier yml chiffré qui sera ouvert avec votre éditeur de texte par défaut.

Pour ajouter un mot de passe, il faut utiliser la syntaxe suivante (un mot de passe par ligne) :

serveur1_sudo_pass: <mot de passe>

Par la suite, il est possible de modifier le coffre-fort. Pour l’ouvrir, il faut utiliser la commande suivante :

$ ansible-vault edit passwd.yml
Vault password: 

Playbook de mise à jour

Voici enfin le paybook pour lancer les taches de mises à jour.

Créer le fichier update.yml :

---
- hosts: debian
  become: true
  tasks:
  - name: Update apt & cache on all hosts
    apt:
      update_cache: yes
      force_apt_get: yes
      cache_valid_time: 3600

  - name: Upgrade all packages on all hosts
    apt:
      force_apt_get: yes
      upgrade: dist

  - name: Check if a reboot is needed
    register: reboot_required_file
    stat: path=/var/run/reboot-required get_md5=no

  - name: Reboot required for
    debug:
      msg: "Me :)"
    when: reboot_required_file.stat.exists

  # - name: Reboot the box if kernel updated
  #   reboot:
  #     msg: "Reboot initiated by Ansible for kernel updates"
  #     connect_timeout: 5
  #     reboot_timeout: 300
  #     pre_reboot_delay: 0
  #     post_reboot_delay: 30
  #     test_command: uptime
  #   when: reboot_required_file.stat.exists

Celui-ci indique qu’il est nécessaire d’élever les privilèges et réalise les tâches suivantes :

La dernière tache, qui est commentée dans ce cas, permet de redémarrer automatiquement lorsque cela est nécessaire. Laisser commenté si vous préférez gérer vos redémarrages manuellement.

Pour lancer le playbook :

$ cd ~/ansible
$ ansible-playbook -i inventory --ask-vault-pass --extra-vars '@passwd.yml' playbooks/update.yml

Sources