--- # `lock_timeout` sur CHAQUE tache apt : au premier demarrage, l'image Debian lance ses # propres mises a jour (apt-daily, unattended-upgrades) et tient le verrou dpkg par # vagues. Sans attente, la premiere tache echoue sur un verrou — pas sur une vraie # erreur — et le deploiement d'une VM neuve devient un tirage au sort. # # Attendre ici plutot que seulement avant le playbook : le verrou peut etre repris # ENTRE deux taches, ce qu'une verification ponctuelle en amont ne peut pas empecher. # DÉSARMER AVANT TOUTE OPÉRATION APT, ET NON APRÈS. # # Une tâche apt placée avant celle-ci attendrait le verrou que celle-ci doit justement # libérer — l'ordre n'est pas cosmétique. `state: stopped` en plus de `masked` : masquer # empêche un démarrage futur, pas celui qui est déjà en cours. - name: Désarmer les mises à jour automatiques de Debian (Set-OPS les applique lui-même) ansible.builtin.systemd_service: name: "{{ item }}" state: stopped enabled: false masked: true loop: "{{ common_packages_unites_maj_auto }}" when: common_packages_desarmer_maj_auto | bool failed_when: false # une unite absente n'est pas une faute : elle est desarmee # EFFACER LA TRACE QUE LE DESARMEMENT LAISSE (mesure du 2026-08-30). # # Masquer le service pendant que son timer TOURNE lui fait perdre sa cible. systemd le # note, et le garde : # # apt-daily.timer: Unit to trigger vanished. # apt-daily.timer: Failed with result 'resources'. # # `state: stopped` n'efface pas un etat `failed` — seul `reset-failed` le fait. Sans lui, # CHAQUE machine porte deux unites en echec permanent. Constate sur les quinze de # Chezlepro : `systemctl list-units --state=failed` en rend deux partout. # # CE N'EST PAS COSMETIQUE. Une supervision qui compte les unites en echec compte ces # deux-la pour toujours — et le jour ou une VRAIE panne s'ajoute, elle se noie dans un # bruit qu'on a appris a ignorer. C'est le meme defaut que le journal de la frontiere # noye sous 982 000 entrees : ce qui ment le plus n'est pas ce qui se tait, c'est ce qui # crie sans raison. - name: Effacer l'etat d'echec laisse par le desarmement ansible.builtin.command: argv: ["systemctl", "reset-failed", "{{ item }}"] loop: "{{ common_packages_unites_maj_auto }}" register: common_packages_reset changed_when: false failed_when: false # rien a effacer n'est pas une faute when: common_packages_desarmer_maj_auto | bool - name: Mettre à jour le cache APT ansible.builtin.apt: update_cache: true cache_valid_time: 3600 lock_timeout: "{{ common_packages_lock_timeout }}" - name: Appliquer les mises à jour disponibles ansible.builtin.apt: upgrade: full lock_timeout: "{{ common_packages_lock_timeout }}" - name: Installer les paquets communs ansible.builtin.apt: name: "{{ common_packages_list }}" state: present lock_timeout: "{{ common_packages_lock_timeout }}" - name: Supprimer les dépendances devenues inutiles ansible.builtin.apt: autoremove: true lock_timeout: "{{ common_packages_lock_timeout }}"