Chaque role proprietaire (AC, bases, annuaire, Nextcloud, rspamd/DKIM, courriel, forge, web) remet son etat au moment ou il le creerait neuf, depuis le dernier instantane anterieur a la naissance de la machine. La sauvegarde refuse de deposer tant qu'un etat d'avant attend. Outil de noeud setops-restaurer ; cibles sauvegarder-maintenant, restauration-etat, restauration-renoncer ; test_restauration. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
64 lines
2.6 KiB
YAML
64 lines
2.6 KiB
YAML
---
|
|
# L'ETAT D'UNE INCARNATION PRECEDENTE — voir roles/client_backup/templates/restaurer.sh.j2
|
|
#
|
|
# make restauration-etat [HOTE=...]
|
|
# ce qui attend dans le depot, et ce que chaque jeu est devenu (lecture seule) ;
|
|
# make sauvegarder-maintenant [HOTE=...]
|
|
# deposer TOUT DE SUITE, et attendre que ce soit fait. A faire juste avant `raser` :
|
|
# sinon la reconstruction remet l'etat de la derniere nuit, et perd la journee ;
|
|
# make restauration-renoncer HOTE=<hote> JEU=<jeu> CONFIRMER=true
|
|
# ECARTER un etat anterieur sans le remettre. La sauvegarde du noeud, qui refusait
|
|
# de deposer pour ne pas le chasser de la retention, reprend — et l'etat d'avant
|
|
# finira par sortir de la retention. C'est une decision, pas une reparation.
|
|
#
|
|
# La REMISE, elle, n'a pas de cible : elle est faite par le role proprietaire de l'etat,
|
|
# au deploiement, au moment ou il le creerait neuf.
|
|
- name: L'etat d'une incarnation precedente
|
|
hosts: client_backup
|
|
become: true
|
|
gather_facts: false
|
|
vars:
|
|
restauration_action: etat
|
|
restauration_jeu: ""
|
|
tasks:
|
|
- name: Refuser un renoncement sans jeu nomme
|
|
ansible.builtin.assert:
|
|
that:
|
|
- restauration_jeu | length > 0
|
|
fail_msg: "JEU=<jeu> requis (voir `make restauration-etat` pour les noms)."
|
|
when: restauration_action == 'renoncer'
|
|
|
|
- name: Lire ce qui attend, et ce qui a ete tranche
|
|
ansible.builtin.command:
|
|
argv: [/usr/local/sbin/setops-restaurer, etat]
|
|
register: restauration_lue
|
|
changed_when: false
|
|
failed_when: false
|
|
when: restauration_action == 'etat'
|
|
|
|
- name: Etat
|
|
ansible.builtin.debug:
|
|
msg: "{{ (restauration_lue.stdout_lines | default([])) + (restauration_lue.stderr_lines | default([])) }}"
|
|
when: restauration_action == 'etat'
|
|
|
|
# L'unite est `oneshot` : `systemctl start` rend la main quand le depot est fait, et
|
|
# echoue s'il a echoue — y compris quand la garde refuse (etat d'avant non remis).
|
|
- name: Ce noeud a-t-il quelque chose a deposer ?
|
|
ansible.builtin.stat:
|
|
path: /etc/systemd/system/setops-sauvegarde.service
|
|
register: restauration_unite
|
|
when: restauration_action == 'sauvegarder'
|
|
|
|
- name: Deposer maintenant
|
|
ansible.builtin.systemd:
|
|
name: setops-sauvegarde.service
|
|
state: started
|
|
when:
|
|
- restauration_action == 'sauvegarder'
|
|
- restauration_unite.stat.exists
|
|
|
|
- name: Ecarter l'etat anterieur de ce jeu
|
|
ansible.builtin.command:
|
|
argv: [/usr/local/sbin/setops-restaurer, acter, "{{ restauration_jeu }}", abandonne]
|
|
changed_when: true
|
|
when: restauration_action == 'renoncer'
|