Beryl::Providers::Dedibox
Inherits Beryl::ComputeProvider < Beryl::Provider < Reference < Object
Provider Dedibox / Online.net pour beryl. Les serveurs sont
identifiés par un entier (dedibox.server_id, type Int32)
et non un serviceName textuel (OVH) ni un UUID (Scaleway).
Les clés SSH IAM sont globales au compte et injectées automatiquement
par Dedibox dans tout passage en rescue — pas besoin de spécifier
dedibox.ssh_key_name comme chez OVH.
Spécificité du flow rescue Dedibox : l'API expose deux étapes
distinctes (prepare_rescue pose l'intention, reboot l'exécute),
là où OVH fait les deux en une seule prepare_rescue. Beryl
enchaîne les deux pour homogénéiser l'interface.
Le client Dedibox est injectable via le constructeur pour les
tests. En production, on laisse le défaut et client résout à
la demande via Credentials.dedibox_client.
Constructors
Instance methods
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.
Reboot depuis le disque (inverse de request_rescue). Même
signature de retour (task id).
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.
Vrai si l'état status correspond à un terminal de succès
("done", "completed", etc. selon les providers).
État d'une task ("init", "doing", "done", "ovhError"…).
Convention : si la task est en état terminal de succès,
task_done? est vrai.
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.
Détails d'aide supplémentaires à afficher pendant beryl init.
Typiquement la liste exhaustive des permissions/routes que beryl
va appeler, pour que l'opérateur puisse les cocher dans le
formulaire du panel. Retourne nil si pas de détails particuliers.
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.
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.
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.
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.
resource_id doit être la représentation String d'un entier
(ex: "186260"). ssh_key_ref est ignoré : Dedibox injecte
automatiquement toutes les clés IAM du compte.
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.