From 5fdced84d21fb18e3a25ed07b3537d9d27512013 Mon Sep 17 00:00:00 2001 From: Shailendra Patel Date: Thu, 9 Jan 2025 12:07:26 +0530 Subject: [PATCH] roachprod: refactor gcp environment variable initialization Moved the initialization of default variables related to the GCP Project and DNS into the GCP provider Init function instead of initializing them during package initialization. Setting default variables as global variables caused issues when environment variables are modified before calling Init. Epic: none Release note: None --- pkg/cmd/drtprod/cli/BUILD.bazel | 1 - pkg/cmd/drtprod/cli/handlers.go | 9 ++++----- pkg/roachprod/vm/gce/dns.go | 6 +++++- pkg/roachprod/vm/gce/gcloud.go | 15 +++++++++++---- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/pkg/cmd/drtprod/cli/BUILD.bazel b/pkg/cmd/drtprod/cli/BUILD.bazel index f840cc3eb40f..10a3c741834a 100644 --- a/pkg/cmd/drtprod/cli/BUILD.bazel +++ b/pkg/cmd/drtprod/cli/BUILD.bazel @@ -11,7 +11,6 @@ go_library( deps = [ "//pkg/cmd/drtprod/cli/commands", "//pkg/cmd/roachprod/cli", - "//pkg/roachprod", "@com_github_spf13_cobra//:cobra", ], ) diff --git a/pkg/cmd/drtprod/cli/handlers.go b/pkg/cmd/drtprod/cli/handlers.go index f24d60a1257f..eeafc629efe0 100644 --- a/pkg/cmd/drtprod/cli/handlers.go +++ b/pkg/cmd/drtprod/cli/handlers.go @@ -11,20 +11,19 @@ import ( "github.com/cockroachdb/cockroach/pkg/cmd/drtprod/cli/commands" "github.com/cockroachdb/cockroach/pkg/cmd/roachprod/cli" - "github.com/cockroachdb/cockroach/pkg/roachprod" "github.com/spf13/cobra" ) -// Initialize sets up the environment and initializes the command-line interface. -func Initialize(ctx context.Context) { +func init() { // Set environment variables for the GCE project and DNS configurations. _ = os.Setenv("ROACHPROD_DNS", "drt.crdb.io") _ = os.Setenv("ROACHPROD_GCE_DNS_DOMAIN", "drt.crdb.io") _ = os.Setenv("ROACHPROD_GCE_DNS_ZONE", "drt") _ = os.Setenv("ROACHPROD_GCE_DEFAULT_PROJECT", "cockroach-drt") - // Initialize cloud providers for roachprod. - _ = roachprod.InitProviders() +} +// Initialize sets up the environment and initializes the command-line interface. +func Initialize(ctx context.Context) { // Disable command sorting in Cobra (command-line parser). cobra.EnableCommandSorting = false diff --git a/pkg/roachprod/vm/gce/dns.go b/pkg/roachprod/vm/gce/dns.go index 02143699c132..796495c75398 100644 --- a/pkg/roachprod/vm/gce/dns.go +++ b/pkg/roachprod/vm/gce/dns.go @@ -35,6 +35,10 @@ const ( ) var ( + dnsDefaultZone, dnsDefaultDomain, dnsDefaultManagedZone, dnsDefaultManagedDomain string +) + +func initDNSDefault() { dnsDefaultZone = config.EnvOrDefaultString( "ROACHPROD_GCE_DNS_ZONE", "roachprod", @@ -56,7 +60,7 @@ var ( "ROACHPROD_GCE_DNS_MANAGED_DOMAIN", "roachprod-managed.crdb.io", ) -) +} var ErrDNSOperation = fmt.Errorf("error during Google Cloud DNS operation") diff --git a/pkg/roachprod/vm/gce/gcloud.go b/pkg/roachprod/vm/gce/gcloud.go index 288baf64d628..92d1e9dbb992 100644 --- a/pkg/roachprod/vm/gce/gcloud.go +++ b/pkg/roachprod/vm/gce/gcloud.go @@ -64,6 +64,12 @@ const ( var providerInstance = &Provider{} var ( + defaultDefaultProject, defaultMetadataProject, defaultDNSProject, defaultDefaultServiceAccount string + // projects for which a cron GC job exists. + projectsWithGC []string +) + +func initGCEProjectDefaults() { defaultDefaultProject = config.EnvOrDefaultString( "ROACHPROD_GCE_DEFAULT_PROJECT", "cockroach-ephemeral", ) @@ -80,7 +86,8 @@ var ( "ROACHPROD_GCE_DEFAULT_SERVICE_ACCOUNT", "21965078311-compute@developer.gserviceaccount.com", ) -) + projectsWithGC = []string{defaultDefaultProject} +} // DefaultProject returns the default GCE project. This is used to determine whether // certain features, such as DNS names are enabled. @@ -93,9 +100,6 @@ func DefaultProject() string { return defaultDefaultProject } -// projects for which a cron GC job exists. -var projectsWithGC = []string{defaultDefaultProject} - // Denotes if this provider was successfully initialized. var initialized = false @@ -107,6 +111,9 @@ var initialized = false // Note that, when roachprod is used as a binary, the defaults for // providerInstance properties initialized here can be overriden by flags. func Init() error { + initGCEProjectDefaults() + initDNSDefault() + providerInstance.Projects = []string{defaultDefaultProject} projectFromEnv := os.Getenv("GCE_PROJECT") if projectFromEnv != "" {