Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions cmd/fix/dr_oidc_iam.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (
"github.com/openshift/hypershift/support/infraid"
"github.com/openshift/hypershift/support/oidc"

awsv2 "github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/iam"
"github.com/aws/aws-sdk-go-v2/service/s3"
s3types "github.com/aws/aws-sdk-go-v2/service/s3/types"
Expand Down Expand Up @@ -219,7 +219,7 @@ func (o *DrOidcIamOptions) validate() error {
return nil
}

func (o *DrOidcIamOptions) getAWSConfig(ctx context.Context, agent string, region string) (*awsv2.Config, error) {
func (o *DrOidcIamOptions) getAWSConfig(ctx context.Context, agent string, region string) (*aws.Config, error) {
if o.AWSCredentialsFile != "" {
if _, err := os.Stat(o.AWSCredentialsFile); err != nil {
return nil, fmt.Errorf("failed to read AWS credentials file %s: %w", o.AWSCredentialsFile, err)
Expand Down Expand Up @@ -640,8 +640,8 @@ func (o *DrOidcIamOptions) checkOIDCDocumentsExist(ctx context.Context, s3Client

for _, doc := range documents {
_, err := s3Client.HeadObject(ctx, &s3.HeadObjectInput{
Bucket: awsv2.String(o.OIDCStorageProviderS3Bucket),
Key: awsv2.String(doc),
Bucket: aws.String(o.OIDCStorageProviderS3Bucket),
Key: aws.String(doc),
})
if err != nil {
return false
Expand All @@ -654,21 +654,21 @@ func (o *DrOidcIamOptions) checkOIDCDocumentsExist(ctx context.Context, s3Client
// disabling the Block Public Access settings and applying a read-all policy.
func configureBucketPublicAccess(ctx context.Context, s3Client *s3.Client, bucketName string) error {
_, err := s3Client.PutPublicAccessBlock(ctx, &s3.PutPublicAccessBlockInput{
Bucket: awsv2.String(bucketName),
Bucket: aws.String(bucketName),
PublicAccessBlockConfiguration: &s3types.PublicAccessBlockConfiguration{
BlockPublicAcls: awsv2.Bool(false),
BlockPublicPolicy: awsv2.Bool(false),
IgnorePublicAcls: awsv2.Bool(false),
RestrictPublicBuckets: awsv2.Bool(false),
BlockPublicAcls: aws.Bool(false),
BlockPublicPolicy: aws.Bool(false),
IgnorePublicAcls: aws.Bool(false),
RestrictPublicBuckets: aws.Bool(false),
},
})
if err != nil {
return fmt.Errorf("failed to configure Block Public Access: %w", err)
}

_, err = s3Client.PutBucketPolicy(ctx, &s3.PutBucketPolicyInput{
Bucket: awsv2.String(bucketName),
Policy: awsv2.String(fmt.Sprintf(`{
Bucket: aws.String(bucketName),
Policy: aws.String(fmt.Sprintf(`{
"Version": "2012-10-17",
"Statement": [
{
Expand All @@ -689,7 +689,7 @@ func configureBucketPublicAccess(ctx context.Context, s3Client *s3.Client, bucke

func (o *DrOidcIamOptions) ensureOIDCBucket(ctx context.Context, s3Client *s3.Client) error {
_, err := s3Client.HeadBucket(ctx, &s3.HeadBucketInput{
Bucket: awsv2.String(o.OIDCStorageProviderS3Bucket),
Bucket: aws.String(o.OIDCStorageProviderS3Bucket),
})

if err == nil {
Expand Down Expand Up @@ -718,7 +718,7 @@ func (o *DrOidcIamOptions) ensureOIDCBucket(ctx context.Context, s3Client *s3.Cl
}

createBucketInput := &s3.CreateBucketInput{
Bucket: awsv2.String(o.OIDCStorageProviderS3Bucket),
Bucket: aws.String(o.OIDCStorageProviderS3Bucket),
}

// Use the OIDC bucket region for LocationConstraint, not the cluster region.
Expand Down Expand Up @@ -775,10 +775,10 @@ func (o *DrOidcIamOptions) generateAndUploadOIDCDocuments(ctx context.Context, k
return fmt.Errorf("failed to generate OIDC document %s: %w", path, err)
}
_, err = s3Client.PutObject(ctx, &s3.PutObjectInput{
Bucket: awsv2.String(o.OIDCStorageProviderS3Bucket),
Key: awsv2.String(o.InfraID + path),
Bucket: aws.String(o.OIDCStorageProviderS3Bucket),
Key: aws.String(o.InfraID + path),
Body: bodyReader,
ContentType: awsv2.String("application/json"),
ContentType: aws.String("application/json"),
})
if err != nil {
return fmt.Errorf("failed to upload OIDC document %s: %w", path, err)
Expand Down Expand Up @@ -854,7 +854,7 @@ func (o *DrOidcIamOptions) deleteOIDCProviderIfExists(ctx context.Context, iamCl
return nil
}
_, err := iamClient.DeleteOpenIDConnectProvider(ctx, &iam.DeleteOpenIDConnectProviderInput{
OpenIDConnectProviderArn: awsv2.String(providerARN),
OpenIDConnectProviderArn: aws.String(providerARN),
})
if err != nil {
return fmt.Errorf("failed to remove existing OIDC provider %s: %w", providerARN, err)
Expand All @@ -871,7 +871,7 @@ func (o *DrOidcIamOptions) createOIDCProvider(ctx context.Context, iamClient *ia
ThumbprintList: []string{
thumbprint,
},
Url: awsv2.String(o.Issuer),
Url: aws.String(o.Issuer),
}

var output *iam.CreateOpenIDConnectProviderOutput
Expand Down
86 changes: 43 additions & 43 deletions cmd/infra/aws/destroy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

"github.com/openshift/hypershift/support/awsapi"

awsv2 "github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing"
elbtypes "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing/types"
"github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2"
Expand All @@ -36,18 +36,18 @@ func TestEmptyBucket(t *testing.T) {
m.EXPECT().ListObjectsV2(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&s3.ListObjectsV2Output{
Contents: []s3types.Object{
{Key: awsv2.String("file1.txt")},
{Key: awsv2.String("file2.txt")},
{Key: awsv2.String("file3.txt")},
{Key: aws.String("file1.txt")},
{Key: aws.String("file2.txt")},
{Key: aws.String("file3.txt")},
},
}, nil,
)
m.EXPECT().DeleteObjects(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&s3.DeleteObjectsOutput{
Deleted: []s3types.DeletedObject{
{Key: awsv2.String("file1.txt")},
{Key: awsv2.String("file2.txt")},
{Key: awsv2.String("file3.txt")},
{Key: aws.String("file1.txt")},
{Key: aws.String("file2.txt")},
{Key: aws.String("file3.txt")},
},
}, nil,
)
Expand All @@ -61,23 +61,23 @@ func TestEmptyBucket(t *testing.T) {
m.EXPECT().ListObjectsV2(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&s3.ListObjectsV2Output{
Contents: []s3types.Object{
{Key: awsv2.String("file1.txt")},
{Key: awsv2.String("file2.txt")},
{Key: awsv2.String("file3.txt")},
{Key: aws.String("file1.txt")},
{Key: aws.String("file2.txt")},
{Key: aws.String("file3.txt")},
},
}, nil,
)
m.EXPECT().DeleteObjects(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&s3.DeleteObjectsOutput{
Deleted: []s3types.DeletedObject{
{Key: awsv2.String("file1.txt")},
{Key: awsv2.String("file2.txt")},
{Key: aws.String("file1.txt")},
{Key: aws.String("file2.txt")},
},
Errors: []s3types.Error{
{
Key: awsv2.String("file3.txt"),
Code: awsv2.String("AccessDenied"),
Message: awsv2.String("Access Denied"),
Key: aws.String("file3.txt"),
Code: aws.String("AccessDenied"),
Message: aws.String("Access Denied"),
},
},
}, nil,
Expand All @@ -91,7 +91,7 @@ func TestEmptyBucket(t *testing.T) {
bucketName: "non-existent-bucket",
setupMock: func(m *awsapi.MockS3API) {
m.EXPECT().ListObjectsV2(gomock.Any(), gomock.Any(), gomock.Any()).Return(
nil, &s3types.NoSuchBucket{Message: awsv2.String("The specified bucket does not exist")},
nil, &s3types.NoSuchBucket{Message: aws.String("The specified bucket does not exist")},
)
},
expectError: false,
Expand Down Expand Up @@ -148,13 +148,13 @@ func TestEmptyBucket_Pagination(t *testing.T) {
// First page: 1000 objects
firstPageObjects := make([]s3types.Object, 1000)
for i := 0; i < 1000; i++ {
firstPageObjects[i] = s3types.Object{Key: awsv2.String(fmt.Sprintf("file-%d.txt", i))}
firstPageObjects[i] = s3types.Object{Key: aws.String(fmt.Sprintf("file-%d.txt", i))}
}
mockS3.EXPECT().ListObjectsV2(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&s3.ListObjectsV2Output{
Contents: firstPageObjects,
IsTruncated: awsv2.Bool(true),
NextContinuationToken: awsv2.String("token1"),
IsTruncated: aws.Bool(true),
NextContinuationToken: aws.String("token1"),
}, nil,
)
mockS3.EXPECT().DeleteObjects(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(
Expand All @@ -170,13 +170,13 @@ func TestEmptyBucket_Pagination(t *testing.T) {
// Second page: 1000 objects
secondPageObjects := make([]s3types.Object, 1000)
for i := 1000; i < 2000; i++ {
secondPageObjects[i-1000] = s3types.Object{Key: awsv2.String(fmt.Sprintf("file-%d.txt", i))}
secondPageObjects[i-1000] = s3types.Object{Key: aws.String(fmt.Sprintf("file-%d.txt", i))}
}
mockS3.EXPECT().ListObjectsV2(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&s3.ListObjectsV2Output{
Contents: secondPageObjects,
IsTruncated: awsv2.Bool(true),
NextContinuationToken: awsv2.String("token2"),
IsTruncated: aws.Bool(true),
NextContinuationToken: aws.String("token2"),
}, nil,
)
mockS3.EXPECT().DeleteObjects(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(
Expand All @@ -192,7 +192,7 @@ func TestEmptyBucket_Pagination(t *testing.T) {
// Third page: 500 objects (final page)
thirdPageObjects := make([]s3types.Object, 500)
for i := 2000; i < 2500; i++ {
thirdPageObjects[i-2000] = s3types.Object{Key: awsv2.String(fmt.Sprintf("file-%d.txt", i))}
thirdPageObjects[i-2000] = s3types.Object{Key: aws.String(fmt.Sprintf("file-%d.txt", i))}
}
mockS3.EXPECT().ListObjectsV2(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&s3.ListObjectsV2Output{
Expand Down Expand Up @@ -232,13 +232,13 @@ func TestDestroyV1ELBs(t *testing.T) {
m.EXPECT().DescribeLoadBalancers(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&elasticloadbalancing.DescribeLoadBalancersOutput{
LoadBalancerDescriptions: []elbtypes.LoadBalancerDescription{
{LoadBalancerName: awsv2.String("lb-target"), VPCId: awsv2.String(targetVPC)},
{LoadBalancerName: awsv2.String("lb-other"), VPCId: awsv2.String("vpc-other")},
{LoadBalancerName: aws.String("lb-target"), VPCId: aws.String(targetVPC)},
{LoadBalancerName: aws.String("lb-other"), VPCId: aws.String("vpc-other")},
},
}, nil,
)
m.EXPECT().DeleteLoadBalancer(gomock.Any(), &elasticloadbalancing.DeleteLoadBalancerInput{
LoadBalancerName: awsv2.String("lb-target"),
LoadBalancerName: aws.String("lb-target"),
}, gomock.Any()).Return(&elasticloadbalancing.DeleteLoadBalancerOutput{}, nil)
},
expectErrCount: 0,
Expand All @@ -250,15 +250,15 @@ func TestDestroyV1ELBs(t *testing.T) {
m.EXPECT().DescribeLoadBalancers(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&elasticloadbalancing.DescribeLoadBalancersOutput{
LoadBalancerDescriptions: []elbtypes.LoadBalancerDescription{
{LoadBalancerName: awsv2.String("lb-page1"), VPCId: awsv2.String(targetVPC)},
{LoadBalancerName: aws.String("lb-page1"), VPCId: aws.String(targetVPC)},
},
NextMarker: awsv2.String("token1"),
NextMarker: aws.String("token1"),
}, nil,
),
m.EXPECT().DescribeLoadBalancers(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&elasticloadbalancing.DescribeLoadBalancersOutput{
LoadBalancerDescriptions: []elbtypes.LoadBalancerDescription{
{LoadBalancerName: awsv2.String("lb-page2"), VPCId: awsv2.String(targetVPC)},
{LoadBalancerName: aws.String("lb-page2"), VPCId: aws.String(targetVPC)},
},
}, nil,
),
Expand All @@ -284,16 +284,16 @@ func TestDestroyV1ELBs(t *testing.T) {
m.EXPECT().DescribeLoadBalancers(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&elasticloadbalancing.DescribeLoadBalancersOutput{
LoadBalancerDescriptions: []elbtypes.LoadBalancerDescription{
{LoadBalancerName: awsv2.String("lb-fail"), VPCId: awsv2.String(targetVPC)},
{LoadBalancerName: awsv2.String("lb-ok"), VPCId: awsv2.String(targetVPC)},
{LoadBalancerName: aws.String("lb-fail"), VPCId: aws.String(targetVPC)},
{LoadBalancerName: aws.String("lb-ok"), VPCId: aws.String(targetVPC)},
},
}, nil,
)
m.EXPECT().DeleteLoadBalancer(gomock.Any(), &elasticloadbalancing.DeleteLoadBalancerInput{
LoadBalancerName: awsv2.String("lb-fail"),
LoadBalancerName: aws.String("lb-fail"),
}, gomock.Any()).Return(nil, errors.New("delete failed"))
m.EXPECT().DeleteLoadBalancer(gomock.Any(), &elasticloadbalancing.DeleteLoadBalancerInput{
LoadBalancerName: awsv2.String("lb-ok"),
LoadBalancerName: aws.String("lb-ok"),
}, gomock.Any()).Return(&elasticloadbalancing.DeleteLoadBalancerOutput{}, nil)
},
expectErrCount: 1,
Expand Down Expand Up @@ -331,24 +331,24 @@ func TestDestroyV2ELBs(t *testing.T) {
m.EXPECT().DescribeLoadBalancers(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&elasticloadbalancingv2.DescribeLoadBalancersOutput{
LoadBalancers: []elbv2types.LoadBalancer{
{LoadBalancerArn: awsv2.String("arn:lb:1"), LoadBalancerName: awsv2.String("lb-1"), VpcId: awsv2.String(targetVPC)},
{LoadBalancerArn: awsv2.String("arn:lb:other"), LoadBalancerName: awsv2.String("lb-other"), VpcId: awsv2.String("vpc-other")},
{LoadBalancerArn: aws.String("arn:lb:1"), LoadBalancerName: aws.String("lb-1"), VpcId: aws.String(targetVPC)},
{LoadBalancerArn: aws.String("arn:lb:other"), LoadBalancerName: aws.String("lb-other"), VpcId: aws.String("vpc-other")},
},
}, nil,
)
m.EXPECT().DeleteLoadBalancer(gomock.Any(), &elasticloadbalancingv2.DeleteLoadBalancerInput{
LoadBalancerArn: awsv2.String("arn:lb:1"),
LoadBalancerArn: aws.String("arn:lb:1"),
}, gomock.Any()).Return(&elasticloadbalancingv2.DeleteLoadBalancerOutput{}, nil)
m.EXPECT().DescribeTargetGroups(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&elasticloadbalancingv2.DescribeTargetGroupsOutput{
TargetGroups: []elbv2types.TargetGroup{
{TargetGroupArn: awsv2.String("arn:tg:1"), TargetGroupName: awsv2.String("tg-1"), VpcId: awsv2.String(targetVPC)},
{TargetGroupArn: awsv2.String("arn:tg:other"), TargetGroupName: awsv2.String("tg-other"), VpcId: awsv2.String("vpc-other")},
{TargetGroupArn: aws.String("arn:tg:1"), TargetGroupName: aws.String("tg-1"), VpcId: aws.String(targetVPC)},
{TargetGroupArn: aws.String("arn:tg:other"), TargetGroupName: aws.String("tg-other"), VpcId: aws.String("vpc-other")},
},
}, nil,
)
m.EXPECT().DeleteTargetGroup(gomock.Any(), &elasticloadbalancingv2.DeleteTargetGroupInput{
TargetGroupArn: awsv2.String("arn:tg:1"),
TargetGroupArn: aws.String("arn:tg:1"),
}, gomock.Any()).Return(&elasticloadbalancingv2.DeleteTargetGroupOutput{}, nil)
},
expectErrCount: 0,
Expand All @@ -360,15 +360,15 @@ func TestDestroyV2ELBs(t *testing.T) {
m.EXPECT().DescribeLoadBalancers(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&elasticloadbalancingv2.DescribeLoadBalancersOutput{
LoadBalancers: []elbv2types.LoadBalancer{
{LoadBalancerArn: awsv2.String("arn:lb:p1"), LoadBalancerName: awsv2.String("lb-p1"), VpcId: awsv2.String(targetVPC)},
{LoadBalancerArn: aws.String("arn:lb:p1"), LoadBalancerName: aws.String("lb-p1"), VpcId: aws.String(targetVPC)},
},
NextMarker: awsv2.String("token1"),
NextMarker: aws.String("token1"),
}, nil,
),
m.EXPECT().DescribeLoadBalancers(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&elasticloadbalancingv2.DescribeLoadBalancersOutput{
LoadBalancers: []elbv2types.LoadBalancer{
{LoadBalancerArn: awsv2.String("arn:lb:p2"), LoadBalancerName: awsv2.String("lb-p2"), VpcId: awsv2.String(targetVPC)},
{LoadBalancerArn: aws.String("arn:lb:p2"), LoadBalancerName: aws.String("lb-p2"), VpcId: aws.String(targetVPC)},
},
}, nil,
),
Expand Down Expand Up @@ -412,7 +412,7 @@ func TestDestroyV2ELBs(t *testing.T) {
m.EXPECT().DescribeLoadBalancers(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&elasticloadbalancingv2.DescribeLoadBalancersOutput{
LoadBalancers: []elbv2types.LoadBalancer{
{LoadBalancerArn: awsv2.String("arn:lb:fail"), LoadBalancerName: awsv2.String("lb-fail"), VpcId: awsv2.String(targetVPC)},
{LoadBalancerArn: aws.String("arn:lb:fail"), LoadBalancerName: aws.String("lb-fail"), VpcId: aws.String(targetVPC)},
},
}, nil,
)
Expand Down
4 changes: 2 additions & 2 deletions cmd/infra/aws/util/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package util
import (
"errors"

configv2 "github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/config"

utilerrors "k8s.io/apimachinery/pkg/util/errors"
)
Expand Down Expand Up @@ -37,6 +37,6 @@ func IsErrorRetryable(err error) bool {
}

func isCredentialLoadError(err error) bool {
var sharedCfgErr configv2.SharedConfigLoadError
var sharedCfgErr config.SharedConfigLoadError
return errors.As(err, &sharedCfgErr)
}
Loading