crystal-api-dedibox

Client Crystal pur pour l'API Dedibox / Online.net v1 (rescue, reboot, boot normal, ssh keys IAM). Utilisé par beryl pour le provisioning de serveurs Dedibox.

= dedibox-api :toc: left :source-highlighter: rouge :icons: font

Client Crystal pur (stdlib uniquement) pour l'API Dedibox / Online.net v1.

== Installation

[source,yaml]

dependencies: dedibox-api: github: aloli-crystal/crystal-api-dedibox branch: production

== Usage

[source,crystal]

require "dedibox-api"

client = DediboxApi::Client.new(token: ENV["DEDIBOX_TOKEN"])

Info serveur

info = client.servers.info(186260) puts info.public_ip # "195.154.254.221" puts info.boot_mode # "normal" ou "rescue"

Passage en rescue Debian 12 + reboot

images = client.servers.rescue_images(186260) creds = client.servers.prepare_rescue(186260, "debian-12_amd64") puts creds.login # "sd-186260" puts creds.password # password généré pour le rescue client.servers.reboot(186260, reason: "bootstrap FreeBSD")

Retour disque après bootstrap

client.servers.boot_normal(186260) client.servers.reboot(186260, reason: "boot-hd post install")

== Authentification

Token généré depuis la console : https://console.online.net/fr/api/access

Scope recommandé : all (restreignable après mise en production).

Stocké par beryl dans ~/.beryl/.env.yml sous <société>.dedibox.DEDIBOX_TOKEN.

== Endpoints couverts

[cols="1,2",options="header"] |=== |Méthode |But dans beryl

|servers.list | liste des IDs serveurs du compte |servers.info(id) | détail (offer, hostname, IPs, boot_mode…) |servers.update_hostname(id, name) | modifie le hostname console |servers.rescue_images(id) | images rescue dispo (Debian / Ubuntu) |servers.prepare_rescue(id, image) | sélectionne l'image rescue |servers.reboot(id) | reboot bare metal (applique rescue préparé) |servers.boot_normal(id) | retour boot disque (post-bootstrap) |ssh_keys.list | liste des clés SSH IAM du compte |ssh_keys.info(id) | détail d'une clé |ssh_keys.create(desc, key) | ajoute une clé publique |ssh_keys.delete(id) | retire une clé |user.info | info compte (id, login, email, nom, société) |===

== Limitations connues

  • Reverse DNS non modifiable via l'API. L'API Dedibox v1 n'expose pas d'endpoint public pour changer le reverse d'une IP. Les tentatives POST /server/{id}/reverse, PUT /reverse/{ip}, POST /reverse retournent toutes Unknown method. L'opération doit se faire via la console web (Serveur → IP failover / Reverse DNS) ou par ticket support.
  • Pas d'info disques / RAID au niveau API. À récupérer en SSH depuis le rescue (lsblk, smartctl) — c'est ce que fait beryl scan.
  • Pas de task async. Les POST retournent synchrones (true/false ou credentials) ; on polle côté SSH pour observer l'effet réel (reboot terminé, rescue joignable).

== Spécificités Dedibox vs OVH/Scaleway

  • IDs entiers (pas de serviceName textuel comme OVH)
  • Pas de task async : les POST retournent immédiatement, on polle côté SSH pour vérifier l'état
  • Clés SSH globales au compte (injectées automatiquement en rescue)
  • Pas d'endpoint reverse dédié : le reverse vit dans la struct Server#ips[].reverse (accessible via Server#public_reverse)

== Licence

MIT. Voir LICENSE.

Repository

crystal-api-dedibox

Owner
Statistic
  • 0
  • 0
  • 0
  • 1
  • 1
  • about 6 hours ago
  • April 24, 2026
License

MIT License

Links
Synced at

Fri, 24 Apr 2026 07:32:19 GMT

Languages