Nous avons vu dans le chapitre précédent que notre inventaire de machines peut être généré dynamiquement. Nous pouvons donc à l’aide d’Ansible mettre à jour les machines qui devront exécuter les calculs.

Voici un exemple de playbook Ansible pour cela dans le fichier update-servers.yml

---
# Description : Playbook pour la mise à jour des systèmes Ubuntu/Debian
# Ce playbook effectue :
# - La mise à jour du cache des paquets (apt update)
# - La mise à jour des paquets installés (apt upgrade)
 
- name: "Mise à jour des systèmes"
  # Décommenter une des lignes suivantes selon les besoins :
  #hosts: all           # Pour tous les hôtes de l'inventaire
  #hosts: vm_servers   # Pour les machines virtuelles uniquement
  #hosts: lxc_servers  # Pour les conteneurs LXC uniquement
  hosts: calcul_distribue   # Dans notre cas, uniquement les conteneurs LXC servant de workers pour le calcul distribué
  
  # Élévation des privilèges (nécessaire pour apt)
  become: true
  
  # Variables pour le contrôle des mises à jour
  vars:
    # Durée de validité du cache en secondes (86400 = 24 heures)
    cache_valid_time: 86400
    
  tasks:
    - name: "Mise à jour du cache des paquets"
      apt:
        update_cache: yes
        cache_valid_time: "{{ cache_valid_time }}"
      register: apt_update_result
      
    - name: "Mise à jour des paquets"
      apt:
        upgrade: yes
      register: apt_upgrade_result
      
    # Optionnel : Affichage des résultats
    - name: "Affichage des paquets mis à jour"
      debug:
        var: apt_upgrade_result
      when: apt_upgrade_result.changed
 
    # Optionnel : Redémarrage si nécessaire
    - name: "Vérification si un redémarrage est nécessaire"
      stat:
        path: /var/run/reboot-required
      register: reboot_required
 
    - name: "Notification si un redémarrage est nécessaire"
      debug:
        msg: "Un redémarrage du système est recommandé"
      when: reboot_required.stat.exists

Exécutons ce playbook :

deployer@ubuntu-deploy:~/homelab_julia_pve_tf_ansible$ ANSIBLE_REMOTE_USER=root ansible-playbook -i dynamic-inventory.proxmox.yml update-servers.yml
PLAY [Mise à jour des systèmes] ******************************************************************************

TASK [Gathering Facts] ***************************************************************************************
ok: [ubuntu-lxc-1]
ok: [ubuntu-lxc-4]
ok: [ubuntu-lxc-5]
ok: [ubuntu-lxc-3]
ok: [ubuntu-lxc-2]

TASK [Mise à jour du cache des paquets] **********************************************************************
ok: [ubuntu-lxc-3]
ok: [ubuntu-lxc-4]
ok: [ubuntu-lxc-5]
ok: [ubuntu-lxc-1]
ok: [ubuntu-lxc-2]

TASK [Mise à jour des paquets] *******************************************************************************

TASK [Vérification si un redémarrage est nécessaire] *********************************************************
ok: [ubuntu-lxc-1]
ok: [ubuntu-lxc-4]
ok: [ubuntu-lxc-5]
ok: [ubuntu-lxc-3]
ok: [ubuntu-lxc-2]

TASK [Notification si un redémarrage est nécessaire] *********************************************************
ok: [ubuntu-lxc-1] => {
    "msg": "Un redémarrage du système est recommandé"
}
ok: [ubuntu-lxc-3] => {
    "msg": "Un redémarrage du système est recommandé"
}
ok: [ubuntu-lxc-5] => {
    "msg": "Un redémarrage du système est recommandé"
}
ok: [ubuntu-lxc-4] => {
    "msg": "Un redémarrage du système est recommandé"
}
ok: [ubuntu-lxc-2] => {
    "msg": "Un redémarrage du système est recommandé"
}

PLAY RECAP ***************************************************************************************************
ubuntu-lxc-1               : ok=6    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
ubuntu-lxc-2               : ok=6    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
ubuntu-lxc-3               : ok=6    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
ubuntu-lxc-4               : ok=6    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
ubuntu-lxc-5               : ok=6    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0