--- - name: Exiger un hôte de source d'artefacts quand l'intégration est active ansible.builtin.assert: that: - client_artefacts_hote | length > 0 fail_msg: >- client_artefacts est actif mais aucun hôte ne porte `serveur_artefacts`. Déclarer le service au plan, ou forcer client_artefacts_actif=false. when: client_artefacts_actif | bool - name: Diriger apt vers la source de l'écosystème ansible.builtin.copy: dest: "{{ client_artefacts_fichier }}" content: | // GÉNÉRÉ par Set-OPS (rôle client_artefacts). NE PAS éditer à la main. // Les paquets viennent de l'écosystème, pas de six serveurs étrangers. Acquire::http::Proxy "http://{{ client_artefacts_hote }}.{{ domaine_interne }}:{{ client_artefacts_port }}"; {% if client_artefacts_https | bool %} Acquire::https::Proxy "http://{{ client_artefacts_hote }}.{{ domaine_interne }}:{{ client_artefacts_port }}"; {% else %} // « DIRECT » EST OBLIGATOIRE, PAS DECORATIF (mesure du 2026-08-23). // // apt fait HERITER `Acquire::https::Proxy` de la valeur HTTP quand elle n'est pas // definie. Poser le seul proxy HTTP envoyait donc AUSSI les depots tiers en HTTPS // dans le cache, qui refuse les tunnels — a juste titre : // « Invalid response from proxy: HTTP/1.0 403 CONNECT denied » // et packages.smallstep.com devenait injoignable pour toute la flotte. Acquire::https::Proxy "DIRECT"; {% endif %} owner: root group: root mode: "0644" when: client_artefacts_actif | bool # L'écosystème qui RETIRE sa source d'artefacts doit voir ses hôtes revenir à l'amont, # sans quoi ils resteraient braqués sur une machine disparue et n'installeraient plus # rien. Une intégration qui ne sait pas se retirer est un piège différé. - name: Retirer la direction quand l'écosystème n'a pas de source ansible.builtin.file: path: "{{ client_artefacts_fichier }}" state: absent when: not (client_artefacts_actif | bool)