Skip to content
Open
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
27 changes: 25 additions & 2 deletions openshift-tests/ccm-aws-tests/e2e/aws/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func createAWSClientLoadBalancer(ctx context.Context) (*elbv2.Client, error) {
o.Retryer = customRetryer
// Use regional public endpoints to prevent malformed or unreachable
// (from test binary, which usually runs outside cluster's VPC) endpoints.
o.BaseEndpoint = aws.String(fmt.Sprintf("https://elasticloadbalancing.%s.amazonaws.com", cfg.Region))
o.BaseEndpoint = aws.String(fmt.Sprintf("https://elasticloadbalancing.%s.%s", cfg.Region, dnsSuffixForRegion(cfg.Region)))
}), nil
}

Expand Down Expand Up @@ -139,7 +139,7 @@ func createAWSClientEC2(ctx context.Context) (*ec2.Client, error) {
return ec2.NewFromConfig(cfg, func(o *ec2.Options) {
// Use regional public endpoints to prevent malformed or unreachable
// (from test binary, which usually runs outside cluster's VPC) endpoints.
o.BaseEndpoint = aws.String(fmt.Sprintf("https://ec2.%s.amazonaws.com", cfg.Region))
o.BaseEndpoint = aws.String(fmt.Sprintf("https://ec2.%s.%s", cfg.Region, dnsSuffixForRegion(cfg.Region)))
}), nil
}

Expand Down Expand Up @@ -197,6 +197,29 @@ func securityGroupExists(ctx context.Context, ec2Client *ec2.Client, sgID string
return true, nil
}

// dnsSuffixForRegion returns the DNS suffix for the AWS partition that the given region resides in.
// This is needed when constructing explicit public regional endpoints so that non-standard partitions
// like EUSC (.amazonaws.eu) are handled correctly instead of assuming suffix .amazonaws.com.
// Reference: https://github.com/aws/aws-sdk-go-v2/blob/main/internal/endpoints/awsrulesfn/partitions.go
func dnsSuffixForRegion(region string) string {
switch {
case strings.HasPrefix(region, "cn-"):
return "amazonaws.com.cn"
case strings.HasPrefix(region, "eusc-"):
return "amazonaws.eu"
case strings.HasPrefix(region, "us-iso-"):
return "c2s.ic.gov"
case strings.HasPrefix(region, "us-isob-"):
return "sc2s.sgov.gov"
case strings.HasPrefix(region, "eu-isoe-"):
return "cloud.adc-e.uk"
case strings.HasPrefix(region, "us-isof-"):
return "csp.hci.ic.gov"
default:
return "amazonaws.com"
}
}

// ec2IsNotFoundError checks if an error is an EC2 "not found" error.
func ec2IsNotFoundError(err error) bool {
if err == nil {
Expand Down