module

Beryl

Constants

STEP_LINE_WIDTH = 117

Largeur cible en caractères pour aligner le compteur [NNNs] en fin de ligne sur toutes les sous-commandes (rescue, bootstrap, …). Le padding se fait par String#size pour éviter que printf %-Ns (octets UTF-8) fausse l'alignement des tirets cadratins.

VERSION = {{ (((read_file("/tmp/tmp.gEHJHE/src/src/beryl/../../shard.yml")) .lines .find(&.starts_with?("version:")) || "version: 0.0.0") .gsub(/^version:\s*/, "")) .chomp }}

Lue au compile-time depuis shard.yml via le macro read_file. Cf. note mémoire feedback_shard_version_macro.md (mémoire ALOLI).

Class methods

format_ssh_target(host : Beryl::Config::ResolvedHost) : String

Formate une cible SSH pour les logs de façon uniforme. Trois cas :

  • Pas de divergence entre fqdn et ssh_host : rails01.aloli.net

  • Provider hébergeur qui impose un nom différent (typiquement OVH ovh.service_name). On annonce le couple « FQDN logique côté provider » : rails01.aloli.net (= ns1234.ip-51-83-6.eu côté ovh)

  • Override ssh_host: explicite côté YAML — l'opérateur a posé une valeur (test local, VPN, alias DNS interne). Pas de mention de provider, qui serait sémantiquement faux pour provider: local ou un provider sans notion de nom hébergeur : clientvm.test (via 127.0.0.1)

Source
format_timestamp(t : Time) : String

Horodatage sensible à la locale, utilisé par les logs de toutes les sous-commandes. On détecte uniquement le français (LANG/LC_TIME qui commence par fr) et on retombe sur l'ISO 8601 sinon : deux formats suffisent pour l'usage de beryl, pas de dépendance à un moteur i18n.

  • fr20/04/2026 21h35m12
  • autre → 2026-04-20 21:35:12
Source
log_step(prefix : String, label : String, & : -> T) : T forall T

Affiche une ligne de log avec un compteur [NNNs] en fin de ligne, rafraîchi chaque seconde par un fiber pour montrer que le process est vivant pendant une opération longue. La ligne est tenue en place (retour chariot \r) jusqu'à ce que le bloc retourne, puis saute à la ligne suivante avec le temps final figé.

Sur exception, on affiche + le temps final avant de laisser l'exception remonter. Le fiber est toujours libéré (ensure).

Utilisé par toutes les sous-commandes pour unifier la progression visuelle :

  • beryl rescue : polling task OVH + attente SSH
  • beryl boot-hd : idem
  • beryl bootstrap : étapes 1-6 du flux mfsBSD-in-QEMU

Exemple : Beryl.log_step("beryl rescue", "OVH : tâche #12345 en doing") do # ... long polling ... end

Source
pad_to(line : String, width : Int32 = STEP_LINE_WIDTH) : String

Pade une ligne de log jusqu'à width caractères (par défaut STEP_LINE_WIDTH) pour aligner le compteur [NNNs] à droite. Utilise String#size (caractères) et non String#bytesize, sinon les tirets cadratins UTF-8 faussent l'alignement.

Source
rerun_hint(cmd : String, args : Array(String), extras : Array(String) = [] of String, replace_host : Tuple(String, String) | Nil = nil) : String

Construit la commande shell à afficher à la fin d'un --dry-run pour que l'utilisateur voie exactement quoi relancer (copy-paste friendly). Retire les flags --dry-run / -n des args originaux et concatène d'éventuels arguments additionnels (ex: --hostname pour scan, qui a pu être résolu interactivement pendant le dry-run).

Philippe 23 avril 2026 : option B — zéro automatisme, zéro clic enchaîné, l'utilisateur lit et relance lui-même.

Source
transport_mode
Source
transport_mode=(mode : Symbol) : Symbol
Source
use_overlay_transport?
Source

Nested types