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 :
ansible_user: le nom de l’utilisateur qui sera utilisé pour s’authentifier sur les serveurs. Il doit être le même sur tous les serveurs, et avoir la possibilité d’élever ses privilèges (sudo).ansible_port: le port utilisé par SSH, si celui-ci n’est pas le port par défaut. Il doit être le même sur tous les serveurs.
On renseigne ensuite dans le groupe la liste des serveurs.
- Le nom de domaine du serveur.
- Il est possible d’ajouter le paramètre
ansible_hostavec l’adresse IP du serveur si vous préférez forcer son IP. Normalement la résolution DNS devrait suffire. - Le paramètre
ansible_become_passpermet d’indiquer à Ansible le mot de passe à utiliser pour réaliser l’élévation de privilège.
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 :
- Mets à jour les dépôts,
- Mets à jour les paquets,
- Vérifie si un redémarrage du serveur est nécessaire,
- Affiche un message si un redémarrage est nécessaire.
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