Add managed registry provisioning, pruning, and readiness tracking
This commit is contained in:
@@ -7,9 +7,14 @@ use App\Enums\DeployPolicy;
|
||||
use App\Enums\EnvironmentAttachmentRole;
|
||||
use App\Enums\SchedulerMode;
|
||||
use App\Models\Environment;
|
||||
use App\Services\Registries\RegistryResolver;
|
||||
|
||||
class PlanEnvironmentDeployment
|
||||
{
|
||||
public function __construct(
|
||||
private readonly RegistryResolver $registryResolver,
|
||||
) {}
|
||||
|
||||
public function execute(Environment $environment): EnvironmentDeploymentPlan
|
||||
{
|
||||
$environment->loadMissing([
|
||||
@@ -40,9 +45,9 @@ class PlanEnvironmentDeployment
|
||||
return new EnvironmentDeploymentPlan(
|
||||
services: $deployableServices->all(),
|
||||
dependencies: $dependencies->all(),
|
||||
requiresRegistry: $targetServerCount > 1 && $environment->application->organisation->registries()->doesntExist(),
|
||||
requiresRegistry: $targetServerCount > 1 && ! $this->registryResolver->buildRegistryFor($environment->application->organisation),
|
||||
warnings: $this->warnings($environment),
|
||||
blockers: $this->blockers($environment),
|
||||
blockers: $this->blockers($environment, $targetServerCount),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -74,18 +79,28 @@ class PlanEnvironmentDeployment
|
||||
/**
|
||||
* @return array<int, string>
|
||||
*/
|
||||
private function blockers(Environment $environment): array
|
||||
private function blockers(Environment $environment, int $targetServerCount): array
|
||||
{
|
||||
$blockers = [];
|
||||
|
||||
if ($targetServerCount > 1 && ! $this->registryResolver->buildRegistryFor($environment->application->organisation)) {
|
||||
$blocker = $this->registryResolver->managedRegistryBlockerFor($environment->application->organisation);
|
||||
|
||||
if ($blocker !== null) {
|
||||
$blockers[] = $blocker;
|
||||
}
|
||||
}
|
||||
|
||||
if (! $environment->scheduler_enabled || $environment->scheduler_mode !== SchedulerMode::SINGLE) {
|
||||
return [];
|
||||
return $blockers;
|
||||
}
|
||||
|
||||
$target = $environment->services->firstWhere('id', $environment->scheduler_target_service_id);
|
||||
|
||||
if ($target && $target->desired_replicas > 1 && in_array('scheduler', $target->process_roles ?? [], true)) {
|
||||
return ['Scheduler mode single requires the scheduler target service to run exactly one replica.'];
|
||||
$blockers[] = 'Scheduler mode single requires the scheduler target service to run exactly one replica.';
|
||||
}
|
||||
|
||||
return [];
|
||||
return $blockers;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user