feat(v5): add WireGuard and coold/corrosion config to clusters/servers

Add WireGuard networking fields (interface, management pool, listen port),
container network pool, coold/corrosion versioning, and builder CPU quota
to clusters and servers via new migrations and model fillables.

Expose full cluster and server CRUD on the Clusters page with private key
selection, pending state tracking, and new form primitives (Field, Input,
Textarea). Add server status check fields and a lima test VM config for
development.
This commit is contained in:
Andras Bacsai committed 2026-06-19 07:23:45 +02:00
1 parent 5d57b131ff
commit 3ae87334bd
30 files changed
+3876 -103

No files matched your search

+76
View File
@@ -11,13 +11,89 @@ class Cluster extends V5Model
{
protected $table = 'v5_clusters';
public const DEFAULT_WIREGUARD_INTERFACE = 'wg0';
public const DEFAULT_WIREGUARD_MANAGEMENT_POOL = '100.64.0.0/16';
public const DEFAULT_WIREGUARD_LISTEN_PORT = 51820;
public const DEFAULT_CONTAINER_NETWORK_POOL = '10.210.0.0/16';
public const DEFAULT_CONTAINER_NETWORK_PREFIX = 24;
public const DEFAULT_NAMESPACES = ['default'];
public const DEFAULT_COOLD_VERSION = 'nightly';
public const DEFAULT_CORROSION_VERSION = 'v1.0.0';
public const DEFAULT_CORROSION_GOSSIP_PORT = 8787;
public const DEFAULT_CORROSION_API_PORT = 8080;
public const DEFAULT_BUILDER_CAPACITY = 2;
public const DEFAULT_BUILDER_CPU_QUOTA = '200%';
public const DEFAULT_BUILDER_MEMORY_MAX = '2G';
public const DEFAULT_BUILDER_TIMEOUT_SECS = 1800;
protected $fillable = [
'team_id',
'created_by_user_id',
'name',
'description',
'wireguard_interface',
'wireguard_management_pool',
'wireguard_listen_port',
'container_network_pool',
'container_network_prefix',
'namespaces',
'default_deny_containers',
'coold_version',
'corrosion_version',
'corrosion_gossip_port',
'corrosion_api_port',
'builder_enabled',
'builder_capacity',
'builder_cpu_quota',
'builder_memory_max',
'builder_timeout_secs',
'last_cli_action',
'last_cli_status',
'last_cli_summary',
'last_cli_ran_at',
];
protected $attributes = [
'wireguard_interface' => self::DEFAULT_WIREGUARD_INTERFACE,
'wireguard_management_pool' => self::DEFAULT_WIREGUARD_MANAGEMENT_POOL,
'wireguard_listen_port' => self::DEFAULT_WIREGUARD_LISTEN_PORT,
'container_network_pool' => self::DEFAULT_CONTAINER_NETWORK_POOL,
'container_network_prefix' => self::DEFAULT_CONTAINER_NETWORK_PREFIX,
'default_deny_containers' => true,
'coold_version' => self::DEFAULT_COOLD_VERSION,
'corrosion_version' => self::DEFAULT_CORROSION_VERSION,
'corrosion_gossip_port' => self::DEFAULT_CORROSION_GOSSIP_PORT,
'corrosion_api_port' => self::DEFAULT_CORROSION_API_PORT,
'builder_enabled' => true,
'builder_capacity' => self::DEFAULT_BUILDER_CAPACITY,
'builder_cpu_quota' => self::DEFAULT_BUILDER_CPU_QUOTA,
'builder_memory_max' => self::DEFAULT_BUILDER_MEMORY_MAX,
'builder_timeout_secs' => self::DEFAULT_BUILDER_TIMEOUT_SECS,
];
protected function casts(): array
{
return [
'namespaces' => 'array',
'default_deny_containers' => 'boolean',
'builder_enabled' => 'boolean',
'last_cli_ran_at' => 'datetime',
];
}
public function team(): BelongsTo
{
return $this->belongsTo(Team::class);
+12
View File
@@ -24,7 +24,17 @@ class Server extends V5Model
'capabilities',
'builder_enabled',
'builder_capacity',
'builder_cpu_quota',
'node_address',
'wireguard_listen_port_override',
'wireguard_endpoint_override',
'wireguard_management_ip',
'wireguard_public_key',
'container_subnets',
'last_bootstrapped_at',
'last_status_check',
'last_status_output',
'last_status_checked_at',
];
protected function casts(): array
@@ -32,7 +42,9 @@ class Server extends V5Model
return [
'capabilities' => 'array',
'builder_enabled' => 'boolean',
'container_subnets' => 'array',
'last_bootstrapped_at' => 'datetime',
'last_status_checked_at' => 'datetime',
];
}