diff --git a/internal/local/chart/v3.go b/internal/local/chart/v3.go index ed29d26..fdfb8df 100644 --- a/internal/local/chart/v3.go +++ b/internal/local/chart/v3.go @@ -297,6 +297,20 @@ func configureCore(configuration *config_v1.Configuration) (yamlMap, error) { return cfg, err } +// configureRemoteSession sets up remote session client configuration. +func configureRemoteSession(configuration *config_v1.Configuration) (yamlMap, error) { + cfg := make(yamlMap) + var err error + + if configuration.RemoteSession.Recordings.Size != "" { + err = errors.Join(err, + writeMapEntry(cfg, "remoteSessionClient.recordings.size", configuration.RemoteSession.Recordings.Size), + ) + } + + return cfg, err +} + func init() { valuesGeneratorV3 = &yamlGenerator{ visitors: map[string]configVisitor{}, @@ -309,6 +323,7 @@ func init() { valuesGeneratorV3.MustAddVisitor("resources", configureResources) valuesGeneratorV3.MustAddVisitor("forwarding", configureForwarding) valuesGeneratorV3.MustAddVisitor("lwh", configureLWH) + valuesGeneratorV3.MustAddVisitor("remoteSession", configureRemoteSession) valuesGeneratorV3.MustAddVisitor("overrides", configureOverrides) } diff --git a/internal/local/config/v1/v1.go b/internal/local/config/v1/v1.go index 2af9af8..5a23e24 100644 --- a/internal/local/config/v1/v1.go +++ b/internal/local/config/v1/v1.go @@ -1,5 +1,11 @@ package config_v1 +import ( + "fmt" + + "k8s.io/apimachinery/pkg/api/resource" +) + type TLSConfig struct { Cert string `json:"cert,omitempty"` // ingress tls cert Key string `json:"key,omitempty"` // ingress tls key @@ -61,24 +67,44 @@ type GithubSSOConfig struct { EmailDomain string `json:"emailDomain,omitempty"` } +// RecordingsConfig configures the remote session recordings storage. +type RecordingsConfig struct { + Size string `json:"size,omitempty"` // PVC size (e.g., "50Gi") +} + +// RemoteSessionConfig configures the remote session client. +type RemoteSessionConfig struct { + Recordings RecordingsConfig `json:"recordings,omitempty"` +} + // Configuration flat options for the chart, pointers are used to distinguish between empty and unset values type Configuration struct { - Autoscaling *bool `json:"autoscaling,omitempty"` - HelmOverrides map[string]any `json:"helmOverrides,omitempty"` - SMTP SMTPConfig `json:"smtp,omitempty"` - GithubSSO GithubSSOConfig `json:"githubSSO"` - TLS TLSConfig `json:"tls,omitempty"` - IPv4 string `json:"ip,omitempty"` - IPv6 string `json:"ip6,omitempty"` - Host string `json:"host,omitempty"` - Proxy ProxyConfig `json:"proxy,omitempty"` - Forwarding ForwardingConfig `json:"forwarding,omitempty"` - K3SArgs []string `json:"k3sArgs,omitempty"` - RetentionDays RetentionConfig `json:"retentionDays,omitempty"` - WekaNodesServed int `json:"wekaNodesMonitored,omitempty"` + HelmOverrides map[string]any `json:"helmOverrides,omitempty"` + Autoscaling *bool `json:"autoscaling,omitempty"` + GithubSSO GithubSSOConfig `json:"githubSSO"` + TLS TLSConfig `json:"tls,omitempty"` + IPv6 string `json:"ip6,omitempty"` + IPv4 string `json:"ip,omitempty"` + Host string `json:"host,omitempty"` + RemoteSession RemoteSessionConfig `json:"remoteSession,omitempty"` + SMTP SMTPConfig `json:"smtp,omitempty"` + Proxy ProxyConfig `json:"proxy,omitempty"` + Forwarding ForwardingConfig `json:"forwarding,omitempty"` + K3SArgs []string `json:"k3sArgs,omitempty"` + RetentionDays RetentionConfig `json:"retentionDays,omitempty"` + WekaNodesServed int `json:"wekaNodesMonitored,omitempty"` } func (c Configuration) Validate() error { + if c.RemoteSession.Recordings.Size != "" { + if _, err := resource.ParseQuantity(c.RemoteSession.Recordings.Size); err != nil { + return fmt.Errorf( + "invalid remoteSession.recordings.size %q: use Kubernetes quantity format (e.g., 10Gi, 500Mi)", + c.RemoteSession.Recordings.Size, + ) + } + } + return nil }