Some checks failed
verifier / verifier (push) Has been cancelled
serveur_artefacts (apt-cacher-ng) + client_artefacts, integration universelle qui s'eteint quand aucun hote ne porte le service et RETIRE la direction posee. Chez patient 0 : colocalise sur forge-01 -- la forge est la source, du code et des binaires. La preuve est le mode hors ligne : paquet en cache servi en 0 o/s, paquet absent refuse par un 503. Tant qu'internet repond, un apt update qui reussit ne dit pas d'ou vient l'octet. Trois lecons : apt fait heriter Acquire::https::Proxy de la valeur HTTP (d'ou 403 CONNECT denied sur les depots tiers, et smallstep injoignable) ; un service ne doit pas dependre de lui-meme pour se reparer (l'apt update du role passait par le cache hors ligne) ; et rediriger 2>/dev/null, c'est choisir de ne pas voir. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
66 lines
2.6 KiB
YAML
66 lines
2.6 KiB
YAML
---
|
|
# LE CACHE NE DOIT PAS DÉPENDRE DE LUI-MÊME POUR SE RÉPARER.
|
|
#
|
|
# La première version faisait `update_cache: true` à chaque passage. Sur l'hôte qui PORTE
|
|
# le cache, cet `apt update` passe par le cache lui-même — et en mode hors ligne, il est
|
|
# refusé. Le rôle qui devait remettre le service en ligne ne pouvait donc plus s'exécuter :
|
|
#
|
|
# « Failed to update apt cache after 5 retries » (mesuré le 2026-08-23, après
|
|
# l'épreuve hors ligne : il a fallu réparer la machine à la main)
|
|
#
|
|
# Un service dont la remise en route exige qu'il fonctionne déjà est un piège. On ne
|
|
# rafraîchit donc l'index qu'à la PREMIÈRE installation, quand aucun cache n'existe encore
|
|
# et qu'`apt` va forcément à l'amont.
|
|
- name: Le cache est-il déjà installé ?
|
|
ansible.builtin.stat:
|
|
path: /usr/sbin/apt-cacher-ng
|
|
register: serveur_artefacts_present
|
|
|
|
- name: Installer le cache d'artefacts
|
|
ansible.builtin.apt:
|
|
name: "{{ serveur_artefacts_paquets }}"
|
|
state: present
|
|
update_cache: "{{ not serveur_artefacts_present.stat.exists }}"
|
|
when: not ansible_check_mode
|
|
|
|
- name: Assurer le répertoire de cache
|
|
ansible.builtin.file:
|
|
path: "{{ serveur_artefacts_cache }}"
|
|
state: directory
|
|
owner: apt-cacher-ng
|
|
group: apt-cacher-ng
|
|
mode: "0755"
|
|
when: not ansible_check_mode
|
|
|
|
# apt-cacher-ng lit TOUS les `*.conf` de son répertoire, par ordre alphabétique, et le
|
|
# dernier lu gagne. Le préfixe `zzz-` place donc notre configuration après celle du
|
|
# paquet Debian et celle de debconf, sans avoir à les éditer — on ajoute, on ne remplace
|
|
# pas. Une valeur posée ici l'emporte, et `apt purge` rend la machine à son état d'origine.
|
|
- name: Déployer la configuration Set-OPS
|
|
ansible.builtin.template:
|
|
src: zzz-setops.conf.j2
|
|
dest: /etc/apt-cacher-ng/zzz-setops.conf
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
notify: Redémarrer le cache d'artefacts
|
|
|
|
- name: Activer et démarrer le cache d'artefacts
|
|
ansible.builtin.systemd:
|
|
name: "{{ serveur_artefacts_service }}"
|
|
enabled: true
|
|
state: started
|
|
when: not ansible_check_mode
|
|
|
|
- name: Appliquer les redémarrages avant de vérifier
|
|
ansible.builtin.meta: flush_handlers
|
|
|
|
# ÉCRIRE, PUIS RELIRE (D-68). Un service « active » qui n'écoute pas sur le port attendu
|
|
# est un vert sur un périmètre vide : les clients le découvriraient à leur premier
|
|
# `apt update`, c'est-à-dire au pire moment.
|
|
- name: Le cache écoute-t-il vraiment ?
|
|
ansible.builtin.wait_for:
|
|
host: "127.0.0.1"
|
|
port: "{{ serveur_artefacts_port }}"
|
|
timeout: 30
|
|
when: not ansible_check_mode
|