99 lines
4.9 KiB
YAML
99 lines
4.9 KiB
YAML
|
|
---
|
||
|
|
# L'ETAT D'UNE INCARNATION PRECEDENTE ATTEND-IL CE JEU ?
|
||
|
|
#
|
||
|
|
# Inclus par le role PROPRIETAIRE de l'etat, au moment precis ou il le creerait neuf :
|
||
|
|
# l'AC avant `step ca init`, les bases juste creees, l'annuaire une fois son schema pose...
|
||
|
|
# C'est lui qui sait quand son etat est « vierge » ; ce fichier sait ou est le depot.
|
||
|
|
#
|
||
|
|
# entree : client_backup_restaurer_jeu — groupe du catalogue (ex. serveur_step_ca)
|
||
|
|
# client_backup_restaurer_vierge — le role n'a encore RIEN de cet etat
|
||
|
|
# sortie : client_backup_restauration — {jeu, etat, instantane, chemins}
|
||
|
|
#
|
||
|
|
# etat : `a_restaurer` (au role de le remettre, puis d'inclure `acter.yml`), `acte`
|
||
|
|
# (deja tranche a une passe precedente), `en_place` (un etat existe : on ne l'ecrase
|
||
|
|
# jamais d'office), `neuf` (rien d'anterieur), `sans_objet`, `simulation`.
|
||
|
|
- name: Restauration — le jeu et ce qu'il emporte
|
||
|
|
ansible.builtin.set_fact:
|
||
|
|
client_backup_restauration:
|
||
|
|
jeu: "{{ client_backup_catalogue[client_backup_restaurer_jeu].nom }}"
|
||
|
|
chemins: "{{ client_backup_catalogue[client_backup_restaurer_jeu].chemins }}"
|
||
|
|
etat: >-
|
||
|
|
{{ 'simulation' if ansible_check_mode
|
||
|
|
else ('sans_objet' if ('client_backup' not in group_names)
|
||
|
|
else ('desactive' if not (client_backup_restauration_active | bool)
|
||
|
|
else 'a_decider')) }}
|
||
|
|
instantane: ""
|
||
|
|
|
||
|
|
- name: Restauration — trancher pour ce jeu
|
||
|
|
when: client_backup_restauration.etat != 'sans_objet' and client_backup_restauration.etat != 'simulation'
|
||
|
|
block:
|
||
|
|
- name: Restauration — ce jeu a-t-il deja ete tranche ?
|
||
|
|
ansible.builtin.slurp:
|
||
|
|
src: "{{ client_backup_restauration_marques }}/{{ client_backup_restauration.jeu }}"
|
||
|
|
register: client_backup_marque_lue
|
||
|
|
failed_when: false
|
||
|
|
|
||
|
|
- name: Restauration — deja tranche a une passe precedente
|
||
|
|
ansible.builtin.set_fact:
|
||
|
|
client_backup_restauration: >-
|
||
|
|
{{ client_backup_restauration | combine({'etat': 'acte',
|
||
|
|
'instantane': ((client_backup_marque_lue.content | b64decode).splitlines()
|
||
|
|
| select('match', '^instantane=') | first
|
||
|
|
| default('instantane=')).split('=', 1)[1]}) }}
|
||
|
|
when: client_backup_marque_lue.content is defined
|
||
|
|
|
||
|
|
- name: "Restauration — desactivee, ou un etat existe deja, l'acter tel quel"
|
||
|
|
ansible.builtin.include_tasks: acter.yml
|
||
|
|
vars:
|
||
|
|
client_backup_acter_etat: "{{ 'desactive' if client_backup_restauration.etat == 'desactive' else 'en_place' }}"
|
||
|
|
when:
|
||
|
|
- client_backup_marque_lue.content is not defined
|
||
|
|
- client_backup_restauration.etat == 'desactive' or not (client_backup_restaurer_vierge | bool)
|
||
|
|
|
||
|
|
# LA CONDITION D'UN BLOC SE REEVALUE A CHAQUE TACHE. Ecrite sur `etat`, elle se
|
||
|
|
# fermerait des que le choix le change — et « rien d'anterieur » ne serait jamais acte.
|
||
|
|
# On la fige donc avant d'entrer.
|
||
|
|
- name: Restauration — faut-il interroger le depot ?
|
||
|
|
ansible.builtin.set_fact:
|
||
|
|
client_backup_interroger: >-
|
||
|
|
{{ client_backup_marque_lue.content is not defined
|
||
|
|
and client_backup_restauration.etat == 'a_decider'
|
||
|
|
and (client_backup_restaurer_vierge | bool) }}
|
||
|
|
|
||
|
|
- name: Restauration — interroger le depot
|
||
|
|
when: client_backup_interroger | bool
|
||
|
|
block:
|
||
|
|
- name: Restauration — acces au depot (le role client_backup n'a peut-etre pas encore tourne)
|
||
|
|
ansible.builtin.include_tasks: acces.yml
|
||
|
|
|
||
|
|
# Code 2 = depot ILLISIBLE : on echoue. Conclure « rien a restaurer » faute de
|
||
|
|
# joindre le depot ferait naitre neuf ce qui attend chez l'hebergeur.
|
||
|
|
- name: Restauration — l'instantane de l'incarnation precedente
|
||
|
|
ansible.builtin.command:
|
||
|
|
argv: >-
|
||
|
|
{{ ['/usr/local/sbin/setops-restaurer', 'choisir']
|
||
|
|
+ (['--instantane', client_backup_restauration_instantane]
|
||
|
|
if client_backup_restauration_instantane | length > 0 else []) }}
|
||
|
|
register: client_backup_choix
|
||
|
|
changed_when: false
|
||
|
|
|
||
|
|
- name: Restauration — retenir le choix
|
||
|
|
ansible.builtin.set_fact:
|
||
|
|
client_backup_restauration: >-
|
||
|
|
{{ client_backup_restauration | combine({
|
||
|
|
'etat': ('a_restaurer' if (client_backup_choix.stdout | from_json).instantane else 'neuf'),
|
||
|
|
'instantane': (client_backup_choix.stdout | from_json).instantane}) }}
|
||
|
|
|
||
|
|
- name: "Restauration — rien d'anterieur, naissance"
|
||
|
|
ansible.builtin.include_tasks: acter.yml
|
||
|
|
vars:
|
||
|
|
client_backup_acter_etat: neuf
|
||
|
|
when: client_backup_restauration.etat == 'neuf'
|
||
|
|
|
||
|
|
- name: Restauration — verdict
|
||
|
|
ansible.builtin.debug:
|
||
|
|
msg: >-
|
||
|
|
{{ client_backup_restauration.jeu }} : {{ client_backup_restauration.etat }}{{
|
||
|
|
(' — instantane ' + client_backup_restauration.instantane)
|
||
|
|
if client_backup_restauration.instantane | length > 0 else '' }}
|