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>
This commit is contained in:
Adam Belkacemi 2026-10-08 10:14:24 +02:00
parent 8742bde807
commit 67a754f733
34 changed files with 1095 additions and 91 deletions

View file

@ -0,0 +1,31 @@
<?php
namespace App\Console\Commands;
use App\Jobs\SupprimerStackLab;
use App\Models\LabSession;
use Illuminate\Console\Command;
/**
* Expiration automatique des sessions de lab (étape 10). Planifiée dans
* routes/console.php, lancée chaque minute par le cron système (Ansible).
*/
class ExpirerSessionsLab extends Command
{
protected $signature = 'labs:expirer-sessions';
protected $description = "Dispatche SupprimerStackLab pour les sessions de lab dont l'expiration est passée";
public function handle(): void
{
$sessions = LabSession::whereIn('etat', [LabSession::ADMIS, LabSession::ACTIF])
->where('expire_a', '<', now())
->get();
foreach ($sessions as $session) {
SupprimerStackLab::dispatch($session);
}
$this->info("{$sessions->count()} session(s) de lab expirée(s), suppression lancée.");
}
}