Featured image of post Mise à jour des serveurs avec ansible

Mise à jour des serveurs avec ansible

Mise à jour d'un parc de serveurs Debian/Ubuntu avec ansible

Introduction

J’ai un parc de machines virtuelles qui sont pour la plupart sous Debian. Les taches de mises à jour peuvent se faire de différentes façons : manuellement (fastidieux), avec le ‘cron’ des machines… etc

Je vais vous présenter ici, une manière très simple de maintenir un parc informatique sous Debian avec ‘Ansible’ via SSH.

Pré-requi

Vos machines devront être accesibles en SSH depuis l’ordinateur ou Ansible est installé. Il vous faudra seulement un fichier ‘hosts’ configuré dans Ansible pour effectuer les mises à jour sur tous les hôtes. Ce fichier se trouve en général dans le répertoire /home/user/.ansible/hosts. La syntaxe est très simple ; vous regroupez des hôtes dans des groupes.

Par exemple, pour un parc Debian, nous allons créer un fichier ‘hosts’ minimal de ce type :

    debian:
      hosts:
        machine1.domain.nd:
        ip_machine2:
        ip_machine3:
        alias_ssh:

Les machines peuvent être : une adresse IP, un nom de domaine, un alias SSH…

Configuration du fichier Playbook

Le fichier Playbook ne contient qu’une seule section ’tasks’. On lui indique que le Playbook doit être exécuter sur toutes les machines faisant partie du groupe ‘debian’. Le mot de passe de l’utilisateur ayant les droits ‘sudo’ sera demandé au lancement du serveur.

J’ai nommé mon fichier ‘update_debian.yml’.

Remarque : J’ai sur tous mes serveurs le même utilisateur avec le même mot de passe et ayant les droits ‘sudo’.

Remarque : Un test est effectué en fin de fichier pour voir si la machine doit être relancée. Le message n’est qu’informatif, mais le serveur pourrait être aussi relancé automatiquement par Ansible (voir Option : Relance automatique des serveurs).

    ---
    - name: Update Debian
    hosts: debian
    become: yes
    become_method: sudo

    tasks:
    - name: Update package list
        when: ansible_os_family == 'Debian'
        apt: update_cache=yes force_apt_get=yes cache_valid_time=3600

    - name: Upgrade packages
        when: ansible_os_family == 'Debian'
        apt: state=latest force_apt_get=yes

    - name: Check if reboot is required
        stat:
        path: /var/run/reboot-required
        register: reboot_required

    - debug:
        msg: "La machine doit etre relancee"
        when: reboot_required.stat.exists

Option : Relance automatique des serveurs

Il est tout à fait possible aussi de dire à ansible de relancer les serveurs si cela s’avère nécessaire. Il faudra en conséquence, modifier la fin du Playbook comme ceci en remplaçant la section ‘debug’ par celle-ci :

    - name: Reboot the Debian or Ubuntu server
        reboot:
            msg: "Ansible à relancer le serveur suite à une mise à jour du kernel"
            connect_timeout: 5
            reboot_timeout: 300
            pre_reboot_delay: 0
            post_reboot_delay: 30
            test_command: uptime
        when: reboot_required_file.stat.exists 

Lancement du Playbook

La commande à exécuter pour lancer le play book est clle ci :

ansible-playbook --ask-become-pass -i hosts repertoire_playbook/update_debian.yml

Vous devez indiquer le chemin où se trouve votre fichier ‘Playbook’ en remplacant ‘repertoire_playbook’. Ce fichier peut-être n’importe où, mais vous pouvez le mettre à la racine de votre dossier ‘.ansible’.

Si tout se passe bien, vous devriez avoir comme résultat :

Résultat des mises à jour sur les serveurs

Généré avec Hugo
Thème Stack conçu par Jimmy