module

Beryl::CLI::ScalewayReinstall

Sous-commande beryl scaleway-reinstall <host> : force un nouvel install Scaleway Elastic Metal avec la liste à jour des clés SSH du projet.

À quoi ça sert : Scaleway injecte dans le rescue UNIQUEMENT les clés posées lors de l'install initial du serveur (champ install.ssh_key_ids). Une clé ajoutée au projet Scaleway après création du serveur n'est PAS propagée au rescue — ni par reboot, ni par un autre appel API. Le seul moyen officiel de resynchroniser est de refaire un install, ce qui est destructif pour l'OS.

Source : https://www.scaleway.com/en/docs/bare-metal/elastic-metal/how-to/use-rescue-mode/

Quand l'utiliser : en amont du flow beryl, sur un serveur Elastic Metal dont l'OS n'est pas précieux (serveur neuf, serveur de test, serveur qu'on va réinstaller sous FreeBSD de toute façon via beryl bootstrap).

Ce qui se passe :

  1. Récupère le serveur via l'API (get ou find_any_zone).
  2. Liste toutes les clés SSH du projet courant.
  3. Affiche le plan (OS, hostname, clés injectées) et demande confirmation.
  4. Appelle POST /servers/{id}/install avec la liste des clés du projet.
  5. Bascule immédiatement en rescue pour que le flow beryl puisse reprendre (le bootstrap FreeBSD réécrit les disques).

Constants

DEFAULT_OS_PREFIX = "ubuntu_24"

OS par défaut pour la réinstall si l'install.os_id précédent n'est pas connu. Ubuntu 24.04 est une image stable supportée sur toutes les offres Elastic Metal Scaleway à fin 2026, et dont le rescue image (Ubuntu-based) est compatible avec le flow beryl.

EXIT_ABORTED = 2
EXIT_API_ERROR = 3
EXIT_BAD_CREDS = 5
EXIT_MISSING_CONFIG = 4
EXIT_OK = 0
EXIT_USAGE = 1

Class methods

find_os_by_prefix(oses, prefix)

Cherche un OS dont le nom commence par prefix (case-insensitive). Retourne le premier match dans l'ordre de l'API Scaleway (qui trie généralement par ancienneté croissante — donc « Ubuntu » retourne souvent une LTS ancienne avant une récente ; utiliser un nom plus précis si besoin).

Source
os_label(os) : String

Label lisible pour un OS : version si parsée par le shard, sinon un champ probable du JSON brut (version_id, label, codename), sinon l'id tronqué. Permet de distinguer plusieurs entrées d'un même name sans ambiguïté.

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

Nested types