module

Beryl::CLI::Reboot

Sous-commande beryl reboot <host> [--soft|--hard] (étape H3) : redémarre un host puis (optionnellement) déverrouille les pools chiffrés et relance les services applicatifs.

Deux modes :

--soft (défaut) : par la connexion de beryl (compte connect_user, rebond compris), shutdown -r now (FreeBSD) ou systemctl reboot (Linux), par sudo -n hors root. Sécurise (le serveur synchronise ses disques, ferme proprement les services). Échoue si SSH ou sudo refuse. --hard : power cycle via API hébergeur (équivalent bouton power physique). Marche TOUJOURS, ne dépend pas de l'état du système. Indispensable quand sshd ne répond plus (kernel panic, freeze) et qu'on n'a pas d'IPMI/KVM.

Après reboot, attend que la machine réponde avec un NOUVEL identifiant de démarrage (boot_id / kern.boottime, preuve d'un vrai redémarrage), puis (si pools chiffrés déclarés) enchaîne automatiquement avec un beryl unlock pour rouvrir les datasets et redémarrer les services.

Constants

BOOT_MARKER = "sh -c 'cat /proc/sys/kernel/random/boot_id 2>/dev/null || sysctl -n kern.boottime'"

Identifiant du démarrage en cours : boot_id (Linux), sinon kern.boottime (FreeBSD). Il change à chaque démarrage : c'est la preuve qu'un redémarrage a VRAIMENT eu lieu (un sshd qui répond ne prouve rien). Enveloppé dans sh -c : le shell de connexion peut être csh, qui lit mal les redirections.

DEFAULT_SSH_WAIT_TIMEOUT = 10.minutes
EXIT_API_ERROR = 7
EXIT_BAD_CREDS = 4
EXIT_BAD_PROVIDER = 5
EXIT_MISSING_CONFIG = 6
EXIT_OK = 0
EXIT_REBOOT_FAILED = 9
EXIT_SSH_FAILED = 2
EXIT_UNEXPECTED = 3
EXIT_UNLOCK_FAILED = 8
EXIT_USAGE = 1
REBOOT_GRACE_PERIOD = 30.seconds
SSH_POLL_INTERVAL = 15.seconds

Class methods

poll_status(before : String | Nil, after : String | Nil) : String

Ce que montre une tentative, pour l'affichage pendant l'attente.

Source
reboot_command(uname : String, root : Bool) : String

Commande qui lance le redémarrage en arrière-plan (la session SSH rend la main avant que le système ne s'arrête) : systemctl reboot sous Linux, shutdown -r now sur FreeBSD, par sudo -n hors root.

Source
rebooted?(before : String | Nil, after : String | Nil) : Bool

Redémarré : la machine répond, avec un identifiant de démarrage différent de celui relevé avant (ou, s'il était inconnu, n'importe lequel).

Source
run(config_root : String, args : Array(String)) : Int32
Source