2022-12-08 13:05:19 -03:00

120 lines
3.4 KiB
Go

// Copyright (c) 2021 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 config
import (
"os"
"github.com/gitpod-io/gitpod/common-go/baseserver"
)
// StorageConfig configures the remote storage we use
type StorageConfig struct {
// Stage represents the deployment environment in which we're operating
Stage Stage `json:"stage"`
// Kind determines the type of storage we ought to use
Kind RemoteStorageType `json:"kind"`
// GCloudConfig configures the Google Bucket remote storage
GCloudConfig GCPConfig `json:"gcloud,omitempty"`
// MinIOConfig configures the MinIO remote storage
MinIOConfig MinIOConfig `json:"minio,omitempty"`
BlobQuota int64 `json:"blobQuota"`
}
// Stage represents the deployment environment in which we're operating
type Stage string
const (
// StageProduction is the live environment in which our users live
StageProduction Stage = "prod"
// StageStaging is our staging environment which runs very closely to production (hence the name)
StageStaging Stage = "prodcopy"
// StageDevStaging is our local or branch-built development environment
StageDevStaging Stage = "dev"
)
// RemoteStorageType is a kind of storage where we persist/backup workspaces to
type RemoteStorageType string
const (
// GCloudStorage stores workspaces in GCloud buckets
GCloudStorage RemoteStorageType = "gcloud"
// MinIOStorage stores workspaces in a MinIO/S3 storage
MinIOStorage RemoteStorageType = "minio"
// NullStorage does not synchronize workspaces at all
NullStorage RemoteStorageType = ""
)
// GetStage reads the KUBE_STAGE envvar and maps its value to the storage stage naming
func getStageFromEnv() Stage {
// the stage does not have to be explicitly set in the storage config (as that would duplicate the
// info in our Helm values.yaml), but can be supplied as env var, as the default env vars in our
// Helm charts do.
stg := os.Getenv("KUBE_STAGE")
switch stg {
case "production":
return StageProduction
case "staging":
return StageStaging
default:
return StageDevStaging
}
}
// GetStage provides the storage stage from either this config or the environment
func (c *StorageConfig) GetStage() Stage {
if c.Stage == "" {
return getStageFromEnv()
}
return c.Stage
}
// GCPConfig controls the access to GCloud resources/buckets
type GCPConfig struct {
CredentialsFile string `json:"credentialsFile"`
Region string `json:"region"`
Project string `json:"projectId"`
}
// MinIOConfig MinIOconfigures the MinIO remote storage backend
type MinIOConfig struct {
Endpoint string `json:"endpoint"`
AccessKeyID string `json:"accessKey"`
AccessKeyIdFile string `json:"accessKeyFile"`
SecretAccessKey string `json:"secretKey"`
SecretAccessKeyFile string `json:"secretKeyFile"`
Secure bool `json:"secure,omitempty"`
Region string `json:"region"`
ParallelUpload uint `json:"parallelUpload,omitempty"`
BucketName string `json:"bucket,omitempty"`
}
type PProf struct {
Addr string `json:"address"`
}
// UsageReportConfig configures the upload of workspace instance usage reports
type UsageReportConfig struct {
BucketName string `json:"bucketName"`
}
type ServiceConfig struct {
Service baseserver.ServerConfiguration `json:"service"`
Storage StorageConfig `json:"storage"`
// Deprecated
_ UsageReportConfig `json:"usageReport"`
}