mirror of
https://github.com/coollabsio/coolify.git
synced 2026-08-28 10:05:25 -05:00
Split V5 dashboard behavior into domain controllers and policies, add agent token rotation/revocation, status reconciliation jobs, ingress firewall syncing, and canvas connection APIs. Add migrations for V5 status tracking, server capabilities, resource connection aliases, and revoked agent tokens.
91 lines
4.1 KiB
PHP
91 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace App\Support\V5;
|
|
|
|
use App\Models\V5\Cluster as V5Cluster;
|
|
use App\Models\V5\Server as V5Server;
|
|
|
|
/**
|
|
* Single source of truth for the cluster payload served by the Clusters
|
|
* Inertia props and broadcast by V5ClusterUpdated — the two must stay
|
|
* identical for websocket vs. initial-load parity.
|
|
*/
|
|
class ClusterSerializer
|
|
{
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function serialize(V5Cluster $cluster): array
|
|
{
|
|
return [
|
|
'id' => $cluster->uuid,
|
|
'name' => $cluster->name,
|
|
'description' => $cluster->description,
|
|
'wireguardInterface' => $cluster->wireguard_interface,
|
|
'wireguardManagementPool' => $cluster->wireguard_management_pool,
|
|
'wireguardListenPort' => $cluster->wireguard_listen_port,
|
|
'containerNetworkPool' => $cluster->container_network_pool,
|
|
'containerNetworkPrefix' => $cluster->container_network_prefix,
|
|
'namespaces' => $cluster->namespaces ?? V5Cluster::DEFAULT_NAMESPACES,
|
|
'defaultDenyContainers' => $cluster->default_deny_containers,
|
|
'cooldVersion' => $cluster->coold_version,
|
|
'corrosionVersion' => $cluster->corrosion_version,
|
|
'corrosionGossipPort' => $cluster->corrosion_gossip_port,
|
|
'corrosionApiPort' => $cluster->corrosion_api_port,
|
|
'builderEnabled' => $cluster->builder_enabled,
|
|
'builderCapacity' => $cluster->builder_capacity,
|
|
'builderCpuQuota' => $cluster->builder_cpu_quota,
|
|
'builderMemoryMax' => $cluster->builder_memory_max,
|
|
'builderTimeoutSecs' => $cluster->builder_timeout_secs,
|
|
'lastCliAction' => $cluster->last_cli_action,
|
|
'lastCliStatus' => $cluster->last_cli_status,
|
|
'lastCliSummary' => $cluster->last_cli_summary,
|
|
'lastCliRanAt' => $cluster->last_cli_ran_at?->toJSON(),
|
|
'serversCount' => $cluster->servers_count ?? $cluster->servers->count(),
|
|
'servers' => $cluster->servers->map(fn (V5Server $server) => [
|
|
'id' => $server->uuid,
|
|
'name' => $server->name,
|
|
'host' => $server->host,
|
|
'status' => $server->status,
|
|
'capabilities' => $server->capabilities ?? [],
|
|
'builderEnabled' => $server->builder_enabled,
|
|
'builderCapacity' => $server->builder_capacity,
|
|
'builderCpuQuota' => $server->builder_cpu_quota,
|
|
'ingressEnabled' => $server->isIngress(),
|
|
'ingressType' => $server->ingress_type,
|
|
'uuid' => $server->uuid,
|
|
'nodeAddress' => $server->node_address,
|
|
'wireguardListenPortOverride' => $server->wireguard_listen_port_override,
|
|
'wireguardEndpointOverride' => $server->wireguard_endpoint_override,
|
|
'wireguardManagementIp' => $server->wireguard_management_ip,
|
|
'wireguardPublicKey' => $server->wireguard_public_key,
|
|
'containerSubnets' => $server->container_subnets ?? [],
|
|
'privateKeyName' => $server->privateKey?->name,
|
|
'lastBootstrappedAt' => $server->last_bootstrapped_at?->toJSON(),
|
|
'lastBootstrapAction' => $server->last_bootstrap_action,
|
|
'lastBootstrapStatus' => $server->last_bootstrap_status,
|
|
'lastBootstrapOutput' => $server->last_bootstrap_output,
|
|
'lastBootstrapRanAt' => $server->last_bootstrap_ran_at?->toJSON(),
|
|
'lastStatusOutput' => $server->last_status_output,
|
|
'lastStatusCheckedAt' => $server->last_status_checked_at?->toJSON(),
|
|
])->all(),
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Reload servers (with keys) and counts before serializing so the payload
|
|
* always reflects the latest database state.
|
|
*
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function serializeFresh(V5Cluster $cluster): array
|
|
{
|
|
$cluster->load(['servers' => fn ($query) => $query
|
|
->with('privateKey')
|
|
->orderBy('name')]);
|
|
$cluster->loadCount('servers');
|
|
|
|
return $this->serialize($cluster);
|
|
}
|
|
}
|