Set-OPS-Public/playbooks/maintenance/genome_etat.yml

118 lines
4.8 KiB
YAML
Raw Permalink Normal View History

---
# CE QUE LA FORGE DU SITE PORTE, FACE A CE QUE LE POSTE PORTE.
#
# La forge du SITE fait autorite pour le genome (D-81). Toute autre copie est un miroir.
# Encore faut-il que cette autorite soit A JOUR — et la derive ne se voit pas toute seule.
#
# Mesure du 2026-08-26 : la forge etait restee quatre commits derriere le poste sans que
# rien ne le signale. Le runner clonait donc un moteur perime, dont le correctif qui
# desarme le pare-feu Proxmox. Un ecosysteme qui se reproduit depuis une forge en retard
# reproduit ses defauts.
#
# Cette cible ne corrige rien : elle REGARDE. `make genome-pousser` corrige.
#
# make genome-etat
- name: Ce que la forge du site porte, face au poste
hosts: serveur_ops_site
gather_facts: false
vars:
genome_racine: "{{ serveur_ops_racine | default('/opt/setops') }}"
genome_freres: "{{ playbook_dir | dirname | dirname | dirname }}"
genome_moteur: "{{ (serveur_ops_depots | selectattr('role', 'eq', 'moteur') | first).dest }}"
tasks:
- name: Voir lesquels de ces dépôts existent sur le contrôleur
ansible.builtin.stat:
path: "{{ genome_freres }}/{{ item.dest }}/.git"
delegate_to: localhost
become: false
loop: "{{ serveur_ops_depots | default([]) }}"
loop_control:
label: "{{ item.dest }}"
register: genome_locaux
- name: Retenir ceux qu'on peut comparer
ansible.builtin.set_fact:
genome_compares: >-
{{ genome_locaux.results | selectattr('stat.exists')
| map(attribute='item') | list }}
- name: Ce que le poste porte
ansible.builtin.command:
argv:
- python3
- "{{ genome_freres }}/{{ genome_moteur }}/scripts/genome_colis.py"
- etat
- "{{ genome_freres }}/{{ item.dest }}"
- --branche
- "{{ item.branche | default('main') }}"
delegate_to: localhost
become: false
loop: "{{ genome_compares }}"
loop_control:
label: "{{ item.dest }}"
register: genome_ici
changed_when: false
- name: Ce que la forge porte
ansible.builtin.uri:
url: >-
https://forge.{{ domaine_interne }}/api/v1/repos/{{ serveur_ops_forge_organisation
| default('genome') }}/{{ item.depot }}/branches/{{ item.branche | default('main') }}
validate_certs: false
status_code: [200, 404]
loop: "{{ genome_compares }}"
loop_control:
label: "{{ item.depot }}"
register: genome_la_bas
# LE PREMIER CONTACT AVEC LA FORGE RATE PARFOIS (mesure du 2026-08-26 : une fois sur
# six, poignee TLS expiree, puis cinq reponses de suite). Ce n'est pas le chemin —
# il est prouve — c'est l'acceptation TLS apres un temps d'inactivite. On reessaie
# plutot que de rendre un verdict sur un alea.
retries: 4
delay: 3
until: genome_la_bas is succeeded
changed_when: false
- name: L'état, dépôt par dépôt
ansible.builtin.debug:
msg: >-
{{ item.depot }} :
poste {{ (genome_ici.results[idx].stdout | from_json).courte }}
{{ '=' if genome_la_bas.results[idx].status == 200
and genome_la_bas.results[idx].json.commit.id
== (genome_ici.results[idx].stdout | from_json).tete
else '≠' }}
forge {{ genome_la_bas.results[idx].json.commit.id[:7]
if genome_la_bas.results[idx].status == 200 else '(absente)' }}
{{ '— copie locale NON PROPRE, des commits ne sont pas faits'
if not (genome_ici.results[idx].stdout | from_json).propre else '' }}
loop: "{{ genome_compares }}"
loop_control:
label: "{{ item.depot }}"
index_var: idx
# ON REFUSE PLUTOT QUE DE SIGNALER. Un ecart connu et tolere redevient un ecart oublie ;
# et la commande qui le corrige tient en trois mots.
- name: La forge fait-elle autorité sur une copie à jour ?
ansible.builtin.assert:
that:
- genome_la_bas.results[idx].status == 200
- genome_la_bas.results[idx].json.commit.id
== (genome_ici.results[idx].stdout | from_json).tete
fail_msg: >-
{{ item.depot }} : la forge du site porte
{{ genome_la_bas.results[idx].json.commit.id[:7]
if genome_la_bas.results[idx].status == 200 else '(rien — dépôt absent)' }},
le poste porte {{ (genome_ici.results[idx].stdout | from_json).courte }}.
La forge du site FAIT AUTORITÉ (D-81) : tant qu'elle est en retard, tout
écosystème qui s'y reproduit reproduit un moteur périmé.
Corriger avec `make genome-pousser`.
success_msg: "{{ item.depot }} : la forge est à jour."
loop: "{{ genome_compares }}"
loop_control:
label: "{{ item.depot }}"
index_var: idx