From 8219dcdee8289dd51d38bd1cd2b77df1f0a7d068 Mon Sep 17 00:00:00 2001 From: Sanne Raymaekers Date: Fri, 13 May 2022 13:35:43 +0200 Subject: [PATCH] osbuild-service-maintenance: Explicitly enable maintenance parts Stage and production share the GCP account. To avoid trying to delete each GCP image twice, the maintenance script needs the ability to selectively disable certain parts based on the config. --- cmd/osbuild-service-maintenance/config.go | 15 ++++++++++----- cmd/osbuild-service-maintenance/main.go | 15 +++++++++++++-- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/cmd/osbuild-service-maintenance/config.go b/cmd/osbuild-service-maintenance/config.go index 5caedf916..4fd6b4381 100644 --- a/cmd/osbuild-service-maintenance/config.go +++ b/cmd/osbuild-service-maintenance/config.go @@ -4,12 +4,16 @@ import ( "fmt" "os" "reflect" + "strconv" ) // Do not write this config to logs or stdout, it contains secrets! type Config struct { DryRun string `env:"DRY_RUN"` MaxConcurrentRequests string `env:"MAX_CONCURRENT_REQUESTS"` + EnableDBMaintenance bool `env:"ENABLE_DB_MAINTENANCE"` + EnableGCPMaintenance bool `env:"ENABLE_GCP_MAINTENANCE"` + EnableAWSMaintenance bool `env:"ENABLE_AWS_MAINTENANCE"` PGHost string `env:"PGHOST"` PGPort string `env:"PGPORT"` PGDatabase string `env:"PGDATABASE"` @@ -51,13 +55,14 @@ func LoadConfigFromEnv(intf interface{}) error { kind := fieldV.Kind() if ok { switch kind { - case reflect.Ptr: - if fieldT.Type.Elem().Kind() != reflect.String { - return fmt.Errorf("Unsupported type") - } - fieldV.Set(reflect.ValueOf(&confV)) case reflect.String: fieldV.SetString(confV) + case reflect.Bool: + value, err := strconv.ParseBool(confV) + if err != nil { + return err + } + fieldV.SetBool(value) default: return fmt.Errorf("Unsupported type") } diff --git a/cmd/osbuild-service-maintenance/main.go b/cmd/osbuild-service-maintenance/main.go index 8f2e6b25d..47e3fb154 100644 --- a/cmd/osbuild-service-maintenance/main.go +++ b/cmd/osbuild-service-maintenance/main.go @@ -26,6 +26,7 @@ func main() { if err != nil { panic(err) } + maxCReqs, err := strconv.Atoi(conf.MaxConcurrentRequests) if err != nil { panic(err) @@ -43,6 +44,11 @@ func main() { wg.Add(1) go func() { defer wg.Done() + if !conf.EnableAWSMaintenance { + logrus.Info("AWS maintenance not enabled, skipping") + return + } + logrus.Info("Cleaning up AWS") err := AWSCleanup(maxCReqs, dryRun, conf.AWSAccessKeyID, conf.AWSSecretAccessKey, "us-east-1", cutoff) if err != nil { @@ -53,6 +59,11 @@ func main() { wg.Add(1) go func() { defer wg.Done() + if !conf.EnableGCPMaintenance { + logrus.Info("GCP maintenance not enabled, skipping") + return + } + logrus.Info("Cleaning up GCP") var gcpConf GCPCredentialsConfig err := LoadConfigFromEnv(&gcpConf) @@ -81,8 +92,8 @@ func main() { wg.Wait() logrus.Info("🦀🦀🦀 cloud cleanup done 🦀🦀🦀") - if conf.PGHost == "" { - logrus.Info("🦀🦀🦀 db host not defined, skipping db cleanup 🦀🦀🦀") + if !conf.EnableDBMaintenance { + logrus.Info("🦀🦀🦀 DB maintenance not enabled, skipping 🦀🦀🦀") return }