github.com/kubeshop/testkube@v1.17.23/internal/config/config.go (about)

     1  package config
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/kelseyhightower/envconfig"
     7  )
     8  
     9  type Config struct {
    10  	APIServerPort                               string        `envconfig:"APISERVER_PORT" default:"8088"`
    11  	APIServerConfig                             string        `envconfig:"APISERVER_CONFIG" default:""`
    12  	APIServerFullname                           string        `envconfig:"APISERVER_FULLNAME" default:"testkube-api-server"`
    13  	APIMongoDSN                                 string        `envconfig:"API_MONGO_DSN" default:"mongodb://localhost:27017"`
    14  	APIMongoAllowTLS                            bool          `envconfig:"API_MONGO_ALLOW_TLS" default:"false"`
    15  	APIMongoSSLCert                             string        `envconfig:"API_MONGO_SSL_CERT" default:""`
    16  	APIMongoSSLCAFileKey                        string        `envconfig:"API_MONGO_SSL_CA_FILE_KEY" default:"sslCertificateAuthorityFile"`
    17  	APIMongoSSLClientFileKey                    string        `envconfig:"API_MONGO_SSL_CLIENT_FILE_KEY" default:"sslClientCertificateKeyFile"`
    18  	APIMongoSSLClientFilePass                   string        `envconfig:"API_MONGO_SSL_CLIENT_FILE_PASS_KEY" default:"sslClientCertificateKeyFilePassword"`
    19  	APIMongoAllowDiskUse                        bool          `envconfig:"API_MONGO_ALLOW_DISK_USE" default:"false"`
    20  	APIMongoDB                                  string        `envconfig:"API_MONGO_DB" default:"testkube"`
    21  	APIMongoDBType                              string        `envconfig:"API_MONGO_DB_TYPE" default:"mongo"`
    22  	SlackToken                                  string        `envconfig:"SLACK_TOKEN" default:""`
    23  	SlackConfig                                 string        `envconfig:"SLACK_CONFIG" default:""`
    24  	SlackTemplate                               string        `envconfig:"SLACK_TEMPLATE" default:""`
    25  	StorageEndpoint                             string        `envconfig:"STORAGE_ENDPOINT" default:"localhost:9000"`
    26  	StorageBucket                               string        `envconfig:"STORAGE_BUCKET" default:"testkube-logs"`
    27  	StorageExpiration                           int           `envconfig:"STORAGE_EXPIRATION"`
    28  	StorageAccessKeyID                          string        `envconfig:"STORAGE_ACCESSKEYID" default:""`
    29  	StorageSecretAccessKey                      string        `envconfig:"STORAGE_SECRETACCESSKEY" default:""`
    30  	StorageRegion                               string        `envconfig:"STORAGE_REGION" default:""`
    31  	StorageToken                                string        `envconfig:"STORAGE_TOKEN" default:""`
    32  	StorageSSL                                  bool          `envconfig:"STORAGE_SSL" default:"false"`
    33  	StorageSkipVerify                           bool          `envconfig:"STORAGE_SKIP_VERIFY" default:"false"`
    34  	StorageCertFile                             string        `envconfig:"STORAGE_CERT_FILE" default:""`
    35  	StorageKeyFile                              string        `envconfig:"STORAGE_KEY_FILE" default:""`
    36  	StorageCAFile                               string        `envconfig:"STORAGE_CA_FILE" default:""`
    37  	ScrapperEnabled                             bool          `envconfig:"SCRAPPERENABLED" default:"false"`
    38  	LogsBucket                                  string        `envconfig:"LOGS_BUCKET" default:""`
    39  	LogsStorage                                 string        `envconfig:"LOGS_STORAGE" default:""`
    40  	NatsURI                                     string        `envconfig:"NATS_URI" default:"nats://localhost:4222"`
    41  	NatsSecure                                  bool          `envconfig:"NATS_SECURE" default:"false"`
    42  	NatsSkipVerify                              bool          `envconfig:"NATS_SKIP_VERIFY" default:"false"`
    43  	NatsCertFile                                string        `envconfig:"NATS_CERT_FILE" default:""`
    44  	NatsKeyFile                                 string        `envconfig:"NATS_KEY_FILE" default:""`
    45  	NatsCAFile                                  string        `envconfig:"NATS_CA_FILE" default:""`
    46  	NatsConnectTimeout                          time.Duration `envconfig:"NATS_CONNECT_TIMEOUT" default:"5s"`
    47  	JobServiceAccountName                       string        `envconfig:"JOB_SERVICE_ACCOUNT_NAME" default:""`
    48  	JobTemplateFile                             string        `envconfig:"JOB_TEMPLATE_FILE" default:""`
    49  	DisableTestTriggers                         bool          `envconfig:"DISABLE_TEST_TRIGGERS" default:"false"`
    50  	TestkubeDefaultExecutors                    string        `envconfig:"TESTKUBE_DEFAULT_EXECUTORS" default:""`
    51  	TestkubeEnabledExecutors                    string        `envconfig:"TESTKUBE_ENABLED_EXECUTORS" default:""`
    52  	TestkubeTemplateJob                         string        `envconfig:"TESTKUBE_TEMPLATE_JOB" default:""`
    53  	TestkubeContainerTemplateJob                string        `envconfig:"TESTKUBE_CONTAINER_TEMPLATE_JOB" default:""`
    54  	TestkubeContainerTemplateScraper            string        `envconfig:"TESTKUBE_CONTAINER_TEMPLATE_SCRAPER" default:""`
    55  	TestkubeContainerTemplatePVC                string        `envconfig:"TESTKUBE_CONTAINER_TEMPLATE_PVC" default:""`
    56  	TestkubeTemplateSlavePod                    string        `envconfig:"TESTKUBE_TEMPLATE_SLAVE_POD" default:""`
    57  	TestkubeConfigDir                           string        `envconfig:"TESTKUBE_CONFIG_DIR" default:"config"`
    58  	TestkubeAnalyticsEnabled                    bool          `envconfig:"TESTKUBE_ANALYTICS_ENABLED" default:"false"`
    59  	TestkubeReadonlyExecutors                   bool          `envconfig:"TESTKUBE_READONLY_EXECUTORS" default:"false"`
    60  	TestkubeNamespace                           string        `envconfig:"TESTKUBE_NAMESPACE" default:"testkube"`
    61  	TestkubeOAuthClientID                       string        `envconfig:"TESTKUBE_OAUTH_CLIENTID" default:""`
    62  	TestkubeOAuthClientSecret                   string        `envconfig:"TESTKUBE_OAUTH_CLIENTSECRET" default:""`
    63  	TestkubeOAuthProvider                       string        `envconfig:"TESTKUBE_OAUTH_PROVIDER" default:""`
    64  	TestkubeOAuthScopes                         string        `envconfig:"TESTKUBE_OAUTH_SCOPES" default:""`
    65  	TestkubeProAPIKey                           string        `envconfig:"TESTKUBE_PRO_API_KEY" default:""`
    66  	TestkubeProURL                              string        `envconfig:"TESTKUBE_PRO_URL" default:""`
    67  	TestkubeProTLSInsecure                      bool          `envconfig:"TESTKUBE_PRO_TLS_INSECURE" default:"false"`
    68  	TestkubeProWorkerCount                      int           `envconfig:"TESTKUBE_PRO_WORKER_COUNT" default:"50"`
    69  	TestkubeProLogStreamWorkerCount             int           `envconfig:"TESTKUBE_PRO_LOG_STREAM_WORKER_COUNT" default:"25"`
    70  	TestkubeProWorkflowNotificationsWorkerCount int           `envconfig:"TESTKUBE_PRO_WORKFLOW_NOTIFICATIONS_STREAM_WORKER_COUNT" default:"25"`
    71  	TestkubeProSkipVerify                       bool          `envconfig:"TESTKUBE_PRO_SKIP_VERIFY" default:"false"`
    72  	TestkubeProEnvID                            string        `envconfig:"TESTKUBE_PRO_ENV_ID" default:""`
    73  	TestkubeProOrgID                            string        `envconfig:"TESTKUBE_PRO_ORG_ID" default:""`
    74  	TestkubeProMigrate                          string        `envconfig:"TESTKUBE_PRO_MIGRATE" default:"false"`
    75  	TestkubeProConnectionTimeout                int           `envconfig:"TESTKUBE_PRO_CONNECTION_TIMEOUT" default:"10"`
    76  	TestkubeProCertFile                         string        `envconfig:"TESTKUBE_PRO_CERT_FILE" default:""`
    77  	TestkubeProKeyFile                          string        `envconfig:"TESTKUBE_PRO_KEY_FILE" default:""`
    78  	TestkubeProTLSSecret                        string        `envconfig:"TESTKUBE_PRO_TLS_SECRET" default:""`
    79  	TestkubeProRunnerCustomCASecret             string        `envconfig:"TESTKUBE_PRO_RUNNER_CUSTOM_CA_SECRET" default:""`
    80  	TestkubeWatcherNamespaces                   string        `envconfig:"TESTKUBE_WATCHER_NAMESPACES" default:""`
    81  	GraphqlPort                                 string        `envconfig:"TESTKUBE_GRAPHQL_PORT" default:"8070"`
    82  	TestkubeRegistry                            string        `envconfig:"TESTKUBE_REGISTRY" default:""`
    83  	TestkubePodStartTimeout                     time.Duration `envconfig:"TESTKUBE_POD_START_TIMEOUT" default:"30m"`
    84  	CDEventsTarget                              string        `envconfig:"CDEVENTS_TARGET" default:""`
    85  	TestkubeDashboardURI                        string        `envconfig:"TESTKUBE_DASHBOARD_URI" default:""`
    86  	DisableReconciler                           bool          `envconfig:"DISABLE_RECONCILER" default:"false"`
    87  	TestkubeClusterName                         string        `envconfig:"TESTKUBE_CLUSTER_NAME" default:""`
    88  	CompressArtifacts                           bool          `envconfig:"COMPRESSARTIFACTS" default:"false"`
    89  	TestkubeHelmchartVersion                    string        `envconfig:"TESTKUBE_HELMCHART_VERSION" default:""`
    90  	DebugListenAddr                             string        `envconfig:"DEBUG_LISTEN_ADDR" default:"0.0.0.0:1337"`
    91  	EnableDebugServer                           bool          `envconfig:"ENABLE_DEBUG_SERVER" default:"false"`
    92  	EnableSecretsEndpoint                       bool          `envconfig:"ENABLE_SECRETS_ENDPOINT" default:"false"`
    93  	DisableMongoMigrations                      bool          `envconfig:"DISABLE_MONGO_MIGRATIONS" default:"false"`
    94  	Debug                                       bool          `envconfig:"DEBUG" default:"false"`
    95  	EnableImageDataPersistentCache              bool          `envconfig:"TESTKUBE_ENABLE_IMAGE_DATA_PERSISTENT_CACHE" default:"false"`
    96  	ImageDataPersistentCacheKey                 string        `envconfig:"TESTKUBE_IMAGE_DATA_PERSISTENT_CACHE_KEY" default:"testkube-image-cache"`
    97  	LogServerGrpcAddress                        string        `envconfig:"LOG_SERVER_GRPC_ADDRESS" default:":9090"`
    98  	LogServerSecure                             bool          `envconfig:"LOG_SERVER_SECURE" default:"false"`
    99  	LogServerSkipVerify                         bool          `envconfig:"LOG_SERVER_SKIP_VERIFY" default:"false"`
   100  	LogServerCertFile                           string        `envconfig:"LOG_SERVER_CERT_FILE" default:""`
   101  	LogServerKeyFile                            string        `envconfig:"LOG_SERVER_KEY_FILE" default:""`
   102  	LogServerCAFile                             string        `envconfig:"LOG_SERVER_CA_FILE" default:""`
   103  	DisableSecretCreation                       bool          `envconfig:"DISABLE_SECRET_CREATION" default:"false"`
   104  	TestkubeExecutionNamespaces                 string        `envconfig:"TESTKUBE_EXECUTION_NAMESPACES" default:""`
   105  	TestkubeDefaultStorageClassName             string        `envconfig:"TESTKUBE_DEFAULT_STORAGE_CLASS_NAME" default:""`
   106  	GlobalWorkflowTemplateName                  string        `envconfig:"TESTKUBE_GLOBAL_WORKFLOW_TEMPLATE_NAME" default:""`
   107  
   108  	// DEPRECATED: Use TestkubeProAPIKey instead
   109  	TestkubeCloudAPIKey string `envconfig:"TESTKUBE_CLOUD_API_KEY" default:""`
   110  	// DEPRECATED: Use TestkubeProURL instead
   111  	TestkubeCloudURL string `envconfig:"TESTKUBE_CLOUD_URL" default:""`
   112  	// DEPRECATED: Use TestkubeProTLSInsecure instead
   113  	TestkubeCloudTLSInsecure bool `envconfig:"TESTKUBE_CLOUD_TLS_INSECURE" default:"false"`
   114  	// DEPRECATED: Use TestkubeProWorkerCount instead
   115  	TestkubeCloudWorkerCount int `envconfig:"TESTKUBE_CLOUD_WORKER_COUNT" default:"50"`
   116  	// DEPRECATED: Use TestkubeProLogStreamWorkerCount instead
   117  	TestkubeCloudLogStreamWorkerCount int `envconfig:"TESTKUBE_CLOUD_LOG_STREAM_WORKER_COUNT" default:"25"`
   118  	// DEPRECATED: Use TestkubeProEnvID instead
   119  	TestkubeCloudEnvID string `envconfig:"TESTKUBE_CLOUD_ENV_ID" default:""`
   120  	// DEPRECATED: Use TestkubeProOrgID instead
   121  	TestkubeCloudOrgID string `envconfig:"TESTKUBE_CLOUD_ORG_ID" default:""`
   122  	// DEPRECATED: Use TestkubeProMigrate instead
   123  	TestkubeCloudMigrate string `envconfig:"TESTKUBE_CLOUD_MIGRATE" default:"false"`
   124  
   125  	// TestkubeProCAFile is meant to provide a custom CA when making a TLS connection to
   126  	// the agent API.
   127  	//
   128  	// Deprecated: Instead mount a CA file into a directory and specify the diretory
   129  	// path with the SSL_CERT_DIR environment variable.
   130  	TestkubeProCAFile string `envconfig:"TESTKUBE_PRO_CA_FILE" default:""`
   131  }
   132  
   133  func Get() (*Config, error) {
   134  	config := Config{}
   135  	if err := envconfig.Process("config", &config); err != nil {
   136  		return nil, err
   137  	}
   138  	return &config, nil
   139  }
   140  
   141  // CleanLegacyVars configures new environment variables from the deprecated ones
   142  func (c *Config) CleanLegacyVars() {
   143  	if c.TestkubeProAPIKey == "" && c.TestkubeCloudAPIKey != "" {
   144  		c.TestkubeProAPIKey = c.TestkubeCloudAPIKey
   145  	}
   146  
   147  	if c.TestkubeProURL == "" && c.TestkubeCloudURL != "" {
   148  		c.TestkubeProURL = c.TestkubeCloudURL
   149  	}
   150  
   151  	if !c.TestkubeProTLSInsecure && c.TestkubeCloudTLSInsecure {
   152  		c.TestkubeProTLSInsecure = c.TestkubeCloudTLSInsecure
   153  	}
   154  
   155  	if c.TestkubeProWorkerCount == 0 && c.TestkubeCloudWorkerCount != 0 {
   156  		c.TestkubeProWorkerCount = c.TestkubeCloudWorkerCount
   157  	}
   158  
   159  	if c.TestkubeProLogStreamWorkerCount == 0 && c.TestkubeCloudLogStreamWorkerCount != 0 {
   160  		c.TestkubeProLogStreamWorkerCount = c.TestkubeCloudLogStreamWorkerCount
   161  	}
   162  
   163  	if c.TestkubeProEnvID == "" && c.TestkubeCloudEnvID != "" {
   164  		c.TestkubeProEnvID = c.TestkubeCloudEnvID
   165  	}
   166  
   167  	if c.TestkubeProOrgID == "" && c.TestkubeCloudOrgID != "" {
   168  		c.TestkubeProOrgID = c.TestkubeCloudOrgID
   169  	}
   170  
   171  	if c.TestkubeProMigrate == "" && c.TestkubeCloudMigrate != "" {
   172  		c.TestkubeProMigrate = c.TestkubeCloudMigrate
   173  	}
   174  }