From bd96969bcfefbe0c9f38df72839573a7da6ea1a5 Mon Sep 17 00:00:00 2001 From: ShobhitSingh11 Date: Wed, 28 Aug 2024 14:25:14 +0530 Subject: [PATCH 1/3] fix: [CI-14032]: Add option to specify Amazon EC2 instance metadata accessiblity --- cmd/drone-autoscaler/main.go | 1 + config/config.go | 1 + drivers/amazon/create.go | 6 ++++++ drivers/amazon/option.go | 7 +++++++ drivers/amazon/provider.go | 1 + 5 files changed, 16 insertions(+) diff --git a/cmd/drone-autoscaler/main.go b/cmd/drone-autoscaler/main.go index 6df0313..5d60dfd 100644 --- a/cmd/drone-autoscaler/main.go +++ b/cmd/drone-autoscaler/main.go @@ -322,6 +322,7 @@ func setupProvider(c config.Config) (autoscaler.Provider, error) { amazon.WithVolumeThroughput(c.Amazon.VolumeThroughput), amazon.WithIamProfileArn(c.Amazon.IamProfileArn), amazon.WithMarketType(c.Amazon.MarketType), + amazon.WithInstanceMetadataTokens(c.Amazon.IMDSTokens), ), nil case os.Getenv("OS_USERNAME") != "": return openstack.New( diff --git a/config/config.go b/config/config.go index 95ace89..8764dc0 100644 --- a/config/config.go +++ b/config/config.go @@ -145,6 +145,7 @@ type ( VolumeThroughput int64 `envconfig:"DRONE_AMAZON_VOLUME_THROUGHPUT"` IamProfileArn string `envconfig:"DRONE_AMAZON_IAM_PROFILE_ARN"` MarketType string `envconfig:"DRONE_AMAZON_MARKET_TYPE"` + IMDSTokens string `envconfig:"DRONE_AMAZON_IMDS_TOKENS"` } DigitalOcean struct { diff --git a/drivers/amazon/create.go b/drivers/amazon/create.go index 89d3f43..b62a872 100644 --- a/drivers/amazon/create.go +++ b/drivers/amazon/create.go @@ -139,6 +139,12 @@ func (p *provider) create(ctx context.Context, opts autoscaler.InstanceCreateOpt }, } + if p.imdsTokens != "" { + in.MetadataOptions = &ec2.InstanceMetadataOptionsRequest{ + HttpTokens: aws.String(p.imdsTokens), + } + } + if p.volumeType == "io1" || p.volumeType == "io2" || p.volumeType == "gp3" { for _, blockDeviceMapping := range in.BlockDeviceMappings { if p.volumeIops > 0 { diff --git a/drivers/amazon/option.go b/drivers/amazon/option.go index 6684dfe..e7908dc 100644 --- a/drivers/amazon/option.go +++ b/drivers/amazon/option.go @@ -152,6 +152,13 @@ func WithIamProfileArn(t string) Option { } } +// WithInstanceMetadataTokens returns an option to set the instance metadata service tokens requiment. +func WithInstanceMetadataTokens(t string) Option { + return func(p *provider) { + p.imdsTokens = t + } +} + // WithMarketType returns an option to set the instance market type. func WithMarketType(t string) Option { return func(p *provider) { diff --git a/drivers/amazon/provider.go b/drivers/amazon/provider.go index 62234a8..31cc46d 100644 --- a/drivers/amazon/provider.go +++ b/drivers/amazon/provider.go @@ -37,6 +37,7 @@ type provider struct { tags map[string]string iamProfileArn string spotInstance bool + imdsTokens string } func (p *provider) getClient() *ec2.EC2 { From 04fc605185a421ae21df31f90ee71b72f7bcaac4 Mon Sep 17 00:00:00 2001 From: ShobhitSingh11 Date: Wed, 28 Aug 2024 15:28:58 +0530 Subject: [PATCH 2/3] fix: [CI-14032]: Comments resolved --- drivers/amazon/create.go | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/amazon/create.go b/drivers/amazon/create.go index b62a872..2193215 100644 --- a/drivers/amazon/create.go +++ b/drivers/amazon/create.go @@ -100,6 +100,13 @@ func (p *provider) create(ctx context.Context, opts autoscaler.InstanceCreateOpt tags := createCopy(p.tags) tags["Name"] = opts.Name + var metadataOptions *ec2.InstanceMetadataOptionsRequest + if p.imdsTokens != "" { + metadataOptions = &ec2.InstanceMetadataOptionsRequest{ + HttpTokens: aws.String(p.imdsTokens), + } + } + in := &ec2.RunInstancesInput{ KeyName: aws.String(p.key), ImageId: aws.String(p.image), @@ -109,6 +116,7 @@ func (p *provider) create(ctx context.Context, opts autoscaler.InstanceCreateOpt InstanceMarketOptions: marketOptions, IamInstanceProfile: iamProfile, UserData: aws.String(base64.StdEncoding.EncodeToString(buf.Bytes())), + MetadataOptions: metadataOptions, NetworkInterfaces: []*ec2.InstanceNetworkInterfaceSpecification{ { AssociatePublicIpAddress: aws.Bool(!p.privateIP), @@ -139,11 +147,11 @@ func (p *provider) create(ctx context.Context, opts autoscaler.InstanceCreateOpt }, } - if p.imdsTokens != "" { - in.MetadataOptions = &ec2.InstanceMetadataOptionsRequest{ - HttpTokens: aws.String(p.imdsTokens), - } - } + // if p.imdsTokens != "" { + // in.MetadataOptions = &ec2.InstanceMetadataOptionsRequest{ + // HttpTokens: aws.String(p.imdsTokens), + // } + // } if p.volumeType == "io1" || p.volumeType == "io2" || p.volumeType == "gp3" { for _, blockDeviceMapping := range in.BlockDeviceMappings { From bf6c82e4612d340ec49579670c9600fc28a1fee2 Mon Sep 17 00:00:00 2001 From: ShobhitSingh11 Date: Wed, 28 Aug 2024 15:30:28 +0530 Subject: [PATCH 3/3] fix: [CI-14032]: refractor --- drivers/amazon/create.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/drivers/amazon/create.go b/drivers/amazon/create.go index 2193215..4e84859 100644 --- a/drivers/amazon/create.go +++ b/drivers/amazon/create.go @@ -147,12 +147,6 @@ func (p *provider) create(ctx context.Context, opts autoscaler.InstanceCreateOpt }, } - // if p.imdsTokens != "" { - // in.MetadataOptions = &ec2.InstanceMetadataOptionsRequest{ - // HttpTokens: aws.String(p.imdsTokens), - // } - // } - if p.volumeType == "io1" || p.volumeType == "io2" || p.volumeType == "gp3" { for _, blockDeviceMapping := range in.BlockDeviceMappings { if p.volumeIops > 0 {