Files
rdp-proxy/backend/internal/modules/cluster/models.go
T
2026-04-28 22:29:50 +03:00

1018 lines
38 KiB
Go

package cluster
import (
"encoding/json"
"time"
"github.com/example/remote-access-platform/backend/internal/platform/clusterauth"
)
const (
PlatformRoleAdmin = "platform_admin"
PlatformRoleRecoveryAdmin = "platform_recovery_admin"
ClusterStatusActive = "active"
ClusterStatusDisabled = "disabled"
JoinRequestStatusPending = "pending"
JoinRequestStatusApproved = "approved"
JoinRequestStatusRejected = "rejected"
NodeRegistrationPending = "pending"
NodeRegistrationActive = "active"
DefaultClusterSlug = "default"
VPNConnectionModeSingleActive = "single_active"
VPNConnectionDesiredEnabled = "enabled"
VPNConnectionDesiredDisabled = "disabled"
VPNConnectionStatusDisabled = "disabled"
VPNConnectionStatusEnabled = "enabled"
VPNConnectionStatusConnecting = "connecting"
VPNConnectionStatusActive = "active"
VPNConnectionStatusDegraded = "degraded"
VPNConnectionStatusFailed = "failed"
VPNLeaseStatusActive = "active"
VPNLeaseStatusReleased = "released"
VPNLeaseStatusExpired = "expired"
VPNLeaseStatusFenced = "fenced"
VPNAssignmentStatusNotStarted = "not_started"
VPNAssignmentStatusAssigned = "assigned"
VPNAssignmentStatusLeaseRequired = "lease_required"
VPNAssignmentStatusBlocked = "blocked"
VPNAssignmentStatusUnknown = "unknown"
)
var allowedNodeRoles = map[string]struct{}{
"entry-node": {},
"relay-node": {},
"core-mesh": {},
"rdp-worker": {},
"vnc-worker": {},
"vpn-exit": {},
"vpn-connector": {},
"file-storage-cache": {},
"update-cache": {},
"video-relay": {},
}
type Cluster struct {
ID string `json:"id"`
Slug string `json:"slug"`
Name string `json:"name"`
Status string `json:"status"`
Region *string `json:"region,omitempty"`
Metadata json.RawMessage `json:"metadata"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type ClusterNode struct {
ID string `json:"id"`
OwnerOrganizationID *string `json:"owner_organization_id,omitempty"`
NodeKey string `json:"node_key"`
Name string `json:"name"`
OwnershipType string `json:"ownership_type"`
RegistrationStatus string `json:"registration_status"`
HealthStatus string `json:"health_status"`
VersionState string `json:"version_state"`
PartitionState string `json:"partition_state"`
ReportedVersion *string `json:"reported_version,omitempty"`
LastSeenAt *time.Time `json:"last_seen_at,omitempty"`
MembershipStatus string `json:"membership_status"`
MembershipMetadata json.RawMessage `json:"membership_metadata"`
NodeGroupID *string `json:"node_group_id,omitempty"`
NodeGroupName *string `json:"node_group_name,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type ClusterNodeGroup struct {
ID string `json:"id"`
ClusterID string `json:"cluster_id"`
ParentGroupID *string `json:"parent_group_id,omitempty"`
Name string `json:"name"`
Description *string `json:"description,omitempty"`
SortOrder int `json:"sort_order"`
Metadata json.RawMessage `json:"metadata"`
CreatedByUserID *string `json:"created_by_user_id,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type NodeJoinToken struct {
ID string `json:"id"`
ClusterID string `json:"cluster_id"`
Scope json.RawMessage `json:"scope"`
ExpiresAt time.Time `json:"expires_at"`
MaxUses int `json:"max_uses"`
UsedCount int `json:"used_count"`
Status string `json:"status"`
CreatedByUserID *string `json:"created_by_user_id,omitempty"`
CreatedAt time.Time `json:"created_at"`
RevokedAt *time.Time `json:"revoked_at,omitempty"`
AuthorityPayload json.RawMessage `json:"authority_payload,omitempty"`
AuthoritySignature *ClusterSignature `json:"authority_signature,omitempty"`
}
type CreatedJoinToken struct {
NodeJoinToken
Token string `json:"token"`
}
type NodeBootstrap struct {
NodeID string `json:"node_id"`
ClusterID string `json:"cluster_id"`
IdentityStatus string `json:"identity_status"`
Certificate map[string]any `json:"certificate"`
HeartbeatEndpoint string `json:"heartbeat_endpoint"`
ClusterAuthority *ClusterAuthorityDescriptor `json:"cluster_authority,omitempty"`
AuthorityPayload json.RawMessage `json:"authority_payload,omitempty"`
AuthoritySignature *ClusterSignature `json:"authority_signature,omitempty"`
}
type NodeJoinRequest struct {
ID string `json:"id"`
ClusterID string `json:"cluster_id"`
JoinTokenID *string `json:"join_token_id,omitempty"`
NodeName string `json:"node_name"`
NodeFingerprint string `json:"node_fingerprint"`
PublicKey string `json:"public_key"`
ReportedCapabilities json.RawMessage `json:"reported_capabilities"`
ReportedFacts json.RawMessage `json:"reported_facts"`
RequestedRoles json.RawMessage `json:"requested_roles"`
Status string `json:"status"`
ReviewedByUserID *string `json:"reviewed_by_user_id,omitempty"`
ReviewedAt *time.Time `json:"reviewed_at,omitempty"`
ApprovedNodeID *string `json:"approved_node_id,omitempty"`
RejectionReason *string `json:"rejection_reason,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
ApprovalPayload json.RawMessage `json:"approval_payload,omitempty"`
ApprovalSignature json.RawMessage `json:"approval_signature,omitempty"`
}
type NodeRoleAssignment struct {
ID string `json:"id"`
ClusterID string `json:"cluster_id"`
NodeID string `json:"node_id"`
OrganizationID *string `json:"organization_id,omitempty"`
Role string `json:"role"`
Status string `json:"status"`
Policy json.RawMessage `json:"policy"`
AssignedByUserID *string `json:"assigned_by_user_id,omitempty"`
AssignedAt time.Time `json:"assigned_at"`
RevokedAt *time.Time `json:"revoked_at,omitempty"`
}
type NodeHeartbeat struct {
ID string `json:"id"`
ClusterID string `json:"cluster_id"`
NodeID string `json:"node_id"`
HealthStatus string `json:"health_status"`
ReportedVersion *string `json:"reported_version,omitempty"`
Capabilities json.RawMessage `json:"capabilities"`
ServiceStates json.RawMessage `json:"service_states"`
Metadata json.RawMessage `json:"metadata"`
ObservedAt time.Time `json:"observed_at"`
}
type NodeWorkloadDesiredState struct {
ClusterID string `json:"cluster_id"`
NodeID string `json:"node_id"`
ServiceType string `json:"service_type"`
DesiredState string `json:"desired_state"`
Version *string `json:"version,omitempty"`
RuntimeMode string `json:"runtime_mode"`
ArtifactRef *string `json:"artifact_ref,omitempty"`
Config json.RawMessage `json:"config"`
Environment json.RawMessage `json:"environment"`
UpdatedByUserID *string `json:"updated_by_user_id,omitempty"`
UpdatedAt time.Time `json:"updated_at"`
}
type NodeWorkloadStatus struct {
ID string `json:"id"`
ClusterID string `json:"cluster_id"`
NodeID string `json:"node_id"`
ServiceType string `json:"service_type"`
ReportedState string `json:"reported_state"`
RuntimeMode string `json:"runtime_mode"`
Version *string `json:"version,omitempty"`
StatusPayload json.RawMessage `json:"status_payload"`
ObservedAt time.Time `json:"observed_at"`
}
type MeshLinkObservation struct {
ID string `json:"id"`
ClusterID string `json:"cluster_id"`
SourceNodeID string `json:"source_node_id"`
TargetNodeID string `json:"target_node_id"`
LinkStatus string `json:"link_status"`
LatencyMs *int `json:"latency_ms,omitempty"`
QualityScore *int `json:"quality_score,omitempty"`
Metadata json.RawMessage `json:"metadata"`
ObservedAt time.Time `json:"observed_at"`
}
type MeshRouteIntent struct {
ID string `json:"id"`
ClusterID string `json:"cluster_id"`
SourceSelector json.RawMessage `json:"source_selector"`
DestinationSelector json.RawMessage `json:"destination_selector"`
ServiceClass string `json:"service_class"`
Priority int `json:"priority"`
Status string `json:"status"`
Policy json.RawMessage `json:"policy"`
CreatedByUserID *string `json:"created_by_user_id,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type SyntheticMeshRouteConfig struct {
RouteID string `json:"route_id"`
ClusterID string `json:"cluster_id"`
SourceNodeID string `json:"source_node_id"`
DestinationNodeID string `json:"destination_node_id"`
Hops []string `json:"hops"`
AllowedChannels []string `json:"allowed_channels"`
ExpiresAt time.Time `json:"expires_at"`
MaxTTL int `json:"max_ttl"`
MaxHops int `json:"max_hops"`
RouteVersion string `json:"route_version,omitempty"`
PolicyVersion string `json:"policy_version,omitempty"`
PeerDirectoryVersion string `json:"peer_directory_version,omitempty"`
}
type PeerEndpointCandidate struct {
EndpointID string `json:"endpoint_id"`
NodeID string `json:"node_id"`
Transport string `json:"transport"`
Address string `json:"address"`
AddressFamily string `json:"address_family,omitempty"`
Reachability string `json:"reachability"`
NATType string `json:"nat_type,omitempty"`
ConnectivityMode string `json:"connectivity_mode"`
Region string `json:"region,omitempty"`
Priority int `json:"priority"`
PolicyTags []string `json:"policy_tags,omitempty"`
LastVerifiedAt *time.Time `json:"last_verified_at,omitempty"`
Metadata json.RawMessage `json:"metadata,omitempty"`
}
type PeerDirectoryEntry struct {
NodeID string `json:"node_id"`
RouteIDs []string `json:"route_ids,omitempty"`
EndpointCount int `json:"endpoint_count"`
CandidateCount int `json:"candidate_count"`
ConnectivityModes []string `json:"connectivity_modes,omitempty"`
RecoverySeed bool `json:"recovery_seed"`
}
type PeerRecoverySeed struct {
NodeID string `json:"node_id"`
Endpoint string `json:"endpoint"`
Transport string `json:"transport"`
ConnectivityMode string `json:"connectivity_mode,omitempty"`
Region string `json:"region,omitempty"`
Priority int `json:"priority"`
LastVerifiedAt *time.Time `json:"last_verified_at,omitempty"`
Metadata json.RawMessage `json:"metadata,omitempty"`
}
type PeerRendezvousLease struct {
LeaseID string `json:"lease_id"`
PeerNodeID string `json:"peer_node_id"`
RelayNodeID string `json:"relay_node_id"`
RelayEndpoint string `json:"relay_endpoint"`
Transport string `json:"transport"`
ConnectivityMode string `json:"connectivity_mode,omitempty"`
RouteIDs []string `json:"route_ids,omitempty"`
AllowedChannels []string `json:"allowed_channels,omitempty"`
Priority int `json:"priority"`
ControlPlaneOnly bool `json:"control_plane_only"`
IssuedAt time.Time `json:"issued_at"`
ExpiresAt time.Time `json:"expires_at"`
Reason string `json:"reason,omitempty"`
Metadata json.RawMessage `json:"metadata,omitempty"`
}
type RendezvousRelayPolicyDecision struct {
RouteID string `json:"route_id,omitempty"`
PeerNodeID string `json:"peer_node_id"`
WithdrawnLeaseID string `json:"withdrawn_lease_id,omitempty"`
StaleRelayNodeID string `json:"stale_relay_node_id,omitempty"`
SelectedRelayID string `json:"selected_relay_id,omitempty"`
SelectedEndpoint string `json:"selected_endpoint,omitempty"`
Score int `json:"score,omitempty"`
Reason string `json:"reason"`
ScoreReasons []string `json:"score_reasons,omitempty"`
ReporterNodeID string `json:"reporter_node_id,omitempty"`
}
type RendezvousRelayPolicyReport struct {
SchemaVersion string `json:"schema_version"`
ScoringMode string `json:"scoring_mode"`
FeedbackMaxAgeSeconds int `json:"feedback_max_age_seconds"`
StaleRelayCount int `json:"stale_relay_count"`
WithdrawnLeaseCount int `json:"withdrawn_lease_count"`
ReplacementLeaseCount int `json:"replacement_lease_count"`
Decisions []RendezvousRelayPolicyDecision `json:"decisions,omitempty"`
}
type RoutePathDecision struct {
DecisionID string `json:"decision_id"`
RouteID string `json:"route_id"`
ClusterID string `json:"cluster_id"`
LocalNodeID string `json:"local_node_id"`
SourceNodeID string `json:"source_node_id"`
DestinationNodeID string `json:"destination_node_id"`
OriginalHops []string `json:"original_hops"`
EffectiveHops []string `json:"effective_hops"`
PreviousHopID string `json:"previous_hop_id,omitempty"`
NextHopID string `json:"next_hop_id,omitempty"`
LocalRole string `json:"local_role"`
SelectedRelayID string `json:"selected_relay_id,omitempty"`
SelectedRelayEndpoint string `json:"selected_relay_endpoint,omitempty"`
StaleRelayNodeID string `json:"stale_relay_node_id,omitempty"`
RendezvousPeerNodeID string `json:"rendezvous_peer_node_id,omitempty"`
RendezvousLeaseID string `json:"rendezvous_lease_id,omitempty"`
RendezvousLeaseReason string `json:"rendezvous_lease_reason,omitempty"`
DecisionSource string `json:"decision_source"`
Generation string `json:"generation"`
PathScore int `json:"path_score,omitempty"`
ScoreReasons []string `json:"score_reasons,omitempty"`
ControlPlaneOnly bool `json:"control_plane_only"`
ProductionForwarding bool `json:"production_forwarding"`
ExpiresAt time.Time `json:"expires_at"`
}
type RoutePathDecisionReport struct {
SchemaVersion string `json:"schema_version"`
DecisionMode string `json:"decision_mode"`
Generation string `json:"generation"`
DecisionCount int `json:"decision_count"`
ReplacementDecisionCount int `json:"replacement_decision_count"`
ControlPlaneOnly bool `json:"control_plane_only"`
ProductionForwarding bool `json:"production_forwarding"`
Decisions []RoutePathDecision `json:"decisions,omitempty"`
}
type NodeSyntheticMeshConfig struct {
Enabled bool `json:"enabled"`
SchemaVersion string `json:"schema_version"`
ClusterID string `json:"cluster_id"`
LocalNodeID string `json:"local_node_id"`
AuthorityRequired bool `json:"authority_required"`
ClusterAuthority *ClusterAuthorityDescriptor `json:"cluster_authority,omitempty"`
AuthorityPayload json.RawMessage `json:"authority_payload,omitempty"`
AuthoritySignature *ClusterSignature `json:"authority_signature,omitempty"`
ConfigVersion string `json:"config_version,omitempty"`
PeerDirectoryVersion string `json:"peer_directory_version,omitempty"`
PolicyVersion string `json:"policy_version,omitempty"`
PeerEndpoints map[string]string `json:"peer_endpoints"`
PeerEndpointCandidates map[string][]PeerEndpointCandidate `json:"peer_endpoint_candidates,omitempty"`
PeerDirectory []PeerDirectoryEntry `json:"peer_directory,omitempty"`
RecoverySeeds []PeerRecoverySeed `json:"recovery_seeds,omitempty"`
RendezvousLeases []PeerRendezvousLease `json:"rendezvous_leases,omitempty"`
RendezvousRelayPolicy *RendezvousRelayPolicyReport `json:"rendezvous_relay_policy,omitempty"`
RoutePathDecisions *RoutePathDecisionReport `json:"route_path_decisions,omitempty"`
Routes []SyntheticMeshRouteConfig `json:"routes"`
ProductionForwarding bool `json:"production_forwarding"`
}
type MeshQoSPolicy struct {
ID string `json:"id"`
ClusterID string `json:"cluster_id"`
ServiceClass string `json:"service_class"`
Priority int `json:"priority"`
ReliabilityMode string `json:"reliability_mode"`
DropPolicy string `json:"drop_policy"`
BandwidthPolicy json.RawMessage `json:"bandwidth_policy"`
Metadata json.RawMessage `json:"metadata"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type FabricEntryPoint struct {
ID string `json:"id"`
ClusterID string `json:"cluster_id"`
Name string `json:"name"`
Status string `json:"status"`
EndpointType string `json:"endpoint_type"`
PublicEndpoint *string `json:"public_endpoint,omitempty"`
Policy json.RawMessage `json:"policy"`
Metadata json.RawMessage `json:"metadata"`
CreatedByUserID *string `json:"created_by_user_id,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type FabricEntryPointNode struct {
EntryPointID string `json:"entry_point_id"`
ClusterID string `json:"cluster_id"`
NodeID string `json:"node_id"`
Status string `json:"status"`
Priority int `json:"priority"`
Metadata json.RawMessage `json:"metadata"`
AddedByUserID *string `json:"added_by_user_id,omitempty"`
AddedAt time.Time `json:"added_at"`
}
type FabricEgressPool struct {
ID string `json:"id"`
ClusterID string `json:"cluster_id"`
Name string `json:"name"`
Status string `json:"status"`
Description *string `json:"description,omitempty"`
RouteScope json.RawMessage `json:"route_scope"`
Policy json.RawMessage `json:"policy"`
Metadata json.RawMessage `json:"metadata"`
CreatedByUserID *string `json:"created_by_user_id,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type FabricEgressPoolNode struct {
EgressPoolID string `json:"egress_pool_id"`
ClusterID string `json:"cluster_id"`
NodeID string `json:"node_id"`
Status string `json:"status"`
Priority int `json:"priority"`
Metadata json.RawMessage `json:"metadata"`
AddedByUserID *string `json:"added_by_user_id,omitempty"`
AddedAt time.Time `json:"added_at"`
}
type ClusterAuthorityState struct {
ClusterID string `json:"cluster_id"`
AuthorityState string `json:"authority_state"`
MutationMode string `json:"mutation_mode"`
Term int64 `json:"term"`
Notes *string `json:"notes,omitempty"`
UpdatedByUserID *string `json:"updated_by_user_id,omitempty"`
UpdatedAt time.Time `json:"updated_at"`
}
type ClusterSignature = clusterauth.Signature
type ClusterAuthorityDescriptor struct {
SchemaVersion string `json:"schema_version"`
ClusterID string `json:"cluster_id"`
AuthorityState string `json:"authority_state"`
KeyAlgorithm string `json:"key_algorithm"`
PublicKey string `json:"public_key"`
PublicKeyFingerprint string `json:"public_key_fingerprint"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type ClusterAuthorityKey struct {
ClusterAuthorityDescriptor
PrivateKey string `json:"-"`
}
type ClusterAdminSummary struct {
ClusterID string `json:"cluster_id"`
Slug string `json:"slug"`
Name string `json:"name"`
Status string `json:"status"`
Region *string `json:"region,omitempty"`
AuthorityState string `json:"authority_state"`
MutationMode string `json:"mutation_mode"`
ClusterKeyAlgorithm *string `json:"cluster_key_algorithm,omitempty"`
ClusterKeyFingerprint *string `json:"cluster_key_fingerprint,omitempty"`
NodeCount int64 `json:"node_count"`
HealthyNodeCount int64 `json:"healthy_node_count"`
PendingJoinCount int64 `json:"pending_join_count"`
ActiveRoleAssignmentCount int64 `json:"active_role_assignment_count"`
LastNodeSeenAt *time.Time `json:"last_node_seen_at,omitempty"`
}
type ClusterAuditEvent struct {
ID string `json:"id"`
ClusterID *string `json:"cluster_id,omitempty"`
ActorUserID *string `json:"actor_user_id,omitempty"`
EventType string `json:"event_type"`
TargetType string `json:"target_type"`
TargetID *string `json:"target_id,omitempty"`
Payload json.RawMessage `json:"payload"`
CreatedAt time.Time `json:"created_at"`
}
type FabricTestingFlag struct {
ID string `json:"id"`
ScopeType string `json:"scope_type"`
ScopeID *string `json:"scope_id,omitempty"`
ClusterID *string `json:"cluster_id,omitempty"`
Enabled bool `json:"enabled"`
TelemetryEnabled bool `json:"telemetry_enabled"`
SyntheticLinksEnabled bool `json:"synthetic_links_enabled"`
HistoryRetentionHours int `json:"history_retention_hours"`
Metadata json.RawMessage `json:"metadata"`
UpdatedByUserID *string `json:"updated_by_user_id,omitempty"`
UpdatedAt time.Time `json:"updated_at"`
}
type EffectiveNodeTestingFlags struct {
Enabled bool `json:"enabled"`
TelemetryEnabled bool `json:"telemetry_enabled"`
SyntheticLinksEnabled bool `json:"synthetic_links_enabled"`
HistoryRetentionHours int `json:"history_retention_hours"`
AppliedScopes []string `json:"applied_scopes"`
Metadata json.RawMessage `json:"metadata"`
}
type NodeTelemetryObservation struct {
ID string `json:"id"`
ClusterID string `json:"cluster_id"`
NodeID string `json:"node_id"`
CPUPercent *float64 `json:"cpu_percent,omitempty"`
MemoryUsedBytes *int64 `json:"memory_used_bytes,omitempty"`
MemoryTotalBytes *int64 `json:"memory_total_bytes,omitempty"`
DiskUsedBytes *int64 `json:"disk_used_bytes,omitempty"`
DiskTotalBytes *int64 `json:"disk_total_bytes,omitempty"`
NetworkRxBytes *int64 `json:"network_rx_bytes,omitempty"`
NetworkTxBytes *int64 `json:"network_tx_bytes,omitempty"`
ProcessCount *int `json:"process_count,omitempty"`
Payload json.RawMessage `json:"payload"`
ObservedAt time.Time `json:"observed_at"`
}
type VPNConnection struct {
ID string `json:"id"`
ClusterID string `json:"cluster_id"`
OrganizationID string `json:"organization_id"`
Name string `json:"name"`
TargetEndpoint json.RawMessage `json:"target_endpoint"`
ProtocolFamily string `json:"protocol_family"`
CredentialRef *string `json:"credential_ref,omitempty"`
Mode string `json:"mode"`
DesiredState string `json:"desired_state"`
AllowedNodePolicy json.RawMessage `json:"allowed_node_policy"`
RoutingUsage json.RawMessage `json:"routing_usage"`
RoutePolicy json.RawMessage `json:"route_policy"`
QoSPolicy json.RawMessage `json:"qos_policy"`
PlacementPolicy json.RawMessage `json:"placement_policy"`
Status string `json:"status"`
Metadata json.RawMessage `json:"metadata"`
CreatedByUserID *string `json:"created_by_user_id,omitempty"`
UpdatedByUserID *string `json:"updated_by_user_id,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type VPNConnectionAllowedNode struct {
VPNConnectionID string `json:"vpn_connection_id"`
ClusterID string `json:"cluster_id"`
NodeID string `json:"node_id"`
RolePreference string `json:"role_preference"`
Status string `json:"status"`
Metadata json.RawMessage `json:"metadata"`
CreatedByUserID *string `json:"created_by_user_id,omitempty"`
CreatedAt time.Time `json:"created_at"`
}
type VPNConnectionRoutePolicy struct {
ID string `json:"id"`
VPNConnectionID string `json:"vpn_connection_id"`
ClusterID string `json:"cluster_id"`
OrganizationID string `json:"organization_id"`
RouteType string `json:"route_type"`
Destination string `json:"destination"`
Action string `json:"action"`
ServiceType *string `json:"service_type,omitempty"`
Priority int `json:"priority"`
Policy json.RawMessage `json:"policy"`
Status string `json:"status"`
CreatedByUserID *string `json:"created_by_user_id,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type VPNConnectionLease struct {
ID string `json:"id"`
VPNConnectionID string `json:"vpn_connection_id"`
ClusterID string `json:"cluster_id"`
OwnerNodeID string `json:"owner_node_id"`
LeaseGeneration int64 `json:"lease_generation"`
FencingToken string `json:"fencing_token"`
Status string `json:"status"`
AcquiredAt time.Time `json:"acquired_at"`
RenewedAt time.Time `json:"renewed_at"`
ExpiresAt time.Time `json:"expires_at"`
ReleasedAt *time.Time `json:"released_at,omitempty"`
FencedAt *time.Time `json:"fenced_at,omitempty"`
Metadata json.RawMessage `json:"metadata"`
}
type VPNLeaseOwnerEligibility struct {
VPNConnectionID string `json:"vpn_connection_id"`
ClusterID string `json:"cluster_id"`
OrganizationID string `json:"organization_id"`
OwnerNodeID string `json:"owner_node_id"`
MembershipStatus string `json:"membership_status"`
NodeRegistrationStatus string `json:"node_registration_status"`
AllowedByPolicy bool `json:"allowed_by_policy"`
HasAuthorizedRole bool `json:"has_authorized_role"`
}
type NodeVPNAssignmentLease struct {
LeaseID string `json:"lease_id"`
OwnerNodeID string `json:"owner_node_id"`
LeaseGeneration int64 `json:"lease_generation"`
Status string `json:"status"`
RenewedAt time.Time `json:"renewed_at"`
ExpiresAt time.Time `json:"expires_at"`
}
type NodeVPNAssignment struct {
VPNConnectionID string `json:"vpn_connection_id"`
ClusterID string `json:"cluster_id"`
OrganizationID string `json:"organization_id"`
Name string `json:"name"`
TargetEndpoint json.RawMessage `json:"target_endpoint"`
ProtocolFamily string `json:"protocol_family"`
Mode string `json:"mode"`
DesiredState string `json:"desired_state"`
RoutingUsage json.RawMessage `json:"routing_usage"`
RoutePolicy json.RawMessage `json:"route_policy"`
QoSPolicy json.RawMessage `json:"qos_policy"`
PlacementPolicy json.RawMessage `json:"placement_policy"`
Status string `json:"status"`
HasCredentialRef bool `json:"has_credential_ref"`
AssignmentReason string `json:"assignment_reason"`
ActiveLease *NodeVPNAssignmentLease `json:"active_lease,omitempty"`
UpdatedAt time.Time `json:"updated_at"`
}
type NodeVPNAssignmentStatus struct {
ID string `json:"id"`
VPNConnectionID string `json:"vpn_connection_id"`
ClusterID string `json:"cluster_id"`
NodeID string `json:"node_id"`
ObservedStatus string `json:"observed_status"`
StatusPayload json.RawMessage `json:"status_payload"`
ObservedAt time.Time `json:"observed_at"`
}
type CreateClusterInput struct {
ActorUserID string
Slug string
Name string
Region *string
Metadata json.RawMessage
}
type UpdateClusterInput struct {
ActorUserID string
ClusterID string
Name string
Status string
Region *string
Metadata json.RawMessage
}
type CreateJoinTokenInput struct {
ActorUserID string
ClusterID string
Scope json.RawMessage
ExpiresAt time.Time
MaxUses int
}
type CreateJoinRequestInput struct {
ClusterID string
JoinToken string
NodeName string
NodeFingerprint string
PublicKey string
ReportedCapabilities json.RawMessage
ReportedFacts json.RawMessage
RequestedRoles json.RawMessage
}
type GetJoinRequestBootstrapInput struct {
ClusterID string
JoinRequestID string
NodeFingerprint string
PublicKey string
}
type ApproveJoinRequestInput struct {
ActorUserID string
ClusterID string
JoinRequestID string
NodeKey string
OwnershipType string
OwnerOrganizationID *string
}
type ApprovedJoinRequest struct {
JoinRequest NodeJoinRequest `json:"join_request"`
Bootstrap NodeBootstrap `json:"node_bootstrap"`
}
type JoinRequestBootstrapResult struct {
Status string `json:"status"`
JoinRequest NodeJoinRequest `json:"join_request"`
Bootstrap *NodeBootstrap `json:"node_bootstrap,omitempty"`
}
type RejectJoinRequestInput struct {
ActorUserID string
ClusterID string
JoinRequestID string
Reason string
}
type AssignNodeRoleInput struct {
ActorUserID string
ClusterID string
NodeID string
OrganizationID *string
Role string
Status string
Policy json.RawMessage
}
type AttachExistingNodeInput struct {
ActorUserID string
ClusterID string
NodeID string
Roles []string
}
type CreateNodeGroupInput struct {
ActorUserID string
ClusterID string
ParentGroupID *string
Name string
Description *string
SortOrder int
Metadata json.RawMessage
}
type AssignNodeGroupInput struct {
ActorUserID string
ClusterID string
NodeID string
GroupID *string
}
type RevokeJoinTokenInput struct {
ActorUserID string
ClusterID string
TokenID string
}
type RevokeNodeIdentityInput struct {
ActorUserID string
ClusterID string
NodeID string
Reason string
}
type DisableMembershipInput struct {
ActorUserID string
ClusterID string
NodeID string
Reason string
}
type RecordHeartbeatInput struct {
ClusterID string
NodeID string
HealthStatus string
ReportedVersion *string
Capabilities json.RawMessage
ServiceStates json.RawMessage
Metadata json.RawMessage
}
type UpsertFabricTestingFlagInput struct {
ActorUserID string
ScopeType string
ScopeID *string
ClusterID *string
Enabled bool
TelemetryEnabled bool
SyntheticLinksEnabled bool
HistoryRetentionHours int
Metadata json.RawMessage
}
type RecordNodeTelemetryInput struct {
ClusterID string
NodeID string
CPUPercent *float64
MemoryUsedBytes *int64
MemoryTotalBytes *int64
DiskUsedBytes *int64
DiskTotalBytes *int64
NetworkRxBytes *int64
NetworkTxBytes *int64
ProcessCount *int
Payload json.RawMessage
ObservedAt time.Time
}
type SetDesiredWorkloadInput struct {
ActorUserID string
ClusterID string
NodeID string
ServiceType string
DesiredState string
Version *string
RuntimeMode string
ArtifactRef *string
Config json.RawMessage
Environment json.RawMessage
}
type ReportWorkloadStatusInput struct {
ClusterID string
NodeID string
ServiceType string
ReportedState string
RuntimeMode string
Version *string
StatusPayload json.RawMessage
}
type ReportMeshLinkInput struct {
ClusterID string
SourceNodeID string
TargetNodeID string
LinkStatus string
LatencyMs *int
QualityScore *int
Metadata json.RawMessage
}
type GetNodeSyntheticMeshConfigInput struct {
ClusterID string
NodeID string
}
type CreateRouteIntentInput struct {
ActorUserID string
ClusterID string
SourceSelector json.RawMessage
DestinationSelector json.RawMessage
ServiceClass string
Priority int
Policy json.RawMessage
}
type CreateFabricEntryPointInput struct {
ActorUserID string
ClusterID string
Name string
Status string
EndpointType string
PublicEndpoint *string
Policy json.RawMessage
Metadata json.RawMessage
}
type SetFabricEntryPointNodeInput struct {
ActorUserID string
ClusterID string
EntryPointID string
NodeID string
Status string
Priority int
Metadata json.RawMessage
}
type CreateFabricEgressPoolInput struct {
ActorUserID string
ClusterID string
Name string
Status string
Description *string
RouteScope json.RawMessage
Policy json.RawMessage
Metadata json.RawMessage
}
type SetFabricEgressPoolNodeInput struct {
ActorUserID string
ClusterID string
EgressPoolID string
NodeID string
Status string
Priority int
Metadata json.RawMessage
}
type UpdateClusterAuthorityInput struct {
ActorUserID string
ClusterID string
AuthorityState string
MutationMode string
Notes *string
}
type CreateVPNConnectionInput struct {
ActorUserID string
ClusterID string
OrganizationID string
Name string
TargetEndpoint json.RawMessage
ProtocolFamily string
CredentialRef *string
Mode string
DesiredState string
AllowedNodePolicy json.RawMessage
RoutingUsage json.RawMessage
RoutePolicy json.RawMessage
QoSPolicy json.RawMessage
PlacementPolicy json.RawMessage
Metadata json.RawMessage
}
type UpdateVPNConnectionDesiredStateInput struct {
ActorUserID string
ClusterID string
VPNConnectionID string
DesiredState string
}
type UpsertVPNConnectionRoutePolicyInput struct {
ActorUserID string
ClusterID string
VPNConnectionID string
RouteType string
Destination string
Action string
ServiceType *string
Priority int
Policy json.RawMessage
Status string
}
type SetVPNConnectionAllowedNodesInput struct {
ActorUserID string
ClusterID string
VPNConnectionID string
NodeIDs []string
RolePreference string
Metadata json.RawMessage
}
type AcquireVPNConnectionLeaseInput struct {
ActorUserID string
ClusterID string
VPNConnectionID string
OwnerNodeID string
TTL time.Duration
Metadata json.RawMessage
}
type RenewVPNConnectionLeaseInput struct {
ActorUserID string
ClusterID string
VPNConnectionID string
LeaseID string
OwnerNodeID string
FencingToken string
TTL time.Duration
}
type ReleaseVPNConnectionLeaseInput struct {
ActorUserID string
ClusterID string
VPNConnectionID string
LeaseID string
OwnerNodeID string
FencingToken string
}
type FenceVPNConnectionLeaseInput struct {
ActorUserID string
ClusterID string
VPNConnectionID string
LeaseID string
Reason string
}
type ExpireStaleVPNConnectionLeasesInput struct {
ActorUserID string
ClusterID string
}
type ReportNodeVPNAssignmentStatusInput struct {
ClusterID string
NodeID string
VPNConnectionID string
ObservedStatus string
StatusPayload json.RawMessage
ObservedAt time.Time
}