Paillasse/portail/app/Services/OpenStack/NovaClient.php
Adam Belkacemi 67a754f733 ajoute la liaison Laravel-OpenStack et le modèle Heat du lab 08
Un gabarit Heat généré depuis chaque lab.yaml, une stack par session de
lab (création à l'admission, suppression à l'expiration via des jobs
Redis et un worker systemd dédié). Passage du compte de service à une
authentification par mot de passe : Heat refuse de créer un trust à
partir d'un jeton d'application credential (voir ADR 0002).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-08 10:14:24 +02:00

33 lines
1 KiB
PHP

<?php
namespace App\Services\OpenStack;
use Illuminate\Support\Facades\Http;
use RuntimeException;
/**
* Juste ce qu'il faut pour demander à Nova l'adresse de la console série
* d'une VM (étape 9). La liaison Laravel ↔ OpenStack complète (Heat, labs)
* est l'étape 10 : voir HeatClient.
*/
class NovaClient
{
public function __construct(private readonly KeystoneAuth $auth) {}
public function consoleSerielle(string $instanceId): string
{
$reponse = Http::withHeaders([
'X-Auth-Token' => $this->auth->jeton(),
'OpenStack-API-Version' => 'compute 2.99',
])
->post(config('openstack.nova_url')."/servers/{$instanceId}/remote-consoles", [
'remote_console' => ['protocol' => 'serial', 'type' => 'serial'],
]);
if ($reponse->failed()) {
throw new RuntimeException("Nova a refusé la demande de console série pour {$instanceId} : ".$reponse->body());
}
return $reponse->json('remote_console.url');
}
}