From 37fb52f0a5b3d3ce154e80813f15c2251ac34cbe Mon Sep 17 00:00:00 2001 From: Marc Wickenden Date: Tue, 31 Oct 2023 12:45:05 +0000 Subject: [PATCH] Fix hard-coded region on EKS shell script parsing --- pkg/eks/eks.go | 12 ++++++++---- pkg/eks/metadata.go | 8 ++++---- pkg/eks/userdata.go | 6 +++--- pkg/eks/userdata_test.go | 4 ++-- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/pkg/eks/eks.go b/pkg/eks/eks.go index cdc89ca..dee8c35 100644 --- a/pkg/eks/eks.go +++ b/pkg/eks/eks.go @@ -20,8 +20,6 @@ import ( "github.com/4armed/kubeletmein/pkg/common" "github.com/4armed/kubeletmein/pkg/config" - "github.com/aws/aws-sdk-go/aws/ec2metadata" - "github.com/aws/aws-sdk-go/aws/session" "github.com/kubicorn/kubicorn/pkg/logger" "k8s.io/client-go/tools/clientcmd" ) @@ -77,13 +75,19 @@ func Generate(c *config.Config) error { // At the moment we have these calls here which ignore the functions in // metadata.go completely. func getUserData() (string, error) { - md := ec2metadata.New(session.New()) + md, err := NewEC2MetadataClient() + if err != nil { + return "", err + } return md.GetUserData() } func getRegion() (string, error) { - md := ec2metadata.New(session.New()) + md, err := NewEC2MetadataClient() + if err != nil { + return "", err + } return md.Region() } diff --git a/pkg/eks/metadata.go b/pkg/eks/metadata.go index 21963f2..f9bc13e 100644 --- a/pkg/eks/metadata.go +++ b/pkg/eks/metadata.go @@ -7,7 +7,7 @@ import ( // EC2MetadataClient interface type EC2MetadataClient struct { - *ec2metadata.EC2Metadata + client *ec2metadata.EC2Metadata } // NewEC2MetadataClient instantiates an EC2 Metadata client @@ -18,19 +18,19 @@ func NewEC2MetadataClient() (*EC2MetadataClient, error) { } md := ec2metadata.New(sess) - return &EC2MetadataClient{md}, nil + return &EC2MetadataClient{client: md}, nil } // GetUserData wraps the the AWS EC2 Metadata call // This is all so we can mock it. There has to be a better way but // the AWS Go SDK seems...a bit rubbish. func (c *EC2MetadataClient) GetUserData() (string, error) { - return c.GetUserData() + return c.client.GetUserData() } // Region wraps the the AWS EC2 Region call // This is all so we can mock it. There has to be a better way but // the AWS Go SDK seems...a bit rubbish. func (c *EC2MetadataClient) Region() (string, error) { - return c.Region() + return c.client.Region() } diff --git a/pkg/eks/userdata.go b/pkg/eks/userdata.go index faed56f..f06cbbe 100644 --- a/pkg/eks/userdata.go +++ b/pkg/eks/userdata.go @@ -61,7 +61,7 @@ func ParseUserData(userData, region string) (*clientcmdapi.Config, error) { } } else { logger.Debug("shell script assuming, looking for /etc/eks/bootstrap.sh") - kubeConfigData, err = ParseShellScript(userData) + kubeConfigData, err = ParseShellScript(userData, region) if err != nil { return nil, err } @@ -185,7 +185,7 @@ func ParseCloudConfig(cloudConfig []byte, region string) (*clientcmdapi.Config, } // ParseShellScript parses shell-script format user-data seen on managed nodegroups -func ParseShellScript(userData string) (*clientcmdapi.Config, error) { +func ParseShellScript(userData string, region string) (*clientcmdapi.Config, error) { // We must account for all arguments to bootstrap.sh in order to find the non-flag based cluster name // https://github.com/awslabs/amazon-eks-ami/blob/master/files/bootstrap.sh @@ -267,7 +267,7 @@ func ParseShellScript(userData string) (*clientcmdapi.Config, error) { "--cluster-name", clusterName, "--region", - "eu-west-1", + region, }, Env: []clientcmdapi.ExecEnvVar{ { diff --git a/pkg/eks/userdata_test.go b/pkg/eks/userdata_test.go index 4bcbbe9..f386ecc 100644 --- a/pkg/eks/userdata_test.go +++ b/pkg/eks/userdata_test.go @@ -69,7 +69,7 @@ func TestParseShellScriptManagementConsole(t *testing.T) { t.Errorf("err: %v", err) } - kubeConfig, err := ParseShellScript(string(userData)) + kubeConfig, err := ParseShellScript(string(userData), "eu-west-1") if err != nil { t.Errorf("err: %v", err) } @@ -86,7 +86,7 @@ func TestParseShellScriptCustom(t *testing.T) { t.Errorf("err: %v", err) } - kubeConfig, err := ParseShellScript(string(userData)) + kubeConfig, err := ParseShellScript(string(userData), "eu-west-1") if err != nil { t.Errorf("err: %v", err) }