module

Beryl::CLI::FleetJob

Tâche de flotte pour beryl os-upgrade|upgrade <société|domaine> --apply : CANARI puis PARALLÈLE LIMITÉ, état sur disque lisible par --status.

Chaque serveur est traité par un processus ENFANT beryl <kind> <fqdn> --apply … (le chemin un-serveur, déjà éprouvé) : sa sortie va dans son propre journal (pas d'entrelacement), il écrit son état dans <fqdn>.json (variable BERYL_JOB_STATE). L'orchestrateur :

. CANARI : traite les serveurs UN PAR UN jusqu'au premier qui a réellement quelque chose à installer (un serveur déjà à jour ne valide rien) ; s'il échoue, le reste est ANNULÉ — un correctif qui casse le démarrage se voit sur un serveur, pas sur quinze ; . puis le reste en PARALLÈLE (--parallel N) : un serveur qui plante ne bloque aucun autre.

Dossier d'une tâche : $XDG_STATE_HOME/beryl/jobs/<kind>/<id>/ (job.json, <fqdn>.json, <fqdn>.log, orchestrateur.log). Rien de propre au Mac : la même tâche pourra tourner sur un bastion.

Constants

CANCELLED = "annulé"
DEFAULT_PARALLEL = 4

Serveurs traités à la fois quand ni --parallel=N ni le réglage parallel: de la configuration ne le disent.

ENV_STATE = "BERYL_JOB_STATE"
FAILED = "échec"
FINAL = {UPGRADED, UPTODATE, FAILED, CANCELLED}
PENDING = "en attente"
RUNNING = "en cours"
UPGRADED = "mis à jour"
UPTODATE = "à jour"

Instance methods

compose(job : Job, states : Array(HostState | Nil)) : Tuple(String, String)

Objet et corps du récapitulatif. Pur.

Source
create(kind : String, scope : String, fqdns : Array(String), child_args : Array(String), parallel : Int32, groups : Hash(String, String) = {} of String => String, account : String | Nil = nil, config_root : String | Nil = nil) : String

Crée la tâche (dossier + job.json + état « en attente » par serveur).

Source
detach(dir : String, child_cmd : Array(String)) : Int64

Relance l'orchestrateur en arrière-plan : nohup (survit à la fermeture du terminal) et, s'il existe (macOS), caffeinate -i (pas de veille tant que la tâche tourne). Sortie dans orchestrateur.log.

Source
find(kind : String, id : String | Nil) : String | Nil

Dossier de la tâche id, ou de la plus récente.

Source
jobs_root(kind : String) : String
Source
load(dir : String) : Job
Source
log_path(dir : String, fqdn : String) : String
Source
next_runnable(pending : Array(String), groups : Hash(String, String | Nil), busy : Set(String)) : String | Nil

Premier serveur en attente dont le groupe n'est pas occupé. Pur.

Source
notify=(value : Bool | Nil) : Nil
Source
notify?
Source
parallel_for(hosts : Array(Beryl::Config::ResolvedHost), flag : Int32 | Nil) : Int32

Serveurs à la fois : --parallel=N s'il est donné, sinon le PLUS PETIT réglage parallel: des serveurs de la portée (prudence quand elle mêle des groupes), sinon DEFAULT_PARALLEL. Pur côté config.

Source
parse_parallel(value : String) : Int32

Valeur de --parallel=… : N ≥ 1, 0 pour no/non (parallèle coupé, comme --no-parallel), -1 si illisible. Pur.

Source
read_state(path : String) : HostState | Nil
Source
report(state : String, detail : String, version : String | Nil = nil, touched : Bool = false) : Nil

Côté ENFANT : rapporte l'étape/le résultat si la variable est posée (no-op hors tâche). started_at est conservé d'un rapport à l'autre.

Source
run(dir : String, child_cmd : Array(String)) : Int32

child_cmd : commande de base de l'enfant (exécutable + options globales), le fqdn et les options d'os-upgrade sont ajoutés ici.

Source
run_host(dir : String, job : Job, fqdn : String, child_cmd : Array(String)) : HostState

Lance l'enfant d'UN serveur et renvoie son état final. Un enfant qui sort en erreur sans l'avoir rapporté (plantage) est noté en ÉCHEC avec la fin de son journal : rien ne se perd en silence.

Source
save(dir : String, job : Job) : Nil
Source
self_cmd(config_root : String) : Array(String)

Commande de base d'un processus enfant : CE binaire + options globales (racine de config, transport), pour que l'enfant voie la même config.

Source
state_path(dir : String, fqdn : String) : String
Source
status(kind : String, id : String | Nil) : Int32
Source
summary(states : Array(HostState | Nil)) : String
Source
write_state(path : String, st : HostState) : Nil
Source

Nested types