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>
31 lines
908 B
PHP
31 lines
908 B
PHP
<?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.");
|
|
}
|
|
}
|