OvhApi::Endpoints::DedicatedServers
Endpoints /dedicated/server et /dedicated/installationTemplate.
Les serveurs sont identifiés par leur serviceName (ex.
ns1234.ip-1-2-3.eu). L'installation est déclenchée par un POST
qui renvoie un Task dont on suit l'avancement via
/dedicated/server/{serviceName}/task/{taskId}.
Constructors
Instance methods
Détail d'un bootId (type, kernel, description, supportsUEFI).
GET /dedicated/server/{serviceName}/boot/{bootId}.
Orchestration inverse de prepare_rescue : bascule le netboot
courant vers le profil harddisk et reboot. À utiliser après une
install réussie pour que le serveur redémarre sur l'OS qu'on vient
de poser sur le disque, et non en rescue.
Retourne la Task du reboot (function hardReboot côté OVH).
Liste les bootId disponibles pour un serveur.
GET /dedicated/server/{serviceName}/boot → tableau d'entiers.
Chaque bootId pointe vers un profil de netboot (harddisk,
rescue64-pro, ipxeCustomerScript, etc.), dont le détail est lu
via #boot(service_name, boot_id).
Détail d'un serveur (facturation, reverse, état, rack).
GET /dedicated/server/{serviceName}.
Détail d'un template d'installation.
GET /dedicated/installationTemplate/{templateName}.
Liste les templates d'installation disponibles (OS standards OVH : Debian, Ubuntu, Rocky, FreeBSD si proposé par la gamme).
GET /dedicated/installationTemplate → liste de slugs comme
"debian12_64", "ubuntu2404-server_64", "freebsd14.1-zfs_64".
Retourne des String (identifiants) ; pour le détail d'un
template, appeler installation_template/{id} via #call
directement.
Liste les IPs (v4 + v6) affectées au serveur, au format bloc
CIDR. Exemple : ["51.83.6.123/32", "2001:41d0:2:6e01::/64"].
GET /dedicated/server/{serviceName}/ips.
Orchestration complète « bascule en rescue + clé SSH + reboot ».
Enchaîne :
. boots puis boot(id) pour trouver le bootId rescue adapté.
Critère : bootType == "rescue" et supportsUEFI vaut "yes",
"both", "only" ou est absent. S'il y a plusieurs candidats,
on retient le premier (les gammes récentes n'en exposent qu'un).
. ssh_keys.get(ssh_key_name) pour résoudre le contenu de la
clé publique. La doc OVH parle d'un « nom » pour rescueSshKey
mais l'API attend en réalité la clé brute (observé en v0.2.1
sur un Kimsufi KS-B : {"message":"SSH key is not valid"} en
retour quand on passait le nom).
. set_boot(service_name, rescue_id, rescue_ssh_key: <contenu>)
pour armer le netboot rescue et déclarer la clé à injecter en
une seule requête PUT /dedicated/server/{serviceName}.
. reboot(service_name) pour appliquer.
ssh_key_name doit déjà exister dans /me/sshKey (à créer via
client.ssh_keys.create si besoin).
Retourne la Task du reboot ; à poller avec #task.
Déclenche un redémarrage matériel du serveur.
POST /dedicated/server/{serviceName}/reboot → retourne une
Task (function "hardReboot" côté OVH). Le reboot applique le
netboot courant ; configurer set_boot (avec rescue_ssh_key
si nécessaire) avant d'appeler cette méthode.
Déclenche une réinstallation du serveur.
Utilise l'endpoint moderne POST /dedicated/server/{serviceName}/reinstall
(schéma d'API 2024+). Les paramètres OVH récents :
operatingSystem: slug du template (obligatoire).customizations: bloc optionnel (hostname, sshKey, postInstallScript…).storage: partitionnement (laisse OVH décider si nil).
Retourne un Task dont l'id sert à interroger l'avancement.
Retourne le serviceId (long) d'un serveur dédié à partir de
son serviceName (ex: ns3156789.ip-51-83-6.eu). Passe par
GET /dedicated/server/{serviceName}/serviceInfos qui est la
source canonique côté OVH pour cette correspondance.
Change le netboot courant du serveur et configure optionnellement les options rescue (clé SSH, email de notification).
PUT /dedicated/server/{serviceName} avec body JSON contenant
bootId et, si fournis, rescueSshKey et/ou rescueMail.
OVH répond avec un corps vide en cas de succès.
rescue_ssh_key est le nom d'une clé SSH déclarée dans
/me/sshKey (voir client.ssh_keys.list). Elle sera injectée
dans /root/.ssh/authorized_keys au démarrage du rescue.
Détail d'une tâche.
GET /dedicated/server/{serviceName}/task/{taskId}.
Liste les identifiants de tâche associés à un serveur.
GET /dedicated/server/{serviceName}/task.
Un filtre function (ex. "reinstallServer") et/ou status
("todo", "doing", "done", "ovhError", "customerError",
"cancelled") peuvent être passés en query.
Modifie le displayName d'un serveur dédié (nom personnalisé
visible dans le panel OVH). Le name technique
nsXXXXX.ip-A-B-C.tld n'est pas modifiable.
Côté API, le displayName ne vit PAS sur /dedicated/server/{X}
(OVH a retiré ce champ : PUT renvoie 400 « Some properties does
not exist: displayName »). Il vit sur /services/{serviceId}
(API transverse à tous les services OVH, schéma
services.update.Service). On fait donc un flux à deux étapes :
- GET /dedicated/server/{serviceName}/serviceInfos → serviceId (long)
- PUT /services/{serviceId} body: {displayName: "..."}
Découvert terrain 23 avril 2026 sur loulou : HTTP 400 : "Some properties does not exist: displayName"
Polle task(...) jusqu'à un état terminal (done? vrai). Retourne
la Task finale ; lève OvhApi::TaskTimeout si timeout est
dépassé avant que l'état ne soit terminal.
Utilisé après reinstall, prepare_rescue, boot_from_disk,
reboot pour se passer de la boucle loop do … sleep côté
appelant. Une form do |task| … end est fournie pour tracer
l'avancement à chaque tour (utile pour logger task.status /
task.last_update).
task = client.dedicated_servers.reinstall(...)
final = client.dedicated_servers.wait_for_task(
service_name: "ns1.ip-1-2-3.eu",
task_id: task.id,
) { |t| Log.info { "Task #{t.id} : #{t.status}" } }
raise "échec install" if final.failed?
Polle task(...) jusqu'à un état terminal (done? vrai). Retourne
la Task finale ; lève OvhApi::TaskTimeout si timeout est
dépassé avant que l'état ne soit terminal.
Utilisé après reinstall, prepare_rescue, boot_from_disk,
reboot pour se passer de la boucle loop do … sleep côté
appelant. Une form do |task| … end est fournie pour tracer
l'avancement à chaque tour (utile pour logger task.status /
task.last_update).
task = client.dedicated_servers.reinstall(...)
final = client.dedicated_servers.wait_for_task(
service_name: "ns1.ip-1-2-3.eu",
task_id: task.id,
) { |t| Log.info { "Task #{t.id} : #{t.status}" } }
raise "échec install" if final.failed?