From 543d59758a57562757e07664a594e679337b505c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Le=C3=AFla=20MARABESE?= Date: Tue, 10 Jan 2023 16:11:23 +0100 Subject: [PATCH] removed SCW_DEFAULT_REGION and SCW_DEFAULT_ZONE env vars --- Makefile | 2 +- hack/update-expected.sh | 2 +- nodeup/pkg/bootstrap/install.go | 2 -- nodeup/pkg/model/protokube.go | 2 -- pkg/model/bootstrapscript.go | 12 ----------- protokube/pkg/protokube/scaleway_volumes.go | 7 +++++++ upup/pkg/fi/cloudup/scaleway/cloud.go | 11 +++++----- upup/pkg/fi/cloudup/scaleway/utils.go | 23 +++++++++++++++++++++ upup/pkg/fi/cloudup/template_functions.go | 18 ++++++++++++++++ upup/pkg/fi/cloudup/utils.go | 17 +++++++++++++-- util/pkg/env/standard.go | 2 -- 11 files changed, 70 insertions(+), 28 deletions(-) diff --git a/Makefile b/Makefile index 8d708618c7..1f65a1bd75 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ UPLOAD_CMD=$(KOPS_ROOT)/hack/upload ${UPLOAD_ARGS} # Unexport environment variables that can affect tests and are not used in builds unexport AWS_ACCESS_KEY_ID AWS_REGION AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN CNI_VERSION_URL DNS_IGNORE_NS_CHECK DNSCONTROLLER_IMAGE DO_ACCESS_TOKEN GOOGLE_APPLICATION_CREDENTIALS unexport KOPS_BASE_URL KOPS_CLUSTER_NAME KOPS_RUN_OBSOLETE_VERSION KOPS_STATE_STORE KOPS_STATE_S3_ACL KUBE_API_VERSIONS NODEUP_URL OPENSTACK_CREDENTIAL_FILE SKIP_PACKAGE_UPDATE -unexport SKIP_REGION_CHECK S3_ACCESS_KEY_ID S3_ENDPOINT S3_REGION S3_SECRET_ACCESS_KEY HCLOUD_TOKEN SCW_ACCESS_KEY SCW_SECRET_KEY SCW_DEFAULT_PROJECT_ID SCW_DEFAULT_REGION SCW_DEFAULT_ZONE +unexport SKIP_REGION_CHECK S3_ACCESS_KEY_ID S3_ENDPOINT S3_REGION S3_SECRET_ACCESS_KEY HCLOUD_TOKEN SCW_ACCESS_KEY SCW_SECRET_KEY SCW_DEFAULT_PROJECT_ID unexport AZURE_CLIENT_ID AZURE_CLIENT_SECRET AZURE_STORAGE_ACCOUNT AZURE_STORAGE_KEY AZURE_SUBSCRIPTION_ID AZURE_TENANT_ID diff --git a/hack/update-expected.sh b/hack/update-expected.sh index 2dbae43149..56833c35eb 100755 --- a/hack/update-expected.sh +++ b/hack/update-expected.sh @@ -30,7 +30,7 @@ unset KOPS_BASE_URL DNSCONTROLLER_IMAGE KOPSCONTROLLER_IMAGE KUBE_APISERVER_HEAL unset AWS_ACCESS_KEY_ID AWS_REGION AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN CNI_VERSION_URL DNS_IGNORE_NS_CHECK DO_ACCESS_TOKEN GOOGLE_APPLICATION_CREDENTIALS HCLOUD_TOKEN unset KOPS_CLUSTER_NAME KOPS_RUN_OBSOLETE_VERSION KOPS_STATE_STORE KOPS_STATE_S3_ACL KUBE_API_VERSIONS NODEUP_URL OPENSTACK_CREDENTIAL_FILE PROTOKUBE_IMAGE SKIP_PACKAGE_UPDATE unset SKIP_REGION_CHECK S3_ACCESS_KEY_ID S3_ENDPOINT S3_REGION S3_SECRET_ACCESS_KEY -unset SCW_ACCESS_KEY SCW_SECRET_KEY SCW_DEFAULT_PROJECT_ID SCW_DEFAULT_REGION SCW_DEFAULT_ZONE +unset SCW_ACCESS_KEY SCW_SECRET_KEY SCW_DEFAULT_PROJECT_ID unset AZURE_CLIENT_ID AZURE_CLIENT_SECRET AZURE_STORAGE_ACCOUNT AZURE_STORAGE_KEY AZURE_SUBSCRIPTION_ID AZURE_TENANT_ID # Run the tests in "autofix mode" diff --git a/nodeup/pkg/bootstrap/install.go b/nodeup/pkg/bootstrap/install.go index dd7a050d77..bb0c29a66a 100644 --- a/nodeup/pkg/bootstrap/install.go +++ b/nodeup/pkg/bootstrap/install.go @@ -137,8 +137,6 @@ func (i *Installation) buildEnvFile() *nodetasks.InstallFile { envVars["SCW_ACCESS_KEY"] = os.Getenv("SCW_ACCESS_KEY") envVars["SCW_SECRET_KEY"] = os.Getenv("SCW_SECRET_KEY") envVars["SCW_DEFAULT_PROJECT_ID"] = os.Getenv("SCW_DEFAULT_PROJECT_ID") - envVars["SCW_DEFAULT_REGION"] = os.Getenv("SCW_DEFAULT_REGION") - envVars["SCW_DEFAULT_ZONE"] = os.Getenv("SCW_DEFAULT_ZONE") } sysconfig := "" diff --git a/nodeup/pkg/model/protokube.go b/nodeup/pkg/model/protokube.go index 0e92cb34b8..a27184e269 100644 --- a/nodeup/pkg/model/protokube.go +++ b/nodeup/pkg/model/protokube.go @@ -297,8 +297,6 @@ func (t *ProtokubeBuilder) buildEnvFile() (*nodetasks.File, error) { envVars["SCW_ACCESS_KEY"] = os.Getenv("SCW_ACCESS_KEY") envVars["SCW_SECRET_KEY"] = os.Getenv("SCW_SECRET_KEY") envVars["SCW_DEFAULT_PROJECT_ID"] = os.Getenv("SCW_DEFAULT_PROJECT_ID") - envVars["SCW_DEFAULT_REGION"] = os.Getenv("SCW_DEFAULT_REGION") - envVars["SCW_DEFAULT_ZONE"] = os.Getenv("SCW_DEFAULT_ZONE") } for _, envVar := range proxy.GetProxyEnvVars(t.Cluster.Spec.Networking.EgressProxy) { diff --git a/pkg/model/bootstrapscript.go b/pkg/model/bootstrapscript.go index f7e01277f0..3a53549c6f 100644 --- a/pkg/model/bootstrapscript.go +++ b/pkg/model/bootstrapscript.go @@ -32,7 +32,6 @@ import ( "k8s.io/kops/upup/pkg/fi/utils" "sigs.k8s.io/yaml" - "github.com/scaleway/scaleway-sdk-go/scw" "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/apis/nodeup" "k8s.io/kops/pkg/model/resources" @@ -213,15 +212,6 @@ func (b *BootstrapScript) buildEnvironmentVariables(cluster *kops.Cluster) (map[ if cluster.Spec.GetCloudProvider() == kops.CloudProviderScaleway { errList := []error(nil) - region, err := scw.ParseRegion(os.Getenv("SCW_DEFAULT_REGION")) - if err != nil { - errList = append(errList, fmt.Errorf("error parsing SCW_DEFAULT_REGION: %w", err)) - } - zone, err := scw.ParseZone(os.Getenv("SCW_DEFAULT_ZONE")) - if err != nil { - errList = append(errList, fmt.Errorf("error parsing SCW_DEFAULT_ZONE: %w", err)) - } - // We make sure that the credentials env vars are defined scwAccessKey := os.Getenv("SCW_ACCESS_KEY") if scwAccessKey == "" { @@ -241,8 +231,6 @@ func (b *BootstrapScript) buildEnvironmentVariables(cluster *kops.Cluster) (map[ return nil, errors.NewAggregate(errList) } - env["SCW_DEFAULT_REGION"] = string(region) - env["SCW_DEFAULT_ZONE"] = string(zone) env["SCW_ACCESS_KEY"] = scwAccessKey env["SCW_SECRET_KEY"] = scwSecretKey env["SCW_DEFAULT_PROJECT_ID"] = scwProjectID diff --git a/protokube/pkg/protokube/scaleway_volumes.go b/protokube/pkg/protokube/scaleway_volumes.go index 77f43671c4..27565da145 100644 --- a/protokube/pkg/protokube/scaleway_volumes.go +++ b/protokube/pkg/protokube/scaleway_volumes.go @@ -57,12 +57,19 @@ func NewScwCloudProvider() (*ScwCloudProvider, error) { } klog.V(4).Infof("Found zone of the running server: %v", zone) + region, err := scaleway.ParseRegionFromZone(zone) + if err != nil { + return nil, fmt.Errorf("unable to parse Scaleway region: %s", err) + } + klog.V(4).Infof("Found region of the running server: %v", region) + privateIP := metadata.PrivateIP klog.V(4).Infof("Found first private net IP of the running server: %q", privateIP) scwClient, err := scw.NewClient( scw.WithUserAgent(scaleway.KopsUserAgentPrefix+kopsv.Version), scw.WithEnv(), + scw.WithDefaultRegion(region), scw.WithDefaultZone(zone), ) if err != nil { diff --git a/upup/pkg/fi/cloudup/scaleway/cloud.go b/upup/pkg/fi/cloudup/scaleway/cloud.go index 29ac2b6ec1..8435c62de3 100644 --- a/upup/pkg/fi/cloudup/scaleway/cloud.go +++ b/upup/pkg/fi/cloudup/scaleway/cloud.go @@ -89,18 +89,17 @@ type scwCloudImplementation struct { instanceAPI *instance.API } -// NewScwCloud returns a Cloud with a Scaleway Client using the env vars SCW_ACCESS_KEY, SCW_SECRET_KEY, -// SCW_DEFAULT_PROJECT_ID, SCW_DEFAULT_REGION and SCW_DEFAULT_ZONE +// NewScwCloud returns a Cloud with a Scaleway Client using the env vars SCW_ACCESS_KEY, SCW_SECRET_KEY and SCW_DEFAULT_PROJECT_ID func NewScwCloud(tags map[string]string) (ScwCloud, error) { errList := []error(nil) - region, err := scw.ParseRegion(os.Getenv("SCW_DEFAULT_REGION")) + region, err := scw.ParseRegion(tags["region"]) if err != nil { - errList = append(errList, fmt.Errorf("error parsing SCW_DEFAULT_REGION: %w", err)) + errList = append(errList, fmt.Errorf("error parsing Scaleway region: %w", err)) } - zone, err := scw.ParseZone(os.Getenv("SCW_DEFAULT_ZONE")) + zone, err := scw.ParseZone(tags["zone"]) if err != nil { - errList = append(errList, fmt.Errorf("error parsing SCW_DEFAULT_ZONE: %w", err)) + errList = append(errList, fmt.Errorf("error parsing Scaleway zone: %w", err)) } // We make sure that the credentials env vars are defined diff --git a/upup/pkg/fi/cloudup/scaleway/utils.go b/upup/pkg/fi/cloudup/scaleway/utils.go index 1ab8d88115..d1775d510d 100644 --- a/upup/pkg/fi/cloudup/scaleway/utils.go +++ b/upup/pkg/fi/cloudup/scaleway/utils.go @@ -18,9 +18,12 @@ package scaleway import ( "errors" + "fmt" "net/http" + "strings" "github.com/scaleway/scaleway-sdk-go/scw" + "k8s.io/kops/pkg/apis/kops" ) // isHTTPCodeError returns true if err is an http error with code statusCode @@ -41,3 +44,23 @@ func is404Error(err error) bool { notFoundError := &scw.ResourceNotFoundError{} return isHTTPCodeError(err, http.StatusNotFound) || errors.As(err, ¬FoundError) } + +func ParseZoneFromClusterSpec(clusterSpec kops.ClusterSpec) (scw.Zone, error) { + zone := "" + for _, subnet := range clusterSpec.Networking.Subnets { + if zone == "" { + zone = subnet.Zone + } else if zone != subnet.Zone { + return "", fmt.Errorf("scaleway currently only supports clusters in the same zone") + } + } + return scw.Zone(zone), nil +} + +func ParseRegionFromZone(zone scw.Zone) (region scw.Region, err error) { + region, err = scw.ParseRegion(strings.TrimRight(string(zone), "-123")) + if err != nil { + return "", fmt.Errorf("could not determine region from zone %s: %w", zone, err) + } + return region, nil +} diff --git a/upup/pkg/fi/cloudup/template_functions.go b/upup/pkg/fi/cloudup/template_functions.go index 0533f411e3..882419014c 100644 --- a/upup/pkg/fi/cloudup/template_functions.go +++ b/upup/pkg/fi/cloudup/template_functions.go @@ -66,6 +66,7 @@ import ( gcetpm "k8s.io/kops/upup/pkg/fi/cloudup/gce/tpm" "k8s.io/kops/upup/pkg/fi/cloudup/hetzner" "k8s.io/kops/upup/pkg/fi/cloudup/openstack" + "k8s.io/kops/upup/pkg/fi/cloudup/scaleway" "k8s.io/kops/util/pkg/env" "sigs.k8s.io/yaml" ) @@ -190,6 +191,23 @@ func (tf *TemplateFunctions) AddTo(dest template.FuncMap, secretStore fi.SecretS return "[global]\n" + strings.Join(lines, "\n") + "\n" } + dest["SCW_ACCESS_KEY"] = func() string { + return os.Getenv("SCW_ACCESS_KEY") + } + dest["SCW_SECRET_KEY"] = func() string { + return os.Getenv("SCW_SECRET_KEY") + } + dest["SCW_DEFAULT_PROJECT_ID"] = func() string { + return os.Getenv("SCW_DEFAULT_PROJECT_ID") + } + dest["SCW_DEFAULT_REGION"] = func() string { + return tf.cloud.Region() + } + dest["SCW_DEFAULT_ZONE"] = func() string { + scwCloud := tf.cloud.(scaleway.ScwCloud) + return scwCloud.Zone() + } + if featureflag.Spotinst.Enabled() { if creds, err := spotinst.LoadCredentials(); err == nil { dest["SpotinstToken"] = func() string { return creds.Token } diff --git a/upup/pkg/fi/cloudup/utils.go b/upup/pkg/fi/cloudup/utils.go index faa37cee5f..f2212714b0 100644 --- a/upup/pkg/fi/cloudup/utils.go +++ b/upup/pkg/fi/cloudup/utils.go @@ -163,11 +163,24 @@ func BuildCloud(cluster *kops.Cluster) (fi.Cloud, error) { } case kops.CloudProviderScaleway: { - cloudTags := map[string]string{scaleway.TagClusterName: cluster.ObjectMeta.Name} + zone, err := scaleway.ParseZoneFromClusterSpec(cluster.Spec) + if err != nil { + return nil, fmt.Errorf("error initializing Scaleway cloud: %w", err) + } + region, err := scaleway.ParseRegionFromZone(zone) + if err != nil { + return nil, fmt.Errorf("error initializing Scaleway cloud: %w", err) + } + + cloudTags := map[string]string{ + scaleway.TagClusterName: cluster.ObjectMeta.Name, + "zone": string(zone), + "region": string(region), + } scwCloud, err := scaleway.NewScwCloud(cloudTags) if err != nil { - return nil, fmt.Errorf("error initializing scaleway cloud: %s", err) + return nil, fmt.Errorf("error initializing Scaleway cloud: %w", err) } cloud = scwCloud diff --git a/util/pkg/env/standard.go b/util/pkg/env/standard.go index a679998a73..41f97a03c5 100644 --- a/util/pkg/env/standard.go +++ b/util/pkg/env/standard.go @@ -76,8 +76,6 @@ func BuildSystemComponentEnvVars(spec *kops.ClusterSpec) EnvVars { vars.addEnvVariableIfExist("SCW_ACCESS_KEY") vars.addEnvVariableIfExist("SCW_SECRET_KEY") vars.addEnvVariableIfExist("SCW_DEFAULT_PROJECT_ID") - vars.addEnvVariableIfExist("SCW_DEFAULT_REGION") - vars.addEnvVariableIfExist("SCW_DEFAULT_ZONE") return vars }