2023-01-23 14:14:30 +01:00

79 lines
2.6 KiB
Go

// Copyright (c) 2020 Gitpod GmbH. All rights reserved.
// Licensed under the GNU Affero General Public License (AGPL).
// See License.AGPL.txt in the project root for license information.
package daemon
import (
"context"
"github.com/gitpod-io/gitpod/ws-daemon/pkg/cgroup"
"github.com/gitpod-io/gitpod/ws-daemon/pkg/container"
"github.com/gitpod-io/gitpod/ws-daemon/pkg/content"
"github.com/gitpod-io/gitpod/ws-daemon/pkg/cpulimit"
"github.com/gitpod-io/gitpod/ws-daemon/pkg/diskguard"
"github.com/gitpod-io/gitpod/ws-daemon/pkg/hosts"
"github.com/gitpod-io/gitpod/ws-daemon/pkg/iws"
"github.com/gitpod-io/gitpod/ws-daemon/pkg/netlimit"
"k8s.io/apimachinery/pkg/api/resource"
)
// Config configures the workspace node daemon
type Config struct {
Runtime RuntimeConfig `json:"runtime"`
Content content.Config `json:"content"`
Uidmapper iws.UidmapperConfig `json:"uidmapper"`
CPULimit cpulimit.Config `json:"cpulimit"`
IOLimit IOLimitConfig `json:"ioLimit"`
ProcLimit int64 `json:"procLimit"`
NetLimit netlimit.Config `json:"netlimit"`
OOMScores cgroup.OOMScoreAdjConfig `json:"oomScores"`
Hosts hosts.Config `json:"hosts"`
DiskSpaceGuard diskguard.Config `json:"disk"`
WorkspaceController WorkspaceControllerConfig `json:"workspaceController"`
}
type WorkspaceControllerConfig struct {
Enabled bool `json:"enabled"`
WorkingAreaSuffix string `json:"workingAreaSuffix"`
}
type RuntimeConfig struct {
Container *container.Config `json:"containerRuntime"`
Kubeconfig string `json:"kubeconfig"`
KubernetesNamespace string `json:"namespace"`
}
type IOLimitConfig struct {
WriteBWPerSecond resource.Quantity `json:"writeBandwidthPerSecond"`
ReadBWPerSecond resource.Quantity `json:"readBandwidthPerSecond"`
WriteIOPS int64 `json:"writeIOPS"`
ReadIOPS int64 `json:"readIOPS"`
}
type ConfigReloader interface {
ReloadConfig(context.Context, *Config) error
}
type ConfigReloaderFunc func(context.Context, *Config) error
func (f ConfigReloaderFunc) ReloadConfig(ctx context.Context, cfg *Config) error {
return f(ctx, cfg)
}
type CompositeConfigReloader []ConfigReloader
func (cs CompositeConfigReloader) ReloadConfig(ctx context.Context, cfg *Config) error {
for _, c := range cs {
err := c.ReloadConfig(ctx, cfg)
if err != nil {
return err
}
if err := ctx.Err(); err != nil {
return err
}
}
return nil
}