class

Beryl::Providers::Scaleway

Inherits Beryl::ComputeProvider < Beryl::Provider < Reference < Object

Provider Scaleway Elastic Metal pour beryl. Les clés SSH sont gérées au niveau IAM (pas par projet) et identifiées par un UUID + un nom humain — on expose les noms dans list_ssh_keys mais on écrit les UUIDs dans le YAML (c'est ce que consomme l'API create).

Le client Scaleway est injectable via le constructeur pour les tests. En production, on laisse le défaut et client résout à la demande via Credentials.scaleway_client.

Constructors

new(injected_client : ScalewayApi::Client | Nil = nil)
Source

Instance methods

available?

Vrai si les credentials nécessaires sont disponibles (variables d'env, fichiers de config, agent local…). Ne lève jamais : un provider « indisponible » est simplement sauté par beryl init.

Source
boot_from_disk(resource_id : String) : String

Reboot depuis le disque (inverse de request_rescue). Même signature de retour (task id).

Source
capabilities

Capabilities que ce provider expose (ADR-014). Valeurs connues :

:dns — gestion d'une zone DNS (records, reverse, refresh) :compute — hébergement de serveurs (rescue, boot_from_disk…) :object_storage — stockage objet compatible S3 (futur) :cdn — CDN (futur) :cert — certificats SSL (futur)

Un provider peut en avoir plusieurs (OVH = [:dns, :compute]). Beryl vérifie la capability avant d'appeler une méthode correspondante — si un dns_provider: hetzner est déclaré alors qu'Hetzner n'a pas :dns, une erreur explicite est levée à la résolution.

Par défaut vide : chaque sous-classe doit la définir.

Source
compute_task_done?(status : String) : Bool

Vrai si l'état status correspond à un terminal de succès ("done", "completed", etc. selon les providers).

Source
compute_task_status(task_id : String) : String

État d'une task ("init", "doing", "done", "ovhError"…). Convention : si la task est en état terminal de succès, task_done? est vrai.

Source
credentials_env_vars

Variables d'environnement nécessaires pour que available? soit vrai et que les appels API marchent. Listées dans l'ordre où beryl init les demandera si le provider n'est pas configuré. Utilisé pour la configuration interactive + aide.

Source
credentials_help_details

Détails affichés pendant beryl init : liste textuelle des permissions IAM à cocher dans la console Scaleway.

Source
credentials_help_url

URL d'aide côté panel hébergeur où l'utilisateur génère les credentials (token d'API, secret key, etc.). Affichée avant le prompt interactif pour que l'opérateur ouvre sa page dans un autre onglet.

Source
display_name

Nom humain pour affichage (ex: "OVHcloud", "Scaleway Elastic Metal").

Source
list_ssh_keys

Liste les clés SSH enregistrées côté panel de l'hébergeur, avec leur contenu public. beryl init utilise le contenu pour matcher avec les ~/.ssh/*.pub locaux — si une clé distante correspond à un fichier local (type + base64 identiques, le commentaire peut différer), on auto-détecte le mapping sans prompt.

Lève si les credentials sont présents mais l'API refuse.

Source
name

Identifiant court et stable du provider (ex: "ovh", "scaleway"). Utilisé comme clé dans le registre, comme valeur de provider: dans le YAML d'un host, et comme nom dans les logs.

Source
owns?(host_name : String) : Bool

Vrai si ce provider héberge le serveur identifié par host_name. Conservé pour compat (ex: diagnostics). La résolution d'hôte n'en a plus besoin : elle passe par suffix-match et recherche dans les fichiers (voir Beryl::Config::Root#resolve). Cette méthode peut être utilisée par les sous-commandes qui veulent confirmer qu'un serveur existe bien chez le provider.

Source
request_rescue(resource_id : String, ssh_key_ref : String) : String

Demande un reboot en rescue mode côté panel. Le provider pose la clé SSH qu'il veut que beryl utilise pour se connecter. Retourne un identifiant de task (numérique OVH, ou UUID Scaleway) qu'on peut interroger avec compute_task_status.

Source
required_permissions

Permissions IAM Scaleway requises par beryl. Contrairement à OVH, Scaleway ne permet pas de générer une API key depuis zéro via l'API (chicken-and-egg : il faut déjà une key pour en créer une). L'utilisateur doit donc créer la key manuellement dans la console, en cochant les permission_set_names ci-dessous.

Référence : https://www.scaleway.com/en/developers/api/iam/#permission-sets

Source
ssh_key_yaml_fragment(key_id : String) : Hash(String, String | Array(String))

Rend le champ YAML à écrire dans le groupe zone pour que beryl rescue/bootstrap sache quelle clé utiliser. Typiquement : OVH → { "ssh_key_name" => "<label>" } Scaleway → { "ssh_key_ids" => ["<uuid>"] } Le shape dépend du provider ; le bloc est injecté tel quel sous <provider>: dans le YAML. Utilisé par beryl init pour générer un groups/<zone>.yml exploitable.

Source