mirror of https://github.com/kubernetes/kops.git
Upgrade aws-sdk-go to v1.42.5
This commit is contained in:
parent
5f1d95c98c
commit
0c08f047ba
2
go.mod
2
go.mod
|
|
@ -43,7 +43,7 @@ require (
|
||||||
github.com/aliyun/alibaba-cloud-sdk-go v1.61.1059
|
github.com/aliyun/alibaba-cloud-sdk-go v1.61.1059
|
||||||
github.com/apparentlymart/go-cidr v1.1.0
|
github.com/apparentlymart/go-cidr v1.1.0
|
||||||
github.com/aws/amazon-ec2-instance-selector/v2 v2.0.2
|
github.com/aws/amazon-ec2-instance-selector/v2 v2.0.2
|
||||||
github.com/aws/aws-sdk-go v1.40.38
|
github.com/aws/aws-sdk-go v1.42.5
|
||||||
github.com/blang/semver/v4 v4.0.0
|
github.com/blang/semver/v4 v4.0.0
|
||||||
github.com/denverdino/aliyungo v0.0.0-20210425065611-55bee4942cba
|
github.com/denverdino/aliyungo v0.0.0-20210425065611-55bee4942cba
|
||||||
github.com/digitalocean/godo v1.64.2
|
github.com/digitalocean/godo v1.64.2
|
||||||
|
|
|
||||||
4
go.sum
4
go.sum
|
|
@ -202,8 +202,8 @@ github.com/aws/aws-sdk-go v1.31.12/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZve
|
||||||
github.com/aws/aws-sdk-go v1.34.9/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
|
github.com/aws/aws-sdk-go v1.34.9/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
|
||||||
github.com/aws/aws-sdk-go v1.38.49/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
github.com/aws/aws-sdk-go v1.38.49/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
||||||
github.com/aws/aws-sdk-go v1.40.14/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
github.com/aws/aws-sdk-go v1.40.14/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
||||||
github.com/aws/aws-sdk-go v1.40.38 h1:kl3iIW0h/JEBFjSBcAxDsiRbKMPz4aI5FJIHMCAQ+J0=
|
github.com/aws/aws-sdk-go v1.42.5 h1:0xNoQrGh9InmUsT+9qzZ8QLfBEUsnev5BMeED6t6cKI=
|
||||||
github.com/aws/aws-sdk-go v1.40.38/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
github.com/aws/aws-sdk-go v1.42.5/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
||||||
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
|
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
|
||||||
github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
|
github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
|
||||||
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ require (
|
||||||
github.com/Azure/azure-storage-blob-go v0.13.0 // indirect
|
github.com/Azure/azure-storage-blob-go v0.13.0 // indirect
|
||||||
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
|
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
|
||||||
github.com/apparentlymart/go-cidr v1.1.0 // indirect
|
github.com/apparentlymart/go-cidr v1.1.0 // indirect
|
||||||
github.com/aws/aws-sdk-go v1.40.38 // indirect
|
github.com/aws/aws-sdk-go v1.42.5 // indirect
|
||||||
github.com/blang/semver/v4 v4.0.0 // indirect
|
github.com/blang/semver/v4 v4.0.0 // indirect
|
||||||
github.com/cenkalti/backoff/v3 v3.0.0 // indirect
|
github.com/cenkalti/backoff/v3 v3.0.0 // indirect
|
||||||
github.com/containers/image/v5 v5.9.0 // indirect
|
github.com/containers/image/v5 v5.9.0 // indirect
|
||||||
|
|
|
||||||
|
|
@ -269,8 +269,8 @@ github.com/aws/aws-sdk-go v1.31.12/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZve
|
||||||
github.com/aws/aws-sdk-go v1.34.9/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
|
github.com/aws/aws-sdk-go v1.34.9/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
|
||||||
github.com/aws/aws-sdk-go v1.38.49/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
github.com/aws/aws-sdk-go v1.38.49/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
||||||
github.com/aws/aws-sdk-go v1.40.14/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
github.com/aws/aws-sdk-go v1.40.14/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
||||||
github.com/aws/aws-sdk-go v1.40.38 h1:kl3iIW0h/JEBFjSBcAxDsiRbKMPz4aI5FJIHMCAQ+J0=
|
github.com/aws/aws-sdk-go v1.42.5 h1:0xNoQrGh9InmUsT+9qzZ8QLfBEUsnev5BMeED6t6cKI=
|
||||||
github.com/aws/aws-sdk-go v1.40.38/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
github.com/aws/aws-sdk-go v1.42.5/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
||||||
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
|
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
|
||||||
github.com/bazelbuild/buildtools v0.0.0-20190917191645-69366ca98f89/go.mod h1:5JP0TXzWDHXv8qvxRC4InIazwdyDseBDbzESUMKk1yU=
|
github.com/bazelbuild/buildtools v0.0.0-20190917191645-69366ca98f89/go.mod h1:5JP0TXzWDHXv8qvxRC4InIazwdyDseBDbzESUMKk1yU=
|
||||||
github.com/bazelbuild/rules_go v0.22.1/go.mod h1:MC23Dc/wkXEyk3Wpq6lCqz0ZAYOZDw2DR5y3N1q2i7M=
|
github.com/bazelbuild/rules_go v0.22.1/go.mod h1:MC23Dc/wkXEyk3Wpq6lCqz0ZAYOZDw2DR5y3N1q2i7M=
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ type Config struct {
|
||||||
Endpoint string
|
Endpoint string
|
||||||
SigningRegion string
|
SigningRegion string
|
||||||
SigningName string
|
SigningName string
|
||||||
|
ResolvedRegion string
|
||||||
|
|
||||||
// States that the signing name did not come from a modeled source but
|
// States that the signing name did not come from a modeled source but
|
||||||
// was derived based on other data. Used by service client constructors
|
// was derived based on other data. Used by service client constructors
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ var LogHTTPRequestHandler = request.NamedHandler{
|
||||||
}
|
}
|
||||||
|
|
||||||
func logRequest(r *request.Request) {
|
func logRequest(r *request.Request) {
|
||||||
if !r.Config.LogLevel.AtLeast(aws.LogDebug) {
|
if !r.Config.LogLevel.AtLeast(aws.LogDebug) || r.Config.Logger == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -94,6 +94,10 @@ var LogHTTPRequestHeaderHandler = request.NamedHandler{
|
||||||
}
|
}
|
||||||
|
|
||||||
func logRequestHeader(r *request.Request) {
|
func logRequestHeader(r *request.Request) {
|
||||||
|
if !r.Config.LogLevel.AtLeast(aws.LogDebug) || r.Config.Logger == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
b, err := httputil.DumpRequestOut(r.HTTPRequest, false)
|
b, err := httputil.DumpRequestOut(r.HTTPRequest, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg,
|
r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg,
|
||||||
|
|
@ -124,7 +128,7 @@ var LogHTTPResponseHandler = request.NamedHandler{
|
||||||
}
|
}
|
||||||
|
|
||||||
func logResponse(r *request.Request) {
|
func logResponse(r *request.Request) {
|
||||||
if !r.Config.LogLevel.AtLeast(aws.LogDebug) {
|
if !r.Config.LogLevel.AtLeast(aws.LogDebug) || r.Config.Logger == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -186,7 +190,7 @@ var LogHTTPResponseHeaderHandler = request.NamedHandler{
|
||||||
}
|
}
|
||||||
|
|
||||||
func logResponseHeader(r *request.Request) {
|
func logResponseHeader(r *request.Request) {
|
||||||
if r.Config.Logger == nil {
|
if !r.Config.LogLevel.AtLeast(aws.LogDebug) || r.Config.Logger == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,4 +11,5 @@ type ClientInfo struct {
|
||||||
SigningRegion string
|
SigningRegion string
|
||||||
JSONVersion string
|
JSONVersion string
|
||||||
TargetPrefix string
|
TargetPrefix string
|
||||||
|
ResolvedRegion string
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -208,8 +208,19 @@ type Config struct {
|
||||||
// svc := s3.New(sess, &aws.Config{
|
// svc := s3.New(sess, &aws.Config{
|
||||||
// UseDualStack: aws.Bool(true),
|
// UseDualStack: aws.Bool(true),
|
||||||
// })
|
// })
|
||||||
|
//
|
||||||
|
// Deprecated: This option will continue to function for S3 and S3 Control for backwards compatibility.
|
||||||
|
// UseDualStackEndpoint should be used to enable usage of a service's dual-stack endpoint for all service clients
|
||||||
|
// moving forward. For S3 and S3 Control, when UseDualStackEndpoint is set to a non-zero value it takes higher
|
||||||
|
// precedence then this option.
|
||||||
UseDualStack *bool
|
UseDualStack *bool
|
||||||
|
|
||||||
|
// Sets the resolver to resolve a dual-stack endpoint for the service.
|
||||||
|
UseDualStackEndpoint endpoints.DualStackEndpointState
|
||||||
|
|
||||||
|
// UseFIPSEndpoint specifies the resolver must resolve a FIPS endpoint.
|
||||||
|
UseFIPSEndpoint endpoints.FIPSEndpointState
|
||||||
|
|
||||||
// SleepDelay is an override for the func the SDK will call when sleeping
|
// SleepDelay is an override for the func the SDK will call when sleeping
|
||||||
// during the lifecycle of a request. Specifically this will be used for
|
// during the lifecycle of a request. Specifically this will be used for
|
||||||
// request delays. This value should only be used for testing. To adjust
|
// request delays. This value should only be used for testing. To adjust
|
||||||
|
|
@ -554,6 +565,10 @@ func mergeInConfig(dst *Config, other *Config) {
|
||||||
dst.UseDualStack = other.UseDualStack
|
dst.UseDualStack = other.UseDualStack
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if other.UseDualStackEndpoint != endpoints.DualStackEndpointStateUnset {
|
||||||
|
dst.UseDualStackEndpoint = other.UseDualStackEndpoint
|
||||||
|
}
|
||||||
|
|
||||||
if other.EC2MetadataDisableTimeoutOverride != nil {
|
if other.EC2MetadataDisableTimeoutOverride != nil {
|
||||||
dst.EC2MetadataDisableTimeoutOverride = other.EC2MetadataDisableTimeoutOverride
|
dst.EC2MetadataDisableTimeoutOverride = other.EC2MetadataDisableTimeoutOverride
|
||||||
}
|
}
|
||||||
|
|
@ -589,6 +604,14 @@ func mergeInConfig(dst *Config, other *Config) {
|
||||||
if other.LowerCaseHeaderMaps != nil {
|
if other.LowerCaseHeaderMaps != nil {
|
||||||
dst.LowerCaseHeaderMaps = other.LowerCaseHeaderMaps
|
dst.LowerCaseHeaderMaps = other.LowerCaseHeaderMaps
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if other.UseDualStackEndpoint != endpoints.DualStackEndpointStateUnset {
|
||||||
|
dst.UseDualStackEndpoint = other.UseDualStackEndpoint
|
||||||
|
}
|
||||||
|
|
||||||
|
if other.UseFIPSEndpoint != endpoints.FIPSEndpointStateUnset {
|
||||||
|
dst.UseFIPSEndpoint = other.UseFIPSEndpoint
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy will return a shallow copy of the Config object. If any additional
|
// Copy will return a shallow copy of the Config object. If any additional
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,6 @@ func decodeV3Endpoints(modelDef modelDefinition, opts DecodeModelOptions) (Resol
|
||||||
// Customization
|
// Customization
|
||||||
for i := 0; i < len(ps); i++ {
|
for i := 0; i < len(ps); i++ {
|
||||||
p := &ps[i]
|
p := &ps[i]
|
||||||
custAddS3DualStack(p)
|
|
||||||
custRegionalS3(p)
|
custRegionalS3(p)
|
||||||
custRmIotDataService(p)
|
custRmIotDataService(p)
|
||||||
custFixAppAutoscalingChina(p)
|
custFixAppAutoscalingChina(p)
|
||||||
|
|
@ -91,15 +90,6 @@ func decodeV3Endpoints(modelDef modelDefinition, opts DecodeModelOptions) (Resol
|
||||||
return ps, nil
|
return ps, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func custAddS3DualStack(p *partition) {
|
|
||||||
if !(p.ID == "aws" || p.ID == "aws-cn" || p.ID == "aws-us-gov") {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
custAddDualstack(p, "s3")
|
|
||||||
custAddDualstack(p, "s3-control")
|
|
||||||
}
|
|
||||||
|
|
||||||
func custRegionalS3(p *partition) {
|
func custRegionalS3(p *partition) {
|
||||||
if p.ID != "aws" {
|
if p.ID != "aws" {
|
||||||
return
|
return
|
||||||
|
|
@ -110,35 +100,28 @@ func custRegionalS3(p *partition) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const awsGlobal = "aws-global"
|
||||||
|
const usEast1 = "us-east-1"
|
||||||
|
|
||||||
// If global endpoint already exists no customization needed.
|
// If global endpoint already exists no customization needed.
|
||||||
if _, ok := service.Endpoints["aws-global"]; ok {
|
if _, ok := service.Endpoints[endpointKey{Region: awsGlobal}]; ok {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
service.PartitionEndpoint = "aws-global"
|
service.PartitionEndpoint = awsGlobal
|
||||||
service.Endpoints["us-east-1"] = endpoint{}
|
if _, ok := service.Endpoints[endpointKey{Region: usEast1}]; !ok {
|
||||||
service.Endpoints["aws-global"] = endpoint{
|
service.Endpoints[endpointKey{Region: usEast1}] = endpoint{}
|
||||||
|
}
|
||||||
|
service.Endpoints[endpointKey{Region: awsGlobal}] = endpoint{
|
||||||
Hostname: "s3.amazonaws.com",
|
Hostname: "s3.amazonaws.com",
|
||||||
CredentialScope: credentialScope{
|
CredentialScope: credentialScope{
|
||||||
Region: "us-east-1",
|
Region: usEast1,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
p.Services["s3"] = service
|
p.Services["s3"] = service
|
||||||
}
|
}
|
||||||
|
|
||||||
func custAddDualstack(p *partition, svcName string) {
|
|
||||||
s, ok := p.Services[svcName]
|
|
||||||
if !ok {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
s.Defaults.HasDualStack = boxedTrue
|
|
||||||
s.Defaults.DualStackHostname = "{service}.dualstack.{region}.{dnsSuffix}"
|
|
||||||
|
|
||||||
p.Services[svcName] = s
|
|
||||||
}
|
|
||||||
|
|
||||||
func custRmIotDataService(p *partition) {
|
func custRmIotDataService(p *partition) {
|
||||||
delete(p.Services, "data.iot")
|
delete(p.Services, "data.iot")
|
||||||
}
|
}
|
||||||
|
|
@ -155,12 +138,13 @@ func custFixAppAutoscalingChina(p *partition) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const expectHostname = `autoscaling.{region}.amazonaws.com`
|
const expectHostname = `autoscaling.{region}.amazonaws.com`
|
||||||
if e, a := s.Defaults.Hostname, expectHostname; e != a {
|
serviceDefault := s.Defaults[defaultKey{}]
|
||||||
|
if e, a := expectHostname, serviceDefault.Hostname; e != a {
|
||||||
fmt.Printf("custFixAppAutoscalingChina: ignoring customization, expected %s, got %s\n", e, a)
|
fmt.Printf("custFixAppAutoscalingChina: ignoring customization, expected %s, got %s\n", e, a)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
serviceDefault.Hostname = expectHostname + ".cn"
|
||||||
s.Defaults.Hostname = expectHostname + ".cn"
|
s.Defaults[defaultKey{}] = serviceDefault
|
||||||
p.Services[serviceName] = s
|
p.Services[serviceName] = s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -175,18 +159,25 @@ func custFixAppAutoscalingUsGov(p *partition) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if a := s.Defaults.CredentialScope.Service; a != "" {
|
serviceDefault := s.Defaults[defaultKey{}]
|
||||||
|
if a := serviceDefault.CredentialScope.Service; a != "" {
|
||||||
fmt.Printf("custFixAppAutoscalingUsGov: ignoring customization, expected empty credential scope service, got %s\n", a)
|
fmt.Printf("custFixAppAutoscalingUsGov: ignoring customization, expected empty credential scope service, got %s\n", a)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if a := s.Defaults.Hostname; a != "" {
|
if a := serviceDefault.Hostname; a != "" {
|
||||||
fmt.Printf("custFixAppAutoscalingUsGov: ignoring customization, expected empty hostname, got %s\n", a)
|
fmt.Printf("custFixAppAutoscalingUsGov: ignoring customization, expected empty hostname, got %s\n", a)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Defaults.CredentialScope.Service = "application-autoscaling"
|
serviceDefault.CredentialScope.Service = "application-autoscaling"
|
||||||
s.Defaults.Hostname = "autoscaling.{region}.amazonaws.com"
|
serviceDefault.Hostname = "autoscaling.{region}.amazonaws.com"
|
||||||
|
|
||||||
|
if s.Defaults == nil {
|
||||||
|
s.Defaults = make(endpointDefaults)
|
||||||
|
}
|
||||||
|
|
||||||
|
s.Defaults[defaultKey{}] = serviceDefault
|
||||||
|
|
||||||
p.Services[serviceName] = s
|
p.Services[serviceName] = s
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -8,6 +8,41 @@ import (
|
||||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// A Logger is a minimalistic interface for the SDK to log messages to.
|
||||||
|
type Logger interface {
|
||||||
|
Log(...interface{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// DualStackEndpointState is a constant to describe the dual-stack endpoint resolution
|
||||||
|
// behavior.
|
||||||
|
type DualStackEndpointState uint
|
||||||
|
|
||||||
|
const (
|
||||||
|
// DualStackEndpointStateUnset is the default value behavior for dual-stack endpoint
|
||||||
|
// resolution.
|
||||||
|
DualStackEndpointStateUnset DualStackEndpointState = iota
|
||||||
|
|
||||||
|
// DualStackEndpointStateEnabled enable dual-stack endpoint resolution for endpoints.
|
||||||
|
DualStackEndpointStateEnabled
|
||||||
|
|
||||||
|
// DualStackEndpointStateDisabled disables dual-stack endpoint resolution for endpoints.
|
||||||
|
DualStackEndpointStateDisabled
|
||||||
|
)
|
||||||
|
|
||||||
|
// FIPSEndpointState is a constant to describe the FIPS endpoint resolution behavior.
|
||||||
|
type FIPSEndpointState uint
|
||||||
|
|
||||||
|
const (
|
||||||
|
// FIPSEndpointStateUnset is the default value behavior for FIPS endpoint resolution.
|
||||||
|
FIPSEndpointStateUnset FIPSEndpointState = iota
|
||||||
|
|
||||||
|
// FIPSEndpointStateEnabled enables FIPS endpoint resolution for service endpoints.
|
||||||
|
FIPSEndpointStateEnabled
|
||||||
|
|
||||||
|
// FIPSEndpointStateDisabled disables FIPS endpoint resolution for endpoints.
|
||||||
|
FIPSEndpointStateDisabled
|
||||||
|
)
|
||||||
|
|
||||||
// Options provide the configuration needed to direct how the
|
// Options provide the configuration needed to direct how the
|
||||||
// endpoints will be resolved.
|
// endpoints will be resolved.
|
||||||
type Options struct {
|
type Options struct {
|
||||||
|
|
@ -21,8 +56,19 @@ type Options struct {
|
||||||
// be returned. This endpoint may not be valid. If StrictMatching is
|
// be returned. This endpoint may not be valid. If StrictMatching is
|
||||||
// enabled only services that are known to support dualstack will return
|
// enabled only services that are known to support dualstack will return
|
||||||
// dualstack endpoints.
|
// dualstack endpoints.
|
||||||
|
//
|
||||||
|
// Deprecated: This option will continue to function for S3 and S3 Control for backwards compatibility.
|
||||||
|
// UseDualStackEndpoint should be used to enable usage of a service's dual-stack endpoint for all service clients
|
||||||
|
// moving forward. For S3 and S3 Control, when UseDualStackEndpoint is set to a non-zero value it takes higher
|
||||||
|
// precedence then this option.
|
||||||
UseDualStack bool
|
UseDualStack bool
|
||||||
|
|
||||||
|
// Sets the resolver to resolve a dual-stack endpoint for the service.
|
||||||
|
UseDualStackEndpoint DualStackEndpointState
|
||||||
|
|
||||||
|
// UseFIPSEndpoint specifies the resolver must resolve a FIPS endpoint.
|
||||||
|
UseFIPSEndpoint FIPSEndpointState
|
||||||
|
|
||||||
// Enables strict matching of services and regions resolved endpoints.
|
// Enables strict matching of services and regions resolved endpoints.
|
||||||
// If the partition doesn't enumerate the exact service and region an
|
// If the partition doesn't enumerate the exact service and region an
|
||||||
// error will be returned. This option will prevent returning endpoints
|
// error will be returned. This option will prevent returning endpoints
|
||||||
|
|
@ -56,6 +102,30 @@ type Options struct {
|
||||||
|
|
||||||
// S3 Regional Endpoint flag helps with resolving the S3 endpoint
|
// S3 Regional Endpoint flag helps with resolving the S3 endpoint
|
||||||
S3UsEast1RegionalEndpoint S3UsEast1RegionalEndpoint
|
S3UsEast1RegionalEndpoint S3UsEast1RegionalEndpoint
|
||||||
|
|
||||||
|
// ResolvedRegion is the resolved region string. If provided (non-zero length) it takes priority
|
||||||
|
// over the region name passed to the ResolveEndpoint call.
|
||||||
|
ResolvedRegion string
|
||||||
|
|
||||||
|
// Logger is the logger that will be used to log messages.
|
||||||
|
Logger Logger
|
||||||
|
|
||||||
|
// Determines whether logging of deprecated endpoints usage is enabled.
|
||||||
|
LogDeprecated bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o Options) getEndpointVariant(service string) (v endpointVariant) {
|
||||||
|
const s3 = "s3"
|
||||||
|
const s3Control = "s3-control"
|
||||||
|
|
||||||
|
if (o.UseDualStackEndpoint == DualStackEndpointStateEnabled) ||
|
||||||
|
((service == s3 || service == s3Control) && (o.UseDualStackEndpoint == DualStackEndpointStateUnset && o.UseDualStack)) {
|
||||||
|
v |= dualStackVariant
|
||||||
|
}
|
||||||
|
if o.UseFIPSEndpoint == FIPSEndpointStateEnabled {
|
||||||
|
v |= fipsVariant
|
||||||
|
}
|
||||||
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
// EC2IMDSEndpointModeState is an enum configuration variable describing the client endpoint mode.
|
// EC2IMDSEndpointModeState is an enum configuration variable describing the client endpoint mode.
|
||||||
|
|
@ -196,10 +266,25 @@ func DisableSSLOption(o *Options) {
|
||||||
|
|
||||||
// UseDualStackOption sets the UseDualStack option. Can be used as a functional
|
// UseDualStackOption sets the UseDualStack option. Can be used as a functional
|
||||||
// option when resolving endpoints.
|
// option when resolving endpoints.
|
||||||
|
//
|
||||||
|
// Deprecated: UseDualStackEndpointOption should be used to enable usage of a service's dual-stack endpoint.
|
||||||
|
// When DualStackEndpointState is set to a non-zero value it takes higher precedence then this option.
|
||||||
func UseDualStackOption(o *Options) {
|
func UseDualStackOption(o *Options) {
|
||||||
o.UseDualStack = true
|
o.UseDualStack = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UseDualStackEndpointOption sets the UseDualStackEndpoint option to enabled. Can be used as a functional
|
||||||
|
// option when resolving endpoints.
|
||||||
|
func UseDualStackEndpointOption(o *Options) {
|
||||||
|
o.UseDualStackEndpoint = DualStackEndpointStateEnabled
|
||||||
|
}
|
||||||
|
|
||||||
|
// UseFIPSEndpointOption sets the UseFIPSEndpoint option to enabled. Can be used as a functional
|
||||||
|
// option when resolving endpoints.
|
||||||
|
func UseFIPSEndpointOption(o *Options) {
|
||||||
|
o.UseFIPSEndpoint = FIPSEndpointStateEnabled
|
||||||
|
}
|
||||||
|
|
||||||
// StrictMatchingOption sets the StrictMatching option. Can be used as a functional
|
// StrictMatchingOption sets the StrictMatching option. Can be used as a functional
|
||||||
// option when resolving endpoints.
|
// option when resolving endpoints.
|
||||||
func StrictMatchingOption(o *Options) {
|
func StrictMatchingOption(o *Options) {
|
||||||
|
|
@ -407,7 +492,7 @@ func (r Region) ResolveEndpoint(service string, opts ...func(*Options)) (Resolve
|
||||||
func (r Region) Services() map[string]Service {
|
func (r Region) Services() map[string]Service {
|
||||||
ss := map[string]Service{}
|
ss := map[string]Service{}
|
||||||
for id, s := range r.p.Services {
|
for id, s := range r.p.Services {
|
||||||
if _, ok := s.Endpoints[r.id]; ok {
|
if _, ok := s.Endpoints[endpointKey{Region: r.id}]; ok {
|
||||||
ss[id] = Service{
|
ss[id] = Service{
|
||||||
id: id,
|
id: id,
|
||||||
p: r.p,
|
p: r.p,
|
||||||
|
|
@ -452,9 +537,12 @@ func (s Service) Regions() map[string]Region {
|
||||||
}
|
}
|
||||||
|
|
||||||
for id := range service.Endpoints {
|
for id := range service.Endpoints {
|
||||||
if r, ok := s.p.Regions[id]; ok {
|
if id.Variant != 0 {
|
||||||
rs[id] = Region{
|
continue
|
||||||
id: id,
|
}
|
||||||
|
if r, ok := s.p.Regions[id.Region]; ok {
|
||||||
|
rs[id.Region] = Region{
|
||||||
|
id: id.Region,
|
||||||
desc: r.Description,
|
desc: r.Description,
|
||||||
p: s.p,
|
p: s.p,
|
||||||
}
|
}
|
||||||
|
|
@ -472,8 +560,11 @@ func (s Service) Regions() map[string]Region {
|
||||||
func (s Service) Endpoints() map[string]Endpoint {
|
func (s Service) Endpoints() map[string]Endpoint {
|
||||||
es := make(map[string]Endpoint, len(s.p.Services[s.id].Endpoints))
|
es := make(map[string]Endpoint, len(s.p.Services[s.id].Endpoints))
|
||||||
for id := range s.p.Services[s.id].Endpoints {
|
for id := range s.p.Services[s.id].Endpoints {
|
||||||
es[id] = Endpoint{
|
if id.Variant != 0 {
|
||||||
id: id,
|
continue
|
||||||
|
}
|
||||||
|
es[id.Region] = Endpoint{
|
||||||
|
id: id.Region,
|
||||||
serviceID: s.id,
|
serviceID: s.id,
|
||||||
p: s.p,
|
p: s.p,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package endpoints
|
package endpoints
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
@ -12,6 +13,34 @@ const (
|
||||||
ec2MetadataEndpointIPv4 = "http://169.254.169.254/latest"
|
ec2MetadataEndpointIPv4 = "http://169.254.169.254/latest"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const dnsSuffixTemplateKey = "{dnsSuffix}"
|
||||||
|
|
||||||
|
// defaultKey is a compound map key of a variant and other values.
|
||||||
|
type defaultKey struct {
|
||||||
|
Variant endpointVariant
|
||||||
|
ServiceVariant serviceVariant
|
||||||
|
}
|
||||||
|
|
||||||
|
// endpointKey is a compound map key of a region and associated variant value.
|
||||||
|
type endpointKey struct {
|
||||||
|
Region string
|
||||||
|
Variant endpointVariant
|
||||||
|
}
|
||||||
|
|
||||||
|
// endpointVariant is a bit field to describe the endpoints attributes.
|
||||||
|
type endpointVariant uint64
|
||||||
|
|
||||||
|
// serviceVariant is a bit field to describe the service endpoint attributes.
|
||||||
|
type serviceVariant uint64
|
||||||
|
|
||||||
|
const (
|
||||||
|
// fipsVariant indicates that the endpoint is FIPS capable.
|
||||||
|
fipsVariant endpointVariant = 1 << (64 - 1 - iota)
|
||||||
|
|
||||||
|
// dualStackVariant indicates that the endpoint is DualStack capable.
|
||||||
|
dualStackVariant
|
||||||
|
)
|
||||||
|
|
||||||
var regionValidationRegex = regexp.MustCompile(`^[[:alnum:]]([[:alnum:]\-]*[[:alnum:]])?$`)
|
var regionValidationRegex = regexp.MustCompile(`^[[:alnum:]]([[:alnum:]\-]*[[:alnum:]])?$`)
|
||||||
|
|
||||||
type partitions []partition
|
type partitions []partition
|
||||||
|
|
@ -20,8 +49,12 @@ func (ps partitions) EndpointFor(service, region string, opts ...func(*Options))
|
||||||
var opt Options
|
var opt Options
|
||||||
opt.Set(opts...)
|
opt.Set(opts...)
|
||||||
|
|
||||||
|
if len(opt.ResolvedRegion) > 0 {
|
||||||
|
region = opt.ResolvedRegion
|
||||||
|
}
|
||||||
|
|
||||||
for i := 0; i < len(ps); i++ {
|
for i := 0; i < len(ps); i++ {
|
||||||
if !ps[i].canResolveEndpoint(service, region, opt.StrictMatching) {
|
if !ps[i].canResolveEndpoint(service, region, opt) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -49,12 +82,74 @@ func (ps partitions) Partitions() []Partition {
|
||||||
return parts
|
return parts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type endpointWithVariants struct {
|
||||||
|
endpoint
|
||||||
|
Variants []endpointWithTags `json:"variants"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type endpointWithTags struct {
|
||||||
|
endpoint
|
||||||
|
Tags []string `json:"tags"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type endpointDefaults map[defaultKey]endpoint
|
||||||
|
|
||||||
|
func (p *endpointDefaults) UnmarshalJSON(data []byte) error {
|
||||||
|
if *p == nil {
|
||||||
|
*p = make(endpointDefaults)
|
||||||
|
}
|
||||||
|
|
||||||
|
var e endpointWithVariants
|
||||||
|
if err := json.Unmarshal(data, &e); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
(*p)[defaultKey{Variant: 0}] = e.endpoint
|
||||||
|
|
||||||
|
e.Hostname = ""
|
||||||
|
e.DNSSuffix = ""
|
||||||
|
|
||||||
|
for _, variant := range e.Variants {
|
||||||
|
endpointVariant, unknown := parseVariantTags(variant.Tags)
|
||||||
|
if unknown {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var ve endpoint
|
||||||
|
ve.mergeIn(e.endpoint)
|
||||||
|
ve.mergeIn(variant.endpoint)
|
||||||
|
|
||||||
|
(*p)[defaultKey{Variant: endpointVariant}] = ve
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseVariantTags(tags []string) (ev endpointVariant, unknown bool) {
|
||||||
|
if len(tags) == 0 {
|
||||||
|
unknown = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tag := range tags {
|
||||||
|
switch {
|
||||||
|
case strings.EqualFold("fips", tag):
|
||||||
|
ev |= fipsVariant
|
||||||
|
case strings.EqualFold("dualstack", tag):
|
||||||
|
ev |= dualStackVariant
|
||||||
|
default:
|
||||||
|
unknown = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ev, unknown
|
||||||
|
}
|
||||||
|
|
||||||
type partition struct {
|
type partition struct {
|
||||||
ID string `json:"partition"`
|
ID string `json:"partition"`
|
||||||
Name string `json:"partitionName"`
|
Name string `json:"partitionName"`
|
||||||
DNSSuffix string `json:"dnsSuffix"`
|
DNSSuffix string `json:"dnsSuffix"`
|
||||||
RegionRegex regionRegex `json:"regionRegex"`
|
RegionRegex regionRegex `json:"regionRegex"`
|
||||||
Defaults endpoint `json:"defaults"`
|
Defaults endpointDefaults `json:"defaults"`
|
||||||
Regions regions `json:"regions"`
|
Regions regions `json:"regions"`
|
||||||
Services services `json:"services"`
|
Services services `json:"services"`
|
||||||
}
|
}
|
||||||
|
|
@ -67,15 +162,18 @@ func (p partition) Partition() Partition {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p partition) canResolveEndpoint(service, region string, strictMatch bool) bool {
|
func (p partition) canResolveEndpoint(service, region string, options Options) bool {
|
||||||
s, hasService := p.Services[service]
|
s, hasService := p.Services[service]
|
||||||
_, hasEndpoint := s.Endpoints[region]
|
_, hasEndpoint := s.Endpoints[endpointKey{
|
||||||
|
Region: region,
|
||||||
|
Variant: options.getEndpointVariant(service),
|
||||||
|
}]
|
||||||
|
|
||||||
if hasEndpoint && hasService {
|
if hasEndpoint && hasService {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if strictMatch {
|
if options.StrictMatching {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -106,6 +204,10 @@ func (p partition) EndpointFor(service, region string, opts ...func(*Options)) (
|
||||||
var opt Options
|
var opt Options
|
||||||
opt.Set(opts...)
|
opt.Set(opts...)
|
||||||
|
|
||||||
|
if len(opt.ResolvedRegion) > 0 {
|
||||||
|
region = opt.ResolvedRegion
|
||||||
|
}
|
||||||
|
|
||||||
s, hasService := p.Services[service]
|
s, hasService := p.Services[service]
|
||||||
|
|
||||||
if service == Ec2metadataServiceID && !hasService {
|
if service == Ec2metadataServiceID && !hasService {
|
||||||
|
|
@ -123,21 +225,44 @@ func (p partition) EndpointFor(service, region string, opts ...func(*Options)) (
|
||||||
region = s.PartitionEndpoint
|
region = s.PartitionEndpoint
|
||||||
}
|
}
|
||||||
|
|
||||||
if (service == "sts" && opt.STSRegionalEndpoint != RegionalSTSEndpoint) ||
|
if r, ok := isLegacyGlobalRegion(service, region, opt); ok {
|
||||||
(service == "s3" && opt.S3UsEast1RegionalEndpoint != RegionalS3UsEast1Endpoint) {
|
region = r
|
||||||
if _, ok := legacyGlobalRegions[service][region]; ok {
|
|
||||||
region = "aws-global"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
e, hasEndpoint := s.endpointForRegion(region)
|
variant := opt.getEndpointVariant(service)
|
||||||
if len(region) == 0 || (!hasEndpoint && opt.StrictMatching) {
|
|
||||||
return resolved, NewUnknownEndpointError(p.ID, service, region, endpointList(s.Endpoints))
|
endpoints := s.Endpoints
|
||||||
|
|
||||||
|
serviceDefaults, hasServiceDefault := s.Defaults[defaultKey{Variant: variant}]
|
||||||
|
// If we searched for a variant which may have no explicit service defaults,
|
||||||
|
// then we need to inherit the standard service defaults except the hostname and dnsSuffix
|
||||||
|
if variant != 0 && !hasServiceDefault {
|
||||||
|
serviceDefaults = s.Defaults[defaultKey{}]
|
||||||
|
serviceDefaults.Hostname = ""
|
||||||
|
serviceDefaults.DNSSuffix = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
defs := []endpoint{p.Defaults, s.Defaults}
|
partitionDefaults, hasPartitionDefault := p.Defaults[defaultKey{Variant: variant}]
|
||||||
|
|
||||||
return e.resolve(service, p.ID, region, p.DNSSuffix, defs, opt)
|
var dnsSuffix string
|
||||||
|
if len(serviceDefaults.DNSSuffix) > 0 {
|
||||||
|
dnsSuffix = serviceDefaults.DNSSuffix
|
||||||
|
} else if variant == 0 {
|
||||||
|
// For legacy reasons the partition dnsSuffix is not in the defaults, so if we looked for
|
||||||
|
// a non-variant endpoint then we need to set the dnsSuffix.
|
||||||
|
dnsSuffix = p.DNSSuffix
|
||||||
|
}
|
||||||
|
|
||||||
|
noDefaults := !hasServiceDefault && !hasPartitionDefault
|
||||||
|
|
||||||
|
e, hasEndpoint := s.endpointForRegion(region, endpoints, variant)
|
||||||
|
if len(region) == 0 || (!hasEndpoint && (opt.StrictMatching || noDefaults)) {
|
||||||
|
return resolved, NewUnknownEndpointError(p.ID, service, region, endpointList(endpoints, variant))
|
||||||
|
}
|
||||||
|
|
||||||
|
defs := []endpoint{partitionDefaults, serviceDefaults}
|
||||||
|
|
||||||
|
return e.resolve(service, p.ID, region, dnsSuffixTemplateKey, dnsSuffix, defs, opt)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getEC2MetadataEndpoint(partitionID, service string, mode EC2IMDSEndpointModeState) ResolvedEndpoint {
|
func getEC2MetadataEndpoint(partitionID, service string, mode EC2IMDSEndpointModeState) ResolvedEndpoint {
|
||||||
|
|
@ -165,6 +290,31 @@ func getEC2MetadataEndpoint(partitionID, service string, mode EC2IMDSEndpointMod
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isLegacyGlobalRegion(service string, region string, opt Options) (string, bool) {
|
||||||
|
if opt.getEndpointVariant(service) != 0 {
|
||||||
|
return "", false
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
sts = "sts"
|
||||||
|
s3 = "s3"
|
||||||
|
awsGlobal = "aws-global"
|
||||||
|
)
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case service == sts && opt.STSRegionalEndpoint == RegionalSTSEndpoint:
|
||||||
|
return region, false
|
||||||
|
case service == s3 && opt.S3UsEast1RegionalEndpoint == RegionalS3UsEast1Endpoint:
|
||||||
|
return region, false
|
||||||
|
default:
|
||||||
|
if _, ok := legacyGlobalRegions[service][region]; ok {
|
||||||
|
return awsGlobal, true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return region, false
|
||||||
|
}
|
||||||
|
|
||||||
func serviceList(ss services) []string {
|
func serviceList(ss services) []string {
|
||||||
list := make([]string, 0, len(ss))
|
list := make([]string, 0, len(ss))
|
||||||
for k := range ss {
|
for k := range ss {
|
||||||
|
|
@ -172,10 +322,13 @@ func serviceList(ss services) []string {
|
||||||
}
|
}
|
||||||
return list
|
return list
|
||||||
}
|
}
|
||||||
func endpointList(es endpoints) []string {
|
func endpointList(es serviceEndpoints, variant endpointVariant) []string {
|
||||||
list := make([]string, 0, len(es))
|
list := make([]string, 0, len(es))
|
||||||
for k := range es {
|
for k := range es {
|
||||||
list = append(list, k)
|
if k.Variant != variant {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
list = append(list, k.Region)
|
||||||
}
|
}
|
||||||
return list
|
return list
|
||||||
}
|
}
|
||||||
|
|
@ -209,17 +362,17 @@ type services map[string]service
|
||||||
type service struct {
|
type service struct {
|
||||||
PartitionEndpoint string `json:"partitionEndpoint"`
|
PartitionEndpoint string `json:"partitionEndpoint"`
|
||||||
IsRegionalized boxedBool `json:"isRegionalized,omitempty"`
|
IsRegionalized boxedBool `json:"isRegionalized,omitempty"`
|
||||||
Defaults endpoint `json:"defaults"`
|
Defaults endpointDefaults `json:"defaults"`
|
||||||
Endpoints endpoints `json:"endpoints"`
|
Endpoints serviceEndpoints `json:"endpoints"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *service) endpointForRegion(region string) (endpoint, bool) {
|
func (s *service) endpointForRegion(region string, endpoints serviceEndpoints, variant endpointVariant) (endpoint, bool) {
|
||||||
if e, ok := s.Endpoints[region]; ok {
|
if e, ok := endpoints[endpointKey{Region: region, Variant: variant}]; ok {
|
||||||
return e, true
|
return e, true
|
||||||
}
|
}
|
||||||
|
|
||||||
if s.IsRegionalized == boxedFalse {
|
if s.IsRegionalized == boxedFalse {
|
||||||
return s.Endpoints[s.PartitionEndpoint], region == s.PartitionEndpoint
|
return endpoints[endpointKey{Region: s.PartitionEndpoint, Variant: variant}], region == s.PartitionEndpoint
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unable to find any matching endpoint, return
|
// Unable to find any matching endpoint, return
|
||||||
|
|
@ -227,22 +380,73 @@ func (s *service) endpointForRegion(region string) (endpoint, bool) {
|
||||||
return endpoint{}, false
|
return endpoint{}, false
|
||||||
}
|
}
|
||||||
|
|
||||||
type endpoints map[string]endpoint
|
type serviceEndpoints map[endpointKey]endpoint
|
||||||
|
|
||||||
|
func (s *serviceEndpoints) UnmarshalJSON(data []byte) error {
|
||||||
|
if *s == nil {
|
||||||
|
*s = make(serviceEndpoints)
|
||||||
|
}
|
||||||
|
|
||||||
|
var regionToEndpoint map[string]endpointWithVariants
|
||||||
|
|
||||||
|
if err := json.Unmarshal(data, ®ionToEndpoint); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for region, e := range regionToEndpoint {
|
||||||
|
(*s)[endpointKey{Region: region}] = e.endpoint
|
||||||
|
|
||||||
|
e.Hostname = ""
|
||||||
|
e.DNSSuffix = ""
|
||||||
|
|
||||||
|
for _, variant := range e.Variants {
|
||||||
|
endpointVariant, unknown := parseVariantTags(variant.Tags)
|
||||||
|
if unknown {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var ve endpoint
|
||||||
|
ve.mergeIn(e.endpoint)
|
||||||
|
ve.mergeIn(variant.endpoint)
|
||||||
|
|
||||||
|
(*s)[endpointKey{Region: region, Variant: endpointVariant}] = ve
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type endpoint struct {
|
type endpoint struct {
|
||||||
Hostname string `json:"hostname"`
|
Hostname string `json:"hostname"`
|
||||||
Protocols []string `json:"protocols"`
|
Protocols []string `json:"protocols"`
|
||||||
CredentialScope credentialScope `json:"credentialScope"`
|
CredentialScope credentialScope `json:"credentialScope"`
|
||||||
|
|
||||||
// Custom fields not modeled
|
DNSSuffix string `json:"dnsSuffix"`
|
||||||
HasDualStack boxedBool `json:"-"`
|
|
||||||
DualStackHostname string `json:"-"`
|
|
||||||
|
|
||||||
// Signature Version not used
|
// Signature Version not used
|
||||||
SignatureVersions []string `json:"signatureVersions"`
|
SignatureVersions []string `json:"signatureVersions"`
|
||||||
|
|
||||||
// SSLCommonName not used.
|
// SSLCommonName not used.
|
||||||
SSLCommonName string `json:"sslCommonName"`
|
SSLCommonName string `json:"sslCommonName"`
|
||||||
|
|
||||||
|
Deprecated boxedBool `json:"deprecated"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// isZero returns whether the endpoint structure is an empty (zero) value.
|
||||||
|
func (e endpoint) isZero() bool {
|
||||||
|
switch {
|
||||||
|
case len(e.Hostname) != 0:
|
||||||
|
return false
|
||||||
|
case len(e.Protocols) != 0:
|
||||||
|
return false
|
||||||
|
case e.CredentialScope != (credentialScope{}):
|
||||||
|
return false
|
||||||
|
case len(e.SignatureVersions) != 0:
|
||||||
|
return false
|
||||||
|
case len(e.SSLCommonName) != 0:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
@ -271,7 +475,7 @@ func getByPriority(s []string, p []string, def string) string {
|
||||||
return s[0]
|
return s[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e endpoint) resolve(service, partitionID, region, dnsSuffix string, defs []endpoint, opts Options) (ResolvedEndpoint, error) {
|
func (e endpoint) resolve(service, partitionID, region, dnsSuffixTemplateVariable, dnsSuffix string, defs []endpoint, opts Options) (ResolvedEndpoint, error) {
|
||||||
var merged endpoint
|
var merged endpoint
|
||||||
for _, def := range defs {
|
for _, def := range defs {
|
||||||
merged.mergeIn(def)
|
merged.mergeIn(def)
|
||||||
|
|
@ -292,23 +496,26 @@ func (e endpoint) resolve(service, partitionID, region, dnsSuffix string, defs [
|
||||||
}
|
}
|
||||||
|
|
||||||
hostname := e.Hostname
|
hostname := e.Hostname
|
||||||
// Offset the hostname for dualstack if enabled
|
|
||||||
if opts.UseDualStack && e.HasDualStack == boxedTrue {
|
|
||||||
hostname = e.DualStackHostname
|
|
||||||
region = signingRegion
|
|
||||||
}
|
|
||||||
|
|
||||||
if !validateInputRegion(region) {
|
if !validateInputRegion(region) {
|
||||||
return ResolvedEndpoint{}, fmt.Errorf("invalid region identifier format provided")
|
return ResolvedEndpoint{}, fmt.Errorf("invalid region identifier format provided")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(merged.DNSSuffix) > 0 {
|
||||||
|
dnsSuffix = merged.DNSSuffix
|
||||||
|
}
|
||||||
|
|
||||||
u := strings.Replace(hostname, "{service}", service, 1)
|
u := strings.Replace(hostname, "{service}", service, 1)
|
||||||
u = strings.Replace(u, "{region}", region, 1)
|
u = strings.Replace(u, "{region}", region, 1)
|
||||||
u = strings.Replace(u, "{dnsSuffix}", dnsSuffix, 1)
|
u = strings.Replace(u, dnsSuffixTemplateVariable, dnsSuffix, 1)
|
||||||
|
|
||||||
scheme := getEndpointScheme(e.Protocols, opts.DisableSSL)
|
scheme := getEndpointScheme(e.Protocols, opts.DisableSSL)
|
||||||
u = fmt.Sprintf("%s://%s", scheme, u)
|
u = fmt.Sprintf("%s://%s", scheme, u)
|
||||||
|
|
||||||
|
if e.Deprecated == boxedTrue && opts.LogDeprecated && opts.Logger != nil {
|
||||||
|
opts.Logger.Log(fmt.Sprintf("endpoint identifier %q, url %q marked as deprecated", region, u))
|
||||||
|
}
|
||||||
|
|
||||||
return ResolvedEndpoint{
|
return ResolvedEndpoint{
|
||||||
URL: u,
|
URL: u,
|
||||||
PartitionID: partitionID,
|
PartitionID: partitionID,
|
||||||
|
|
@ -346,11 +553,11 @@ func (e *endpoint) mergeIn(other endpoint) {
|
||||||
if len(other.SSLCommonName) > 0 {
|
if len(other.SSLCommonName) > 0 {
|
||||||
e.SSLCommonName = other.SSLCommonName
|
e.SSLCommonName = other.SSLCommonName
|
||||||
}
|
}
|
||||||
if other.HasDualStack != boxedBoolUnset {
|
if len(other.DNSSuffix) > 0 {
|
||||||
e.HasDualStack = other.HasDualStack
|
e.DNSSuffix = other.DNSSuffix
|
||||||
}
|
}
|
||||||
if len(other.DualStackHostname) > 0 {
|
if other.Deprecated != boxedBoolUnset {
|
||||||
e.DualStackHostname = other.DualStackHostname
|
e.Deprecated = other.Deprecated
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -155,6 +155,56 @@ func serviceSet(ps partitions) map[string]struct{} {
|
||||||
return set
|
return set
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func endpointVariantSetter(variant endpointVariant) (string, error) {
|
||||||
|
if variant == 0 {
|
||||||
|
return "0", nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if variant > (fipsVariant | dualStackVariant) {
|
||||||
|
return "", fmt.Errorf("unknown endpoint variant")
|
||||||
|
}
|
||||||
|
|
||||||
|
var symbols []string
|
||||||
|
if variant&fipsVariant != 0 {
|
||||||
|
symbols = append(symbols, "fipsVariant")
|
||||||
|
}
|
||||||
|
if variant&dualStackVariant != 0 {
|
||||||
|
symbols = append(symbols, "dualStackVariant")
|
||||||
|
}
|
||||||
|
v := strings.Join(symbols, "|")
|
||||||
|
|
||||||
|
return v, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func endpointKeySetter(e endpointKey) (string, error) {
|
||||||
|
var sb strings.Builder
|
||||||
|
sb.WriteString("endpointKey{\n")
|
||||||
|
sb.WriteString(fmt.Sprintf("Region: %q,\n", e.Region))
|
||||||
|
if e.Variant != 0 {
|
||||||
|
variantSetter, err := endpointVariantSetter(e.Variant)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
sb.WriteString(fmt.Sprintf("Variant: %s,\n", variantSetter))
|
||||||
|
}
|
||||||
|
sb.WriteString("}")
|
||||||
|
return sb.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func defaultKeySetter(e defaultKey) (string, error) {
|
||||||
|
var sb strings.Builder
|
||||||
|
sb.WriteString("defaultKey{\n")
|
||||||
|
if e.Variant != 0 {
|
||||||
|
variantSetter, err := endpointVariantSetter(e.Variant)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
sb.WriteString(fmt.Sprintf("Variant: %s,\n", variantSetter))
|
||||||
|
}
|
||||||
|
sb.WriteString("}")
|
||||||
|
return sb.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
var funcMap = template.FuncMap{
|
var funcMap = template.FuncMap{
|
||||||
"ToSymbol": toSymbol,
|
"ToSymbol": toSymbol,
|
||||||
"QuoteString": quoteString,
|
"QuoteString": quoteString,
|
||||||
|
|
@ -167,6 +217,9 @@ var funcMap = template.FuncMap{
|
||||||
"StringSliceIfSet": stringSliceIfSet,
|
"StringSliceIfSet": stringSliceIfSet,
|
||||||
"EndpointIsSet": endpointIsSet,
|
"EndpointIsSet": endpointIsSet,
|
||||||
"ServicesSet": serviceSet,
|
"ServicesSet": serviceSet,
|
||||||
|
"EndpointVariantSetter": endpointVariantSetter,
|
||||||
|
"EndpointKeySetter": endpointKeySetter,
|
||||||
|
"DefaultKeySetter": defaultKeySetter,
|
||||||
}
|
}
|
||||||
|
|
||||||
const v3Tmpl = `
|
const v3Tmpl = `
|
||||||
|
|
@ -272,9 +325,9 @@ partition{
|
||||||
{{ StringIfSet "Name: %q,\n" .Name -}}
|
{{ StringIfSet "Name: %q,\n" .Name -}}
|
||||||
{{ StringIfSet "DNSSuffix: %q,\n" .DNSSuffix -}}
|
{{ StringIfSet "DNSSuffix: %q,\n" .DNSSuffix -}}
|
||||||
RegionRegex: {{ template "gocode RegionRegex" .RegionRegex }},
|
RegionRegex: {{ template "gocode RegionRegex" .RegionRegex }},
|
||||||
{{ if EndpointIsSet .Defaults -}}
|
{{ if (gt (len .Defaults) 0) -}}
|
||||||
Defaults: {{ template "gocode Endpoint" .Defaults }},
|
Defaults: {{ template "gocode Defaults" .Defaults -}},
|
||||||
{{- end }}
|
{{ end -}}
|
||||||
Regions: {{ template "gocode Regions" .Regions }},
|
Regions: {{ template "gocode Regions" .Regions }},
|
||||||
Services: {{ template "gocode Services" .Services }},
|
Services: {{ template "gocode Services" .Services }},
|
||||||
}
|
}
|
||||||
|
|
@ -315,19 +368,27 @@ services{
|
||||||
service{
|
service{
|
||||||
{{ StringIfSet "PartitionEndpoint: %q,\n" .PartitionEndpoint -}}
|
{{ StringIfSet "PartitionEndpoint: %q,\n" .PartitionEndpoint -}}
|
||||||
{{ BoxedBoolIfSet "IsRegionalized: %s,\n" .IsRegionalized -}}
|
{{ BoxedBoolIfSet "IsRegionalized: %s,\n" .IsRegionalized -}}
|
||||||
{{ if EndpointIsSet .Defaults -}}
|
{{ if (gt (len .Defaults) 0) -}}
|
||||||
Defaults: {{ template "gocode Endpoint" .Defaults -}},
|
Defaults: {{ template "gocode Defaults" .Defaults -}},
|
||||||
{{- end }}
|
{{ end -}}
|
||||||
{{ if .Endpoints -}}
|
{{ if .Endpoints -}}
|
||||||
Endpoints: {{ template "gocode Endpoints" .Endpoints }},
|
Endpoints: {{ template "gocode Endpoints" .Endpoints }},
|
||||||
{{- end }}
|
{{- end }}
|
||||||
}
|
}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
{{ define "gocode Endpoints" -}}
|
{{ define "gocode Defaults" -}}
|
||||||
endpoints{
|
endpointDefaults{
|
||||||
{{ range $id, $endpoint := . -}}
|
{{ range $id, $endpoint := . -}}
|
||||||
"{{ $id }}": {{ template "gocode Endpoint" $endpoint }},
|
{{ DefaultKeySetter $id }}: {{ template "gocode Endpoint" $endpoint }},
|
||||||
|
{{ end }}
|
||||||
|
}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{ define "gocode Endpoints" -}}
|
||||||
|
serviceEndpoints{
|
||||||
|
{{ range $id, $endpoint := . -}}
|
||||||
|
{{ EndpointKeySetter $id }}: {{ template "gocode Endpoint" $endpoint }},
|
||||||
{{ end }}
|
{{ end }}
|
||||||
}
|
}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
@ -335,6 +396,7 @@ endpoints{
|
||||||
{{ define "gocode Endpoint" -}}
|
{{ define "gocode Endpoint" -}}
|
||||||
endpoint{
|
endpoint{
|
||||||
{{ StringIfSet "Hostname: %q,\n" .Hostname -}}
|
{{ StringIfSet "Hostname: %q,\n" .Hostname -}}
|
||||||
|
{{ StringIfSet "DNSSuffix: %q,\n" .DNSSuffix -}}
|
||||||
{{ StringIfSet "SSLCommonName: %q,\n" .SSLCommonName -}}
|
{{ StringIfSet "SSLCommonName: %q,\n" .SSLCommonName -}}
|
||||||
{{ StringSliceIfSet "Protocols: []string{%s},\n" .Protocols -}}
|
{{ StringSliceIfSet "Protocols: []string{%s},\n" .Protocols -}}
|
||||||
{{ StringSliceIfSet "SignatureVersions: []string{%s},\n" .SignatureVersions -}}
|
{{ StringSliceIfSet "SignatureVersions: []string{%s},\n" .SignatureVersions -}}
|
||||||
|
|
@ -344,9 +406,7 @@ endpoint{
|
||||||
{{ StringIfSet "Service: %q,\n" .CredentialScope.Service -}}
|
{{ StringIfSet "Service: %q,\n" .CredentialScope.Service -}}
|
||||||
},
|
},
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{ BoxedBoolIfSet "HasDualStack: %s,\n" .HasDualStack -}}
|
{{ BoxedBoolIfSet "Deprecated: %s,\n" .Deprecated -}}
|
||||||
{{ StringIfSet "DualStackHostname: %q,\n" .DualStackHostname -}}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
`
|
`
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,9 @@ const (
|
||||||
// wire unmarshaled message content of requests and responses made while
|
// wire unmarshaled message content of requests and responses made while
|
||||||
// using the SDK Will also enable LogDebug.
|
// using the SDK Will also enable LogDebug.
|
||||||
LogDebugWithEventStreamBody
|
LogDebugWithEventStreamBody
|
||||||
|
|
||||||
|
// LogDebugWithDeprecated states the SDK should log details about deprecated functionality.
|
||||||
|
LogDebugWithDeprecated
|
||||||
)
|
)
|
||||||
|
|
||||||
// A Logger is a minimalistic interface for the SDK to log messages to. Should
|
// A Logger is a minimalistic interface for the SDK to log messages to. Should
|
||||||
|
|
|
||||||
|
|
@ -285,5 +285,83 @@ The custom EC2 IMDS endpoint can also be specified via the Session options.
|
||||||
sess, err := session.NewSessionWithOptions(session.Options{
|
sess, err := session.NewSessionWithOptions(session.Options{
|
||||||
EC2MetadataEndpoint: "http://[::1]",
|
EC2MetadataEndpoint: "http://[::1]",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
FIPS and DualStack Endpoints
|
||||||
|
|
||||||
|
The SDK can be configured to resolve an endpoint with certain capabilities such as FIPS and DualStack.
|
||||||
|
|
||||||
|
You can configure a FIPS endpoint using an environment variable, shared config ($HOME/.aws/config),
|
||||||
|
or programmatically.
|
||||||
|
|
||||||
|
To configure a FIPS endpoint set the environment variable set the AWS_USE_FIPS_ENDPOINT to true or false to enable
|
||||||
|
or disable FIPS endpoint resolution.
|
||||||
|
|
||||||
|
AWS_USE_FIPS_ENDPOINT=true
|
||||||
|
|
||||||
|
To configure a FIPS endpoint using shared config, set use_fips_endpoint to true or false to enable
|
||||||
|
or disable FIPS endpoint resolution.
|
||||||
|
|
||||||
|
[profile myprofile]
|
||||||
|
region=us-west-2
|
||||||
|
use_fips_endpoint=true
|
||||||
|
|
||||||
|
To configure a FIPS endpoint programmatically
|
||||||
|
|
||||||
|
// Option 1: Configure it on a session for all clients
|
||||||
|
sess, err := session.NewSessionWithOptions(session.Options{
|
||||||
|
UseFIPSEndpoint: endpoints.FIPSEndpointStateEnabled,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
// handle error
|
||||||
|
}
|
||||||
|
|
||||||
|
client := s3.New(sess)
|
||||||
|
|
||||||
|
// Option 2: Configure it per client
|
||||||
|
sess, err := session.NewSession()
|
||||||
|
if err != nil {
|
||||||
|
// handle error
|
||||||
|
}
|
||||||
|
|
||||||
|
client := s3.New(sess, &aws.Config{
|
||||||
|
UseFIPSEndpoint: endpoints.FIPSEndpointStateEnabled,
|
||||||
|
})
|
||||||
|
|
||||||
|
You can configure a DualStack endpoint using an environment variable, shared config ($HOME/.aws/config),
|
||||||
|
or programmatically.
|
||||||
|
|
||||||
|
To configure a DualStack endpoint set the environment variable set the AWS_USE_DUALSTACK_ENDPOINT to true or false to
|
||||||
|
enable or disable DualStack endpoint resolution.
|
||||||
|
|
||||||
|
AWS_USE_DUALSTACK_ENDPOINT=true
|
||||||
|
|
||||||
|
To configure a DualStack endpoint using shared config, set use_dualstack_endpoint to true or false to enable
|
||||||
|
or disable DualStack endpoint resolution.
|
||||||
|
|
||||||
|
[profile myprofile]
|
||||||
|
region=us-west-2
|
||||||
|
use_dualstack_endpoint=true
|
||||||
|
|
||||||
|
To configure a DualStack endpoint programmatically
|
||||||
|
|
||||||
|
// Option 1: Configure it on a session for all clients
|
||||||
|
sess, err := session.NewSessionWithOptions(session.Options{
|
||||||
|
UseDualStackEndpoint: endpoints.DualStackEndpointStateEnabled,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
// handle error
|
||||||
|
}
|
||||||
|
|
||||||
|
client := s3.New(sess)
|
||||||
|
|
||||||
|
// Option 2: Configure it per client
|
||||||
|
sess, err := session.NewSession()
|
||||||
|
if err != nil {
|
||||||
|
// handle error
|
||||||
|
}
|
||||||
|
|
||||||
|
client := s3.New(sess, &aws.Config{
|
||||||
|
UseDualStackEndpoint: endpoints.DualStackEndpointStateEnabled,
|
||||||
|
})
|
||||||
*/
|
*/
|
||||||
package session
|
package session
|
||||||
|
|
|
||||||
|
|
@ -170,6 +170,18 @@ type envConfig struct {
|
||||||
//
|
//
|
||||||
// AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE=IPv6
|
// AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE=IPv6
|
||||||
EC2IMDSEndpointMode endpoints.EC2IMDSEndpointModeState
|
EC2IMDSEndpointMode endpoints.EC2IMDSEndpointModeState
|
||||||
|
|
||||||
|
// Specifies that SDK clients must resolve a dual-stack endpoint for
|
||||||
|
// services.
|
||||||
|
//
|
||||||
|
// AWS_USE_DUALSTACK_ENDPOINT=true
|
||||||
|
UseDualStackEndpoint endpoints.DualStackEndpointState
|
||||||
|
|
||||||
|
// Specifies that SDK clients must resolve a FIPS endpoint for
|
||||||
|
// services.
|
||||||
|
//
|
||||||
|
// AWS_USE_FIPS_ENDPOINT=true
|
||||||
|
UseFIPSEndpoint endpoints.FIPSEndpointState
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
@ -248,6 +260,12 @@ var (
|
||||||
useClientTLSKey = []string{
|
useClientTLSKey = []string{
|
||||||
"AWS_SDK_GO_CLIENT_TLS_KEY",
|
"AWS_SDK_GO_CLIENT_TLS_KEY",
|
||||||
}
|
}
|
||||||
|
awsUseDualStackEndpoint = []string{
|
||||||
|
"AWS_USE_DUALSTACK_ENDPOINT",
|
||||||
|
}
|
||||||
|
awsUseFIPSEndpoint = []string{
|
||||||
|
"AWS_USE_FIPS_ENDPOINT",
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
// loadEnvConfig retrieves the SDK's environment configuration.
|
// loadEnvConfig retrieves the SDK's environment configuration.
|
||||||
|
|
@ -376,6 +394,14 @@ func envConfigLoad(enableSharedConfig bool) (envConfig, error) {
|
||||||
return envConfig{}, err
|
return envConfig{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := setUseDualStackEndpointFromEnvVal(&cfg.UseDualStackEndpoint, awsUseDualStackEndpoint); err != nil {
|
||||||
|
return cfg, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := setUseFIPSEndpointFromEnvVal(&cfg.UseFIPSEndpoint, awsUseFIPSEndpoint); err != nil {
|
||||||
|
return cfg, err
|
||||||
|
}
|
||||||
|
|
||||||
return cfg, nil
|
return cfg, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -401,3 +427,45 @@ func setEC2IMDSEndpointMode(mode *endpoints.EC2IMDSEndpointModeState, keys []str
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setUseDualStackEndpointFromEnvVal(dst *endpoints.DualStackEndpointState, keys []string) error {
|
||||||
|
for _, k := range keys {
|
||||||
|
value := os.Getenv(k)
|
||||||
|
if len(value) == 0 {
|
||||||
|
continue // skip if empty
|
||||||
|
}
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case strings.EqualFold(value, "true"):
|
||||||
|
*dst = endpoints.DualStackEndpointStateEnabled
|
||||||
|
case strings.EqualFold(value, "false"):
|
||||||
|
*dst = endpoints.DualStackEndpointStateDisabled
|
||||||
|
default:
|
||||||
|
return fmt.Errorf(
|
||||||
|
"invalid value for environment variable, %s=%s, need true, false",
|
||||||
|
k, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func setUseFIPSEndpointFromEnvVal(dst *endpoints.FIPSEndpointState, keys []string) error {
|
||||||
|
for _, k := range keys {
|
||||||
|
value := os.Getenv(k)
|
||||||
|
if len(value) == 0 {
|
||||||
|
continue // skip if empty
|
||||||
|
}
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case strings.EqualFold(value, "true"):
|
||||||
|
*dst = endpoints.FIPSEndpointStateEnabled
|
||||||
|
case strings.EqualFold(value, "false"):
|
||||||
|
*dst = endpoints.FIPSEndpointStateDisabled
|
||||||
|
default:
|
||||||
|
return fmt.Errorf(
|
||||||
|
"invalid value for environment variable, %s=%s, need true, false",
|
||||||
|
k, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
|
@ -792,6 +793,20 @@ func mergeConfigSrcs(cfg, userCfg *aws.Config,
|
||||||
cfg.S3UseARNRegion = &sharedCfg.S3UseARNRegion
|
cfg.S3UseARNRegion = &sharedCfg.S3UseARNRegion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, v := range []endpoints.DualStackEndpointState{userCfg.UseDualStackEndpoint, envCfg.UseDualStackEndpoint, sharedCfg.UseDualStackEndpoint} {
|
||||||
|
if v != endpoints.DualStackEndpointStateUnset {
|
||||||
|
cfg.UseDualStackEndpoint = v
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range []endpoints.FIPSEndpointState{userCfg.UseFIPSEndpoint, envCfg.UseFIPSEndpoint, sharedCfg.UseFIPSEndpoint} {
|
||||||
|
if v != endpoints.FIPSEndpointStateUnset {
|
||||||
|
cfg.UseFIPSEndpoint = v
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -845,8 +860,10 @@ func (s *Session) Copy(cfgs ...*aws.Config) *Session {
|
||||||
func (s *Session) ClientConfig(service string, cfgs ...*aws.Config) client.Config {
|
func (s *Session) ClientConfig(service string, cfgs ...*aws.Config) client.Config {
|
||||||
s = s.Copy(cfgs...)
|
s = s.Copy(cfgs...)
|
||||||
|
|
||||||
|
resolvedRegion := normalizeRegion(s.Config)
|
||||||
|
|
||||||
region := aws.StringValue(s.Config.Region)
|
region := aws.StringValue(s.Config.Region)
|
||||||
resolved, err := s.resolveEndpoint(service, region, s.Config)
|
resolved, err := s.resolveEndpoint(service, region, resolvedRegion, s.Config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.Handlers.Validate.PushBack(func(r *request.Request) {
|
s.Handlers.Validate.PushBack(func(r *request.Request) {
|
||||||
if len(r.ClientInfo.Endpoint) != 0 {
|
if len(r.ClientInfo.Endpoint) != 0 {
|
||||||
|
|
@ -867,12 +884,13 @@ func (s *Session) ClientConfig(service string, cfgs ...*aws.Config) client.Confi
|
||||||
SigningRegion: resolved.SigningRegion,
|
SigningRegion: resolved.SigningRegion,
|
||||||
SigningNameDerived: resolved.SigningNameDerived,
|
SigningNameDerived: resolved.SigningNameDerived,
|
||||||
SigningName: resolved.SigningName,
|
SigningName: resolved.SigningName,
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const ec2MetadataServiceID = "ec2metadata"
|
const ec2MetadataServiceID = "ec2metadata"
|
||||||
|
|
||||||
func (s *Session) resolveEndpoint(service, region string, cfg *aws.Config) (endpoints.ResolvedEndpoint, error) {
|
func (s *Session) resolveEndpoint(service, region, resolvedRegion string, cfg *aws.Config) (endpoints.ResolvedEndpoint, error) {
|
||||||
|
|
||||||
if ep := aws.StringValue(cfg.Endpoint); len(ep) != 0 {
|
if ep := aws.StringValue(cfg.Endpoint); len(ep) != 0 {
|
||||||
return endpoints.ResolvedEndpoint{
|
return endpoints.ResolvedEndpoint{
|
||||||
|
|
@ -884,7 +902,12 @@ func (s *Session) resolveEndpoint(service, region string, cfg *aws.Config) (endp
|
||||||
resolved, err := cfg.EndpointResolver.EndpointFor(service, region,
|
resolved, err := cfg.EndpointResolver.EndpointFor(service, region,
|
||||||
func(opt *endpoints.Options) {
|
func(opt *endpoints.Options) {
|
||||||
opt.DisableSSL = aws.BoolValue(cfg.DisableSSL)
|
opt.DisableSSL = aws.BoolValue(cfg.DisableSSL)
|
||||||
|
|
||||||
opt.UseDualStack = aws.BoolValue(cfg.UseDualStack)
|
opt.UseDualStack = aws.BoolValue(cfg.UseDualStack)
|
||||||
|
opt.UseDualStackEndpoint = cfg.UseDualStackEndpoint
|
||||||
|
|
||||||
|
opt.UseFIPSEndpoint = cfg.UseFIPSEndpoint
|
||||||
|
|
||||||
// Support for STSRegionalEndpoint where the STSRegionalEndpoint is
|
// Support for STSRegionalEndpoint where the STSRegionalEndpoint is
|
||||||
// provided in envConfig or sharedConfig with envConfig getting
|
// provided in envConfig or sharedConfig with envConfig getting
|
||||||
// precedence.
|
// precedence.
|
||||||
|
|
@ -898,6 +921,11 @@ func (s *Session) resolveEndpoint(service, region string, cfg *aws.Config) (endp
|
||||||
// Support the condition where the service is modeled but its
|
// Support the condition where the service is modeled but its
|
||||||
// endpoint metadata is not available.
|
// endpoint metadata is not available.
|
||||||
opt.ResolveUnknownService = true
|
opt.ResolveUnknownService = true
|
||||||
|
|
||||||
|
opt.ResolvedRegion = resolvedRegion
|
||||||
|
|
||||||
|
opt.Logger = cfg.Logger
|
||||||
|
opt.LogDeprecated = cfg.LogLevel.Matches(aws.LogDebugWithDeprecated)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -913,6 +941,8 @@ func (s *Session) resolveEndpoint(service, region string, cfg *aws.Config) (endp
|
||||||
func (s *Session) ClientConfigNoResolveEndpoint(cfgs ...*aws.Config) client.Config {
|
func (s *Session) ClientConfigNoResolveEndpoint(cfgs ...*aws.Config) client.Config {
|
||||||
s = s.Copy(cfgs...)
|
s = s.Copy(cfgs...)
|
||||||
|
|
||||||
|
resolvedRegion := normalizeRegion(s.Config)
|
||||||
|
|
||||||
var resolved endpoints.ResolvedEndpoint
|
var resolved endpoints.ResolvedEndpoint
|
||||||
if ep := aws.StringValue(s.Config.Endpoint); len(ep) > 0 {
|
if ep := aws.StringValue(s.Config.Endpoint); len(ep) > 0 {
|
||||||
resolved.URL = endpoints.AddScheme(ep, aws.BoolValue(s.Config.DisableSSL))
|
resolved.URL = endpoints.AddScheme(ep, aws.BoolValue(s.Config.DisableSSL))
|
||||||
|
|
@ -926,6 +956,7 @@ func (s *Session) ClientConfigNoResolveEndpoint(cfgs ...*aws.Config) client.Conf
|
||||||
SigningRegion: resolved.SigningRegion,
|
SigningRegion: resolved.SigningRegion,
|
||||||
SigningNameDerived: resolved.SigningNameDerived,
|
SigningNameDerived: resolved.SigningNameDerived,
|
||||||
SigningName: resolved.SigningName,
|
SigningName: resolved.SigningName,
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -939,3 +970,23 @@ func (s *Session) logDeprecatedNewSessionError(msg string, err error, cfgs []*aw
|
||||||
r.Error = err
|
r.Error = err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// normalizeRegion resolves / normalizes the configured region (converts pseudo fips regions), and modifies the provided
|
||||||
|
// config to have the equivalent options for resolution and returns the resolved region name.
|
||||||
|
func normalizeRegion(cfg *aws.Config) (resolved string) {
|
||||||
|
const fipsInfix = "-fips-"
|
||||||
|
const fipsPrefix = "-fips"
|
||||||
|
const fipsSuffix = "fips-"
|
||||||
|
|
||||||
|
region := aws.StringValue(cfg.Region)
|
||||||
|
|
||||||
|
if strings.Contains(region, fipsInfix) ||
|
||||||
|
strings.Contains(region, fipsPrefix) ||
|
||||||
|
strings.Contains(region, fipsSuffix) {
|
||||||
|
resolved = strings.Replace(strings.Replace(strings.Replace(
|
||||||
|
region, fipsInfix, "-", -1), fipsPrefix, "", -1), fipsSuffix, "", -1)
|
||||||
|
cfg.UseFIPSEndpoint = endpoints.FIPSEndpointStateEnabled
|
||||||
|
}
|
||||||
|
|
||||||
|
return resolved
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,12 @@ const (
|
||||||
|
|
||||||
// EC2 IMDS Endpoint
|
// EC2 IMDS Endpoint
|
||||||
ec2MetadataServiceEndpointKey = "ec2_metadata_service_endpoint"
|
ec2MetadataServiceEndpointKey = "ec2_metadata_service_endpoint"
|
||||||
|
|
||||||
|
// Use DualStack Endpoint Resolution
|
||||||
|
useDualStackEndpoint = "use_dualstack_endpoint"
|
||||||
|
|
||||||
|
// Use FIPS Endpoint Resolution
|
||||||
|
useFIPSEndpointKey = "use_fips_endpoint"
|
||||||
)
|
)
|
||||||
|
|
||||||
// sharedConfig represents the configuration fields of the SDK config files.
|
// sharedConfig represents the configuration fields of the SDK config files.
|
||||||
|
|
@ -161,6 +167,18 @@ type sharedConfig struct {
|
||||||
//
|
//
|
||||||
// ec2_metadata_service_endpoint=http://fd00:ec2::254
|
// ec2_metadata_service_endpoint=http://fd00:ec2::254
|
||||||
EC2IMDSEndpoint string
|
EC2IMDSEndpoint string
|
||||||
|
|
||||||
|
// Specifies that SDK clients must resolve a dual-stack endpoint for
|
||||||
|
// services.
|
||||||
|
//
|
||||||
|
// use_dualstack_endpoint=true
|
||||||
|
UseDualStackEndpoint endpoints.DualStackEndpointState
|
||||||
|
|
||||||
|
// Specifies that SDK clients must resolve a FIPS endpoint for
|
||||||
|
// services.
|
||||||
|
//
|
||||||
|
// use_fips_endpoint=true
|
||||||
|
UseFIPSEndpoint endpoints.FIPSEndpointState
|
||||||
}
|
}
|
||||||
|
|
||||||
type sharedConfigFile struct {
|
type sharedConfigFile struct {
|
||||||
|
|
@ -356,6 +374,10 @@ func (cfg *sharedConfig) setFromIniFile(profile string, file sharedConfigFile, e
|
||||||
ec2MetadataServiceEndpointModeKey, file.Filename, err)
|
ec2MetadataServiceEndpointModeKey, file.Filename, err)
|
||||||
}
|
}
|
||||||
updateString(&cfg.EC2IMDSEndpoint, section, ec2MetadataServiceEndpointKey)
|
updateString(&cfg.EC2IMDSEndpoint, section, ec2MetadataServiceEndpointKey)
|
||||||
|
|
||||||
|
updateUseDualStackEndpoint(&cfg.UseDualStackEndpoint, section, useDualStackEndpoint)
|
||||||
|
|
||||||
|
updateUseFIPSEndpoint(&cfg.UseFIPSEndpoint, section, useFIPSEndpointKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
updateString(&cfg.CredentialProcess, section, credentialProcessKey)
|
updateString(&cfg.CredentialProcess, section, credentialProcessKey)
|
||||||
|
|
@ -673,3 +695,35 @@ func (e CredentialRequiresARNError) OrigErr() error {
|
||||||
func (e CredentialRequiresARNError) Error() string {
|
func (e CredentialRequiresARNError) Error() string {
|
||||||
return awserr.SprintError(e.Code(), e.Message(), "", nil)
|
return awserr.SprintError(e.Code(), e.Message(), "", nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// updateEndpointDiscoveryType will only update the dst with the value in the section, if
|
||||||
|
// a valid key and corresponding EndpointDiscoveryType is found.
|
||||||
|
func updateUseDualStackEndpoint(dst *endpoints.DualStackEndpointState, section ini.Section, key string) {
|
||||||
|
if !section.Has(key) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if section.Bool(key) {
|
||||||
|
*dst = endpoints.DualStackEndpointStateEnabled
|
||||||
|
} else {
|
||||||
|
*dst = endpoints.DualStackEndpointStateDisabled
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// updateEndpointDiscoveryType will only update the dst with the value in the section, if
|
||||||
|
// a valid key and corresponding EndpointDiscoveryType is found.
|
||||||
|
func updateUseFIPSEndpoint(dst *endpoints.FIPSEndpointState, section ini.Section, key string) {
|
||||||
|
if !section.Has(key) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if section.Bool(key) {
|
||||||
|
*dst = endpoints.FIPSEndpointStateEnabled
|
||||||
|
} else {
|
||||||
|
*dst = endpoints.FIPSEndpointStateDisabled
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -634,21 +634,25 @@ func (ctx *signingCtx) buildCanonicalHeaders(r rule, header http.Header) {
|
||||||
ctx.Query.Set("X-Amz-SignedHeaders", ctx.signedHeaders)
|
ctx.Query.Set("X-Amz-SignedHeaders", ctx.signedHeaders)
|
||||||
}
|
}
|
||||||
|
|
||||||
headerValues := make([]string, len(headers))
|
headerItems := make([]string, len(headers))
|
||||||
for i, k := range headers {
|
for i, k := range headers {
|
||||||
if k == "host" {
|
if k == "host" {
|
||||||
if ctx.Request.Host != "" {
|
if ctx.Request.Host != "" {
|
||||||
headerValues[i] = "host:" + ctx.Request.Host
|
headerItems[i] = "host:" + ctx.Request.Host
|
||||||
} else {
|
} else {
|
||||||
headerValues[i] = "host:" + ctx.Request.URL.Host
|
headerItems[i] = "host:" + ctx.Request.URL.Host
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
headerValues[i] = k + ":" +
|
headerValues := make([]string, len(ctx.SignedHeaderVals[k]))
|
||||||
strings.Join(ctx.SignedHeaderVals[k], ",")
|
for i, v := range ctx.SignedHeaderVals[k] {
|
||||||
|
headerValues[i] = strings.TrimSpace(v)
|
||||||
|
}
|
||||||
|
headerItems[i] = k + ":" +
|
||||||
|
strings.Join(headerValues, ",")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stripExcessSpaces(headerValues)
|
stripExcessSpaces(headerItems)
|
||||||
ctx.canonicalHeaders = strings.Join(headerValues, "\n")
|
ctx.canonicalHeaders = strings.Join(headerItems, "\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ctx *signingCtx) buildCanonicalString() {
|
func (ctx *signingCtx) buildCanonicalString() {
|
||||||
|
|
|
||||||
|
|
@ -5,4 +5,4 @@ package aws
|
||||||
const SDKName = "aws-sdk-go"
|
const SDKName = "aws-sdk-go"
|
||||||
|
|
||||||
// SDKVersion is the version of this SDK
|
// SDKVersion is the version of this SDK
|
||||||
const SDKVersion = "1.40.38"
|
const SDKVersion = "1.42.5"
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"unicode"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
@ -18,7 +19,7 @@ var literalValues = [][]rune{
|
||||||
|
|
||||||
func isBoolValue(b []rune) bool {
|
func isBoolValue(b []rune) bool {
|
||||||
for _, lv := range literalValues {
|
for _, lv := range literalValues {
|
||||||
if isLitValue(lv, b) {
|
if isCaselessLitValue(lv, b) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -39,6 +40,21 @@ func isLitValue(want, have []rune) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// isCaselessLitValue is a caseless value comparison, assumes want is already lower-cased for efficiency.
|
||||||
|
func isCaselessLitValue(want, have []rune) bool {
|
||||||
|
if len(have) < len(want) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < len(want); i++ {
|
||||||
|
if want[i] != unicode.ToLower(have[i]) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// isNumberValue will return whether not the leading characters in
|
// isNumberValue will return whether not the leading characters in
|
||||||
// a byte slice is a number. A number is delimited by whitespace or
|
// a byte slice is a number. A number is delimited by whitespace or
|
||||||
// the newline token.
|
// the newline token.
|
||||||
|
|
@ -177,7 +193,7 @@ func newValue(t ValueType, base int, raw []rune) (Value, error) {
|
||||||
case QuotedStringType:
|
case QuotedStringType:
|
||||||
v.str = string(raw[1 : len(raw)-1])
|
v.str = string(raw[1 : len(raw)-1])
|
||||||
case BoolType:
|
case BoolType:
|
||||||
v.boolean = runeCompare(v.raw, runesTrue)
|
v.boolean = isCaselessLitValue(runesTrue, v.raw)
|
||||||
}
|
}
|
||||||
|
|
||||||
// issue 2253
|
// issue 2253
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ func getBoolValue(b []rune) (int, error) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if isLitValue(lv, b) {
|
if isCaselessLitValue(lv, b) {
|
||||||
n = len(lv)
|
n = len(lv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
package s3shared
|
package s3shared
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
awsarn "github.com/aws/aws-sdk-go/aws/arn"
|
awsarn "github.com/aws/aws-sdk-go/aws/arn"
|
||||||
"github.com/aws/aws-sdk-go/aws/request"
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
|
@ -25,18 +23,6 @@ func (r ResourceRequest) AllowCrossRegion() bool {
|
||||||
return aws.BoolValue(r.Request.Config.S3UseARNRegion)
|
return aws.BoolValue(r.Request.Config.S3UseARNRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UseFIPS returns true if request config region is FIPS
|
|
||||||
func (r ResourceRequest) UseFIPS() bool {
|
|
||||||
return IsFIPS(aws.StringValue(r.Request.Config.Region))
|
|
||||||
}
|
|
||||||
|
|
||||||
// ResourceConfiguredForFIPS returns true if resource ARNs region is FIPS
|
|
||||||
//
|
|
||||||
// Deprecated: FIPS pseudo-regions will not be in the ARN
|
|
||||||
func (r ResourceRequest) ResourceConfiguredForFIPS() bool {
|
|
||||||
return IsFIPS(r.ARN().Region)
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsCrossPartition returns true if client is configured for another partition, than
|
// IsCrossPartition returns true if client is configured for another partition, than
|
||||||
// the partition that resource ARN region resolves to.
|
// the partition that resource ARN region resolves to.
|
||||||
func (r ResourceRequest) IsCrossPartition() bool {
|
func (r ResourceRequest) IsCrossPartition() bool {
|
||||||
|
|
@ -53,11 +39,6 @@ func (r ResourceRequest) HasCustomEndpoint() bool {
|
||||||
return len(aws.StringValue(r.Request.Config.Endpoint)) > 0
|
return len(aws.StringValue(r.Request.Config.Endpoint)) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsFIPS returns true if region is a fips region
|
|
||||||
func IsFIPS(clientRegion string) bool {
|
|
||||||
return strings.HasPrefix(clientRegion, "fips-") || strings.HasSuffix(clientRegion, "-fips")
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsCrossRegion returns true if request signing region is not same as configured region
|
// IsCrossRegion returns true if request signing region is not same as configured region
|
||||||
func IsCrossRegion(req *request.Request, otherRegion string) bool {
|
func IsCrossRegion(req *request.Request, otherRegion string) bool {
|
||||||
return req.ClientInfo.SigningRegion != otherRegion
|
return req.ClientInfo.SigningRegion != otherRegion
|
||||||
|
|
|
||||||
|
|
@ -82,13 +82,17 @@ func buildStruct(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag)
|
||||||
field, _ := value.Type().FieldByName(payload)
|
field, _ := value.Type().FieldByName(payload)
|
||||||
tag = field.Tag
|
tag = field.Tag
|
||||||
value = elemOf(value.FieldByName(payload))
|
value = elemOf(value.FieldByName(payload))
|
||||||
|
if !value.IsValid() && tag.Get("type") != "structure" {
|
||||||
if !value.IsValid() {
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
buf.WriteByte('{')
|
buf.WriteByte('{')
|
||||||
|
defer buf.WriteString("}")
|
||||||
|
|
||||||
|
if !value.IsValid() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
t := value.Type()
|
t := value.Type()
|
||||||
first := true
|
first := true
|
||||||
|
|
@ -144,8 +148,6 @@ func buildStruct(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buf.WriteString("}")
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,9 +49,8 @@ func Build(req *request.Request) {
|
||||||
buf = emptyJSON
|
buf = emptyJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
if req.ClientInfo.TargetPrefix != "" || string(buf) != "{}" {
|
// Always serialize the body, don't suppress it.
|
||||||
req.SetBufferBody(buf)
|
req.SetBufferBody(buf)
|
||||||
}
|
|
||||||
|
|
||||||
if req.ClientInfo.TargetPrefix != "" {
|
if req.ClientInfo.TargetPrefix != "" {
|
||||||
target := req.ClientInfo.TargetPrefix + "." + req.Operation.Name
|
target := req.ClientInfo.TargetPrefix + "." + req.Operation.Name
|
||||||
|
|
|
||||||
|
|
@ -28,18 +28,27 @@ func PayloadMember(i interface{}) interface{} {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// PayloadType returns the type of a payload field member of i if there is one, or "".
|
const nopayloadPayloadType = "nopayload"
|
||||||
|
|
||||||
|
// PayloadType returns the type of a payload field member of i if there is one,
|
||||||
|
// or "".
|
||||||
func PayloadType(i interface{}) string {
|
func PayloadType(i interface{}) string {
|
||||||
v := reflect.Indirect(reflect.ValueOf(i))
|
v := reflect.Indirect(reflect.ValueOf(i))
|
||||||
if !v.IsValid() {
|
if !v.IsValid() {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
if field, ok := v.Type().FieldByName("_"); ok {
|
if field, ok := v.Type().FieldByName("_"); ok {
|
||||||
|
if noPayload := field.Tag.Get(nopayloadPayloadType); noPayload != "" {
|
||||||
|
return nopayloadPayloadType
|
||||||
|
}
|
||||||
|
|
||||||
if payloadName := field.Tag.Get("payload"); payloadName != "" {
|
if payloadName := field.Tag.Get("payload"); payloadName != "" {
|
||||||
if member, ok := v.Type().FieldByName(payloadName); ok {
|
if member, ok := v.Type().FieldByName(payloadName); ok {
|
||||||
return member.Tag.Get("type")
|
return member.Tag.Get("type")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -48,11 +48,11 @@ const (
|
||||||
// svc := autoscaling.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
// svc := autoscaling.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
||||||
func New(p client.ConfigProvider, cfgs ...*aws.Config) *AutoScaling {
|
func New(p client.ConfigProvider, cfgs ...*aws.Config) *AutoScaling {
|
||||||
c := p.ClientConfig(EndpointsID, cfgs...)
|
c := p.ClientConfig(EndpointsID, cfgs...)
|
||||||
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName)
|
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName, c.ResolvedRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newClient creates, initializes and returns a new service client instance.
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *AutoScaling {
|
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName, resolvedRegion string) *AutoScaling {
|
||||||
svc := &AutoScaling{
|
svc := &AutoScaling{
|
||||||
Client: client.New(
|
Client: client.New(
|
||||||
cfg,
|
cfg,
|
||||||
|
|
@ -64,6 +64,7 @@ func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint,
|
||||||
PartitionID: partitionID,
|
PartitionID: partitionID,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
APIVersion: "2011-01-01",
|
APIVersion: "2011-01-01",
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
},
|
},
|
||||||
handlers,
|
handlers,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -48,11 +48,11 @@ const (
|
||||||
// svc := cloudformation.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
// svc := cloudformation.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
||||||
func New(p client.ConfigProvider, cfgs ...*aws.Config) *CloudFormation {
|
func New(p client.ConfigProvider, cfgs ...*aws.Config) *CloudFormation {
|
||||||
c := p.ClientConfig(EndpointsID, cfgs...)
|
c := p.ClientConfig(EndpointsID, cfgs...)
|
||||||
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName)
|
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName, c.ResolvedRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newClient creates, initializes and returns a new service client instance.
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *CloudFormation {
|
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName, resolvedRegion string) *CloudFormation {
|
||||||
svc := &CloudFormation{
|
svc := &CloudFormation{
|
||||||
Client: client.New(
|
Client: client.New(
|
||||||
cfg,
|
cfg,
|
||||||
|
|
@ -64,6 +64,7 @@ func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint,
|
||||||
PartitionID: partitionID,
|
PartitionID: partitionID,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
APIVersion: "2010-05-15",
|
APIVersion: "2010-05-15",
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
},
|
},
|
||||||
handlers,
|
handlers,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -68,6 +68,10 @@ func fillPresignedURL(r *request.Request) {
|
||||||
func(opt *endpoints.Options) {
|
func(opt *endpoints.Options) {
|
||||||
opt.DisableSSL = aws.BoolValue(cfg.DisableSSL)
|
opt.DisableSSL = aws.BoolValue(cfg.DisableSSL)
|
||||||
opt.UseDualStack = aws.BoolValue(cfg.UseDualStack)
|
opt.UseDualStack = aws.BoolValue(cfg.UseDualStack)
|
||||||
|
opt.UseDualStackEndpoint = cfg.UseDualStackEndpoint
|
||||||
|
opt.UseFIPSEndpoint = cfg.UseFIPSEndpoint
|
||||||
|
opt.Logger = r.Config.Logger
|
||||||
|
opt.LogDeprecated = r.Config.LogLevel.Matches(aws.LogDebugWithDeprecated)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -200,6 +200,10 @@ type EC2API interface {
|
||||||
CancelCapacityReservationWithContext(aws.Context, *ec2.CancelCapacityReservationInput, ...request.Option) (*ec2.CancelCapacityReservationOutput, error)
|
CancelCapacityReservationWithContext(aws.Context, *ec2.CancelCapacityReservationInput, ...request.Option) (*ec2.CancelCapacityReservationOutput, error)
|
||||||
CancelCapacityReservationRequest(*ec2.CancelCapacityReservationInput) (*request.Request, *ec2.CancelCapacityReservationOutput)
|
CancelCapacityReservationRequest(*ec2.CancelCapacityReservationInput) (*request.Request, *ec2.CancelCapacityReservationOutput)
|
||||||
|
|
||||||
|
CancelCapacityReservationFleets(*ec2.CancelCapacityReservationFleetsInput) (*ec2.CancelCapacityReservationFleetsOutput, error)
|
||||||
|
CancelCapacityReservationFleetsWithContext(aws.Context, *ec2.CancelCapacityReservationFleetsInput, ...request.Option) (*ec2.CancelCapacityReservationFleetsOutput, error)
|
||||||
|
CancelCapacityReservationFleetsRequest(*ec2.CancelCapacityReservationFleetsInput) (*request.Request, *ec2.CancelCapacityReservationFleetsOutput)
|
||||||
|
|
||||||
CancelConversionTask(*ec2.CancelConversionTaskInput) (*ec2.CancelConversionTaskOutput, error)
|
CancelConversionTask(*ec2.CancelConversionTaskInput) (*ec2.CancelConversionTaskOutput, error)
|
||||||
CancelConversionTaskWithContext(aws.Context, *ec2.CancelConversionTaskInput, ...request.Option) (*ec2.CancelConversionTaskOutput, error)
|
CancelConversionTaskWithContext(aws.Context, *ec2.CancelConversionTaskInput, ...request.Option) (*ec2.CancelConversionTaskOutput, error)
|
||||||
CancelConversionTaskRequest(*ec2.CancelConversionTaskInput) (*request.Request, *ec2.CancelConversionTaskOutput)
|
CancelConversionTaskRequest(*ec2.CancelConversionTaskInput) (*request.Request, *ec2.CancelConversionTaskOutput)
|
||||||
|
|
@ -244,6 +248,10 @@ type EC2API interface {
|
||||||
CreateCapacityReservationWithContext(aws.Context, *ec2.CreateCapacityReservationInput, ...request.Option) (*ec2.CreateCapacityReservationOutput, error)
|
CreateCapacityReservationWithContext(aws.Context, *ec2.CreateCapacityReservationInput, ...request.Option) (*ec2.CreateCapacityReservationOutput, error)
|
||||||
CreateCapacityReservationRequest(*ec2.CreateCapacityReservationInput) (*request.Request, *ec2.CreateCapacityReservationOutput)
|
CreateCapacityReservationRequest(*ec2.CreateCapacityReservationInput) (*request.Request, *ec2.CreateCapacityReservationOutput)
|
||||||
|
|
||||||
|
CreateCapacityReservationFleet(*ec2.CreateCapacityReservationFleetInput) (*ec2.CreateCapacityReservationFleetOutput, error)
|
||||||
|
CreateCapacityReservationFleetWithContext(aws.Context, *ec2.CreateCapacityReservationFleetInput, ...request.Option) (*ec2.CreateCapacityReservationFleetOutput, error)
|
||||||
|
CreateCapacityReservationFleetRequest(*ec2.CreateCapacityReservationFleetInput) (*request.Request, *ec2.CreateCapacityReservationFleetOutput)
|
||||||
|
|
||||||
CreateCarrierGateway(*ec2.CreateCarrierGatewayInput) (*ec2.CreateCarrierGatewayOutput, error)
|
CreateCarrierGateway(*ec2.CreateCarrierGatewayInput) (*ec2.CreateCarrierGatewayOutput, error)
|
||||||
CreateCarrierGatewayWithContext(aws.Context, *ec2.CreateCarrierGatewayInput, ...request.Option) (*ec2.CreateCarrierGatewayOutput, error)
|
CreateCarrierGatewayWithContext(aws.Context, *ec2.CreateCarrierGatewayInput, ...request.Option) (*ec2.CreateCarrierGatewayOutput, error)
|
||||||
CreateCarrierGatewayRequest(*ec2.CreateCarrierGatewayInput) (*request.Request, *ec2.CreateCarrierGatewayOutput)
|
CreateCarrierGatewayRequest(*ec2.CreateCarrierGatewayInput) (*request.Request, *ec2.CreateCarrierGatewayOutput)
|
||||||
|
|
@ -774,6 +782,13 @@ type EC2API interface {
|
||||||
DescribeByoipCidrsPages(*ec2.DescribeByoipCidrsInput, func(*ec2.DescribeByoipCidrsOutput, bool) bool) error
|
DescribeByoipCidrsPages(*ec2.DescribeByoipCidrsInput, func(*ec2.DescribeByoipCidrsOutput, bool) bool) error
|
||||||
DescribeByoipCidrsPagesWithContext(aws.Context, *ec2.DescribeByoipCidrsInput, func(*ec2.DescribeByoipCidrsOutput, bool) bool, ...request.Option) error
|
DescribeByoipCidrsPagesWithContext(aws.Context, *ec2.DescribeByoipCidrsInput, func(*ec2.DescribeByoipCidrsOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
DescribeCapacityReservationFleets(*ec2.DescribeCapacityReservationFleetsInput) (*ec2.DescribeCapacityReservationFleetsOutput, error)
|
||||||
|
DescribeCapacityReservationFleetsWithContext(aws.Context, *ec2.DescribeCapacityReservationFleetsInput, ...request.Option) (*ec2.DescribeCapacityReservationFleetsOutput, error)
|
||||||
|
DescribeCapacityReservationFleetsRequest(*ec2.DescribeCapacityReservationFleetsInput) (*request.Request, *ec2.DescribeCapacityReservationFleetsOutput)
|
||||||
|
|
||||||
|
DescribeCapacityReservationFleetsPages(*ec2.DescribeCapacityReservationFleetsInput, func(*ec2.DescribeCapacityReservationFleetsOutput, bool) bool) error
|
||||||
|
DescribeCapacityReservationFleetsPagesWithContext(aws.Context, *ec2.DescribeCapacityReservationFleetsInput, func(*ec2.DescribeCapacityReservationFleetsOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
DescribeCapacityReservations(*ec2.DescribeCapacityReservationsInput) (*ec2.DescribeCapacityReservationsOutput, error)
|
DescribeCapacityReservations(*ec2.DescribeCapacityReservationsInput) (*ec2.DescribeCapacityReservationsOutput, error)
|
||||||
DescribeCapacityReservationsWithContext(aws.Context, *ec2.DescribeCapacityReservationsInput, ...request.Option) (*ec2.DescribeCapacityReservationsOutput, error)
|
DescribeCapacityReservationsWithContext(aws.Context, *ec2.DescribeCapacityReservationsInput, ...request.Option) (*ec2.DescribeCapacityReservationsOutput, error)
|
||||||
DescribeCapacityReservationsRequest(*ec2.DescribeCapacityReservationsInput) (*request.Request, *ec2.DescribeCapacityReservationsOutput)
|
DescribeCapacityReservationsRequest(*ec2.DescribeCapacityReservationsInput) (*request.Request, *ec2.DescribeCapacityReservationsOutput)
|
||||||
|
|
@ -1712,6 +1727,13 @@ type EC2API interface {
|
||||||
GetHostReservationPurchasePreviewWithContext(aws.Context, *ec2.GetHostReservationPurchasePreviewInput, ...request.Option) (*ec2.GetHostReservationPurchasePreviewOutput, error)
|
GetHostReservationPurchasePreviewWithContext(aws.Context, *ec2.GetHostReservationPurchasePreviewInput, ...request.Option) (*ec2.GetHostReservationPurchasePreviewOutput, error)
|
||||||
GetHostReservationPurchasePreviewRequest(*ec2.GetHostReservationPurchasePreviewInput) (*request.Request, *ec2.GetHostReservationPurchasePreviewOutput)
|
GetHostReservationPurchasePreviewRequest(*ec2.GetHostReservationPurchasePreviewInput) (*request.Request, *ec2.GetHostReservationPurchasePreviewOutput)
|
||||||
|
|
||||||
|
GetInstanceTypesFromInstanceRequirements(*ec2.GetInstanceTypesFromInstanceRequirementsInput) (*ec2.GetInstanceTypesFromInstanceRequirementsOutput, error)
|
||||||
|
GetInstanceTypesFromInstanceRequirementsWithContext(aws.Context, *ec2.GetInstanceTypesFromInstanceRequirementsInput, ...request.Option) (*ec2.GetInstanceTypesFromInstanceRequirementsOutput, error)
|
||||||
|
GetInstanceTypesFromInstanceRequirementsRequest(*ec2.GetInstanceTypesFromInstanceRequirementsInput) (*request.Request, *ec2.GetInstanceTypesFromInstanceRequirementsOutput)
|
||||||
|
|
||||||
|
GetInstanceTypesFromInstanceRequirementsPages(*ec2.GetInstanceTypesFromInstanceRequirementsInput, func(*ec2.GetInstanceTypesFromInstanceRequirementsOutput, bool) bool) error
|
||||||
|
GetInstanceTypesFromInstanceRequirementsPagesWithContext(aws.Context, *ec2.GetInstanceTypesFromInstanceRequirementsInput, func(*ec2.GetInstanceTypesFromInstanceRequirementsOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
GetLaunchTemplateData(*ec2.GetLaunchTemplateDataInput) (*ec2.GetLaunchTemplateDataOutput, error)
|
GetLaunchTemplateData(*ec2.GetLaunchTemplateDataInput) (*ec2.GetLaunchTemplateDataOutput, error)
|
||||||
GetLaunchTemplateDataWithContext(aws.Context, *ec2.GetLaunchTemplateDataInput, ...request.Option) (*ec2.GetLaunchTemplateDataOutput, error)
|
GetLaunchTemplateDataWithContext(aws.Context, *ec2.GetLaunchTemplateDataInput, ...request.Option) (*ec2.GetLaunchTemplateDataOutput, error)
|
||||||
GetLaunchTemplateDataRequest(*ec2.GetLaunchTemplateDataInput) (*request.Request, *ec2.GetLaunchTemplateDataOutput)
|
GetLaunchTemplateDataRequest(*ec2.GetLaunchTemplateDataInput) (*request.Request, *ec2.GetLaunchTemplateDataOutput)
|
||||||
|
|
@ -1742,6 +1764,13 @@ type EC2API interface {
|
||||||
GetSerialConsoleAccessStatusWithContext(aws.Context, *ec2.GetSerialConsoleAccessStatusInput, ...request.Option) (*ec2.GetSerialConsoleAccessStatusOutput, error)
|
GetSerialConsoleAccessStatusWithContext(aws.Context, *ec2.GetSerialConsoleAccessStatusInput, ...request.Option) (*ec2.GetSerialConsoleAccessStatusOutput, error)
|
||||||
GetSerialConsoleAccessStatusRequest(*ec2.GetSerialConsoleAccessStatusInput) (*request.Request, *ec2.GetSerialConsoleAccessStatusOutput)
|
GetSerialConsoleAccessStatusRequest(*ec2.GetSerialConsoleAccessStatusInput) (*request.Request, *ec2.GetSerialConsoleAccessStatusOutput)
|
||||||
|
|
||||||
|
GetSpotPlacementScores(*ec2.GetSpotPlacementScoresInput) (*ec2.GetSpotPlacementScoresOutput, error)
|
||||||
|
GetSpotPlacementScoresWithContext(aws.Context, *ec2.GetSpotPlacementScoresInput, ...request.Option) (*ec2.GetSpotPlacementScoresOutput, error)
|
||||||
|
GetSpotPlacementScoresRequest(*ec2.GetSpotPlacementScoresInput) (*request.Request, *ec2.GetSpotPlacementScoresOutput)
|
||||||
|
|
||||||
|
GetSpotPlacementScoresPages(*ec2.GetSpotPlacementScoresInput, func(*ec2.GetSpotPlacementScoresOutput, bool) bool) error
|
||||||
|
GetSpotPlacementScoresPagesWithContext(aws.Context, *ec2.GetSpotPlacementScoresInput, func(*ec2.GetSpotPlacementScoresOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
GetSubnetCidrReservations(*ec2.GetSubnetCidrReservationsInput) (*ec2.GetSubnetCidrReservationsOutput, error)
|
GetSubnetCidrReservations(*ec2.GetSubnetCidrReservationsInput) (*ec2.GetSubnetCidrReservationsOutput, error)
|
||||||
GetSubnetCidrReservationsWithContext(aws.Context, *ec2.GetSubnetCidrReservationsInput, ...request.Option) (*ec2.GetSubnetCidrReservationsOutput, error)
|
GetSubnetCidrReservationsWithContext(aws.Context, *ec2.GetSubnetCidrReservationsInput, ...request.Option) (*ec2.GetSubnetCidrReservationsOutput, error)
|
||||||
GetSubnetCidrReservationsRequest(*ec2.GetSubnetCidrReservationsInput) (*request.Request, *ec2.GetSubnetCidrReservationsOutput)
|
GetSubnetCidrReservationsRequest(*ec2.GetSubnetCidrReservationsInput) (*request.Request, *ec2.GetSubnetCidrReservationsOutput)
|
||||||
|
|
@ -1781,6 +1810,17 @@ type EC2API interface {
|
||||||
GetTransitGatewayRouteTablePropagationsPages(*ec2.GetTransitGatewayRouteTablePropagationsInput, func(*ec2.GetTransitGatewayRouteTablePropagationsOutput, bool) bool) error
|
GetTransitGatewayRouteTablePropagationsPages(*ec2.GetTransitGatewayRouteTablePropagationsInput, func(*ec2.GetTransitGatewayRouteTablePropagationsOutput, bool) bool) error
|
||||||
GetTransitGatewayRouteTablePropagationsPagesWithContext(aws.Context, *ec2.GetTransitGatewayRouteTablePropagationsInput, func(*ec2.GetTransitGatewayRouteTablePropagationsOutput, bool) bool, ...request.Option) error
|
GetTransitGatewayRouteTablePropagationsPagesWithContext(aws.Context, *ec2.GetTransitGatewayRouteTablePropagationsInput, func(*ec2.GetTransitGatewayRouteTablePropagationsOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
GetVpnConnectionDeviceSampleConfiguration(*ec2.GetVpnConnectionDeviceSampleConfigurationInput) (*ec2.GetVpnConnectionDeviceSampleConfigurationOutput, error)
|
||||||
|
GetVpnConnectionDeviceSampleConfigurationWithContext(aws.Context, *ec2.GetVpnConnectionDeviceSampleConfigurationInput, ...request.Option) (*ec2.GetVpnConnectionDeviceSampleConfigurationOutput, error)
|
||||||
|
GetVpnConnectionDeviceSampleConfigurationRequest(*ec2.GetVpnConnectionDeviceSampleConfigurationInput) (*request.Request, *ec2.GetVpnConnectionDeviceSampleConfigurationOutput)
|
||||||
|
|
||||||
|
GetVpnConnectionDeviceTypes(*ec2.GetVpnConnectionDeviceTypesInput) (*ec2.GetVpnConnectionDeviceTypesOutput, error)
|
||||||
|
GetVpnConnectionDeviceTypesWithContext(aws.Context, *ec2.GetVpnConnectionDeviceTypesInput, ...request.Option) (*ec2.GetVpnConnectionDeviceTypesOutput, error)
|
||||||
|
GetVpnConnectionDeviceTypesRequest(*ec2.GetVpnConnectionDeviceTypesInput) (*request.Request, *ec2.GetVpnConnectionDeviceTypesOutput)
|
||||||
|
|
||||||
|
GetVpnConnectionDeviceTypesPages(*ec2.GetVpnConnectionDeviceTypesInput, func(*ec2.GetVpnConnectionDeviceTypesOutput, bool) bool) error
|
||||||
|
GetVpnConnectionDeviceTypesPagesWithContext(aws.Context, *ec2.GetVpnConnectionDeviceTypesInput, func(*ec2.GetVpnConnectionDeviceTypesOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
ImportClientVpnClientCertificateRevocationList(*ec2.ImportClientVpnClientCertificateRevocationListInput) (*ec2.ImportClientVpnClientCertificateRevocationListOutput, error)
|
ImportClientVpnClientCertificateRevocationList(*ec2.ImportClientVpnClientCertificateRevocationListInput) (*ec2.ImportClientVpnClientCertificateRevocationListOutput, error)
|
||||||
ImportClientVpnClientCertificateRevocationListWithContext(aws.Context, *ec2.ImportClientVpnClientCertificateRevocationListInput, ...request.Option) (*ec2.ImportClientVpnClientCertificateRevocationListOutput, error)
|
ImportClientVpnClientCertificateRevocationListWithContext(aws.Context, *ec2.ImportClientVpnClientCertificateRevocationListInput, ...request.Option) (*ec2.ImportClientVpnClientCertificateRevocationListOutput, error)
|
||||||
ImportClientVpnClientCertificateRevocationListRequest(*ec2.ImportClientVpnClientCertificateRevocationListInput) (*request.Request, *ec2.ImportClientVpnClientCertificateRevocationListOutput)
|
ImportClientVpnClientCertificateRevocationListRequest(*ec2.ImportClientVpnClientCertificateRevocationListInput) (*request.Request, *ec2.ImportClientVpnClientCertificateRevocationListOutput)
|
||||||
|
|
@ -1817,6 +1857,10 @@ type EC2API interface {
|
||||||
ModifyCapacityReservationWithContext(aws.Context, *ec2.ModifyCapacityReservationInput, ...request.Option) (*ec2.ModifyCapacityReservationOutput, error)
|
ModifyCapacityReservationWithContext(aws.Context, *ec2.ModifyCapacityReservationInput, ...request.Option) (*ec2.ModifyCapacityReservationOutput, error)
|
||||||
ModifyCapacityReservationRequest(*ec2.ModifyCapacityReservationInput) (*request.Request, *ec2.ModifyCapacityReservationOutput)
|
ModifyCapacityReservationRequest(*ec2.ModifyCapacityReservationInput) (*request.Request, *ec2.ModifyCapacityReservationOutput)
|
||||||
|
|
||||||
|
ModifyCapacityReservationFleet(*ec2.ModifyCapacityReservationFleetInput) (*ec2.ModifyCapacityReservationFleetOutput, error)
|
||||||
|
ModifyCapacityReservationFleetWithContext(aws.Context, *ec2.ModifyCapacityReservationFleetInput, ...request.Option) (*ec2.ModifyCapacityReservationFleetOutput, error)
|
||||||
|
ModifyCapacityReservationFleetRequest(*ec2.ModifyCapacityReservationFleetInput) (*request.Request, *ec2.ModifyCapacityReservationFleetOutput)
|
||||||
|
|
||||||
ModifyClientVpnEndpoint(*ec2.ModifyClientVpnEndpointInput) (*ec2.ModifyClientVpnEndpointOutput, error)
|
ModifyClientVpnEndpoint(*ec2.ModifyClientVpnEndpointInput) (*ec2.ModifyClientVpnEndpointOutput, error)
|
||||||
ModifyClientVpnEndpointWithContext(aws.Context, *ec2.ModifyClientVpnEndpointInput, ...request.Option) (*ec2.ModifyClientVpnEndpointOutput, error)
|
ModifyClientVpnEndpointWithContext(aws.Context, *ec2.ModifyClientVpnEndpointInput, ...request.Option) (*ec2.ModifyClientVpnEndpointOutput, error)
|
||||||
ModifyClientVpnEndpointRequest(*ec2.ModifyClientVpnEndpointInput) (*request.Request, *ec2.ModifyClientVpnEndpointOutput)
|
ModifyClientVpnEndpointRequest(*ec2.ModifyClientVpnEndpointInput) (*request.Request, *ec2.ModifyClientVpnEndpointOutput)
|
||||||
|
|
|
||||||
|
|
@ -48,11 +48,11 @@ const (
|
||||||
// svc := ec2.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
// svc := ec2.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
||||||
func New(p client.ConfigProvider, cfgs ...*aws.Config) *EC2 {
|
func New(p client.ConfigProvider, cfgs ...*aws.Config) *EC2 {
|
||||||
c := p.ClientConfig(EndpointsID, cfgs...)
|
c := p.ClientConfig(EndpointsID, cfgs...)
|
||||||
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName)
|
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName, c.ResolvedRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newClient creates, initializes and returns a new service client instance.
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *EC2 {
|
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName, resolvedRegion string) *EC2 {
|
||||||
svc := &EC2{
|
svc := &EC2{
|
||||||
Client: client.New(
|
Client: client.New(
|
||||||
cfg,
|
cfg,
|
||||||
|
|
@ -64,6 +64,7 @@ func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint,
|
||||||
PartitionID: partitionID,
|
PartitionID: partitionID,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
APIVersion: "2016-11-15",
|
APIVersion: "2016-11-15",
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
},
|
},
|
||||||
handlers,
|
handlers,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -1030,6 +1030,11 @@ func (c *EC2) WaitUntilSnapshotCompletedWithContext(ctx aws.Context, input *Desc
|
||||||
Matcher: request.PathAllWaiterMatch, Argument: "Snapshots[].State",
|
Matcher: request.PathAllWaiterMatch, Argument: "Snapshots[].State",
|
||||||
Expected: "completed",
|
Expected: "completed",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
State: request.FailureWaiterState,
|
||||||
|
Matcher: request.PathAnyWaiterMatch, Argument: "Snapshots[].State",
|
||||||
|
Expected: "error",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Logger: c.Config.Logger,
|
Logger: c.Config.Logger,
|
||||||
NewRequest: func(opts []request.Option) (*request.Request, error) {
|
NewRequest: func(opts []request.Option) (*request.Request, error) {
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -48,11 +48,11 @@ const (
|
||||||
// svc := elb.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
// svc := elb.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
||||||
func New(p client.ConfigProvider, cfgs ...*aws.Config) *ELB {
|
func New(p client.ConfigProvider, cfgs ...*aws.Config) *ELB {
|
||||||
c := p.ClientConfig(EndpointsID, cfgs...)
|
c := p.ClientConfig(EndpointsID, cfgs...)
|
||||||
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName)
|
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName, c.ResolvedRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newClient creates, initializes and returns a new service client instance.
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *ELB {
|
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName, resolvedRegion string) *ELB {
|
||||||
svc := &ELB{
|
svc := &ELB{
|
||||||
Client: client.New(
|
Client: client.New(
|
||||||
cfg,
|
cfg,
|
||||||
|
|
@ -64,6 +64,7 @@ func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint,
|
||||||
PartitionID: partitionID,
|
PartitionID: partitionID,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
APIVersion: "2012-06-01",
|
APIVersion: "2012-06-01",
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
},
|
},
|
||||||
handlers,
|
handlers,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -48,11 +48,11 @@ const (
|
||||||
// svc := elbv2.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
// svc := elbv2.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
||||||
func New(p client.ConfigProvider, cfgs ...*aws.Config) *ELBV2 {
|
func New(p client.ConfigProvider, cfgs ...*aws.Config) *ELBV2 {
|
||||||
c := p.ClientConfig(EndpointsID, cfgs...)
|
c := p.ClientConfig(EndpointsID, cfgs...)
|
||||||
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName)
|
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName, c.ResolvedRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newClient creates, initializes and returns a new service client instance.
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *ELBV2 {
|
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName, resolvedRegion string) *ELBV2 {
|
||||||
svc := &ELBV2{
|
svc := &ELBV2{
|
||||||
Client: client.New(
|
Client: client.New(
|
||||||
cfg,
|
cfg,
|
||||||
|
|
@ -64,6 +64,7 @@ func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint,
|
||||||
PartitionID: partitionID,
|
PartitionID: partitionID,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
APIVersion: "2015-12-01",
|
APIVersion: "2015-12-01",
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
},
|
},
|
||||||
handlers,
|
handlers,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -49,11 +49,11 @@ const (
|
||||||
// svc := eventbridge.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
// svc := eventbridge.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
||||||
func New(p client.ConfigProvider, cfgs ...*aws.Config) *EventBridge {
|
func New(p client.ConfigProvider, cfgs ...*aws.Config) *EventBridge {
|
||||||
c := p.ClientConfig(EndpointsID, cfgs...)
|
c := p.ClientConfig(EndpointsID, cfgs...)
|
||||||
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName)
|
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName, c.ResolvedRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newClient creates, initializes and returns a new service client instance.
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *EventBridge {
|
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName, resolvedRegion string) *EventBridge {
|
||||||
svc := &EventBridge{
|
svc := &EventBridge{
|
||||||
Client: client.New(
|
Client: client.New(
|
||||||
cfg,
|
cfg,
|
||||||
|
|
@ -65,6 +65,7 @@ func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint,
|
||||||
PartitionID: partitionID,
|
PartitionID: partitionID,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
APIVersion: "2015-10-07",
|
APIVersion: "2015-10-07",
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
JSONVersion: "1.1",
|
JSONVersion: "1.1",
|
||||||
TargetPrefix: "AWSEvents",
|
TargetPrefix: "AWSEvents",
|
||||||
},
|
},
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -48,11 +48,11 @@ const (
|
||||||
// svc := iam.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
// svc := iam.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
||||||
func New(p client.ConfigProvider, cfgs ...*aws.Config) *IAM {
|
func New(p client.ConfigProvider, cfgs ...*aws.Config) *IAM {
|
||||||
c := p.ClientConfig(EndpointsID, cfgs...)
|
c := p.ClientConfig(EndpointsID, cfgs...)
|
||||||
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName)
|
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName, c.ResolvedRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newClient creates, initializes and returns a new service client instance.
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *IAM {
|
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName, resolvedRegion string) *IAM {
|
||||||
svc := &IAM{
|
svc := &IAM{
|
||||||
Client: client.New(
|
Client: client.New(
|
||||||
cfg,
|
cfg,
|
||||||
|
|
@ -64,6 +64,7 @@ func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint,
|
||||||
PartitionID: partitionID,
|
PartitionID: partitionID,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
APIVersion: "2010-05-08",
|
APIVersion: "2010-05-08",
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
},
|
},
|
||||||
handlers,
|
handlers,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -49,11 +49,11 @@ const (
|
||||||
// svc := kms.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
// svc := kms.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
||||||
func New(p client.ConfigProvider, cfgs ...*aws.Config) *KMS {
|
func New(p client.ConfigProvider, cfgs ...*aws.Config) *KMS {
|
||||||
c := p.ClientConfig(EndpointsID, cfgs...)
|
c := p.ClientConfig(EndpointsID, cfgs...)
|
||||||
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName)
|
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName, c.ResolvedRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newClient creates, initializes and returns a new service client instance.
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *KMS {
|
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName, resolvedRegion string) *KMS {
|
||||||
svc := &KMS{
|
svc := &KMS{
|
||||||
Client: client.New(
|
Client: client.New(
|
||||||
cfg,
|
cfg,
|
||||||
|
|
@ -65,6 +65,7 @@ func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint,
|
||||||
PartitionID: partitionID,
|
PartitionID: partitionID,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
APIVersion: "2014-11-01",
|
APIVersion: "2014-11-01",
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
JSONVersion: "1.1",
|
JSONVersion: "1.1",
|
||||||
TargetPrefix: "TrentService",
|
TargetPrefix: "TrentService",
|
||||||
},
|
},
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -48,11 +48,11 @@ const (
|
||||||
// svc := route53.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
// svc := route53.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
||||||
func New(p client.ConfigProvider, cfgs ...*aws.Config) *Route53 {
|
func New(p client.ConfigProvider, cfgs ...*aws.Config) *Route53 {
|
||||||
c := p.ClientConfig(EndpointsID, cfgs...)
|
c := p.ClientConfig(EndpointsID, cfgs...)
|
||||||
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName)
|
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName, c.ResolvedRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newClient creates, initializes and returns a new service client instance.
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *Route53 {
|
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName, resolvedRegion string) *Route53 {
|
||||||
svc := &Route53{
|
svc := &Route53{
|
||||||
Client: client.New(
|
Client: client.New(
|
||||||
cfg,
|
cfg,
|
||||||
|
|
@ -64,6 +64,7 @@ func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint,
|
||||||
PartitionID: partitionID,
|
PartitionID: partitionID,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
APIVersion: "2013-04-01",
|
APIVersion: "2013-04-01",
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
},
|
},
|
||||||
handlers,
|
handlers,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,7 +1,9 @@
|
||||||
package s3
|
package s3
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/aws/client"
|
"github.com/aws/aws-sdk-go/aws/client"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/endpoints"
|
||||||
"github.com/aws/aws-sdk-go/aws/request"
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
"github.com/aws/aws-sdk-go/internal/s3shared/arn"
|
"github.com/aws/aws-sdk-go/internal/s3shared/arn"
|
||||||
"github.com/aws/aws-sdk-go/internal/s3shared/s3err"
|
"github.com/aws/aws-sdk-go/internal/s3shared/s3err"
|
||||||
|
|
@ -13,6 +15,14 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func defaultInitClientFn(c *client.Client) {
|
func defaultInitClientFn(c *client.Client) {
|
||||||
|
if c.Config.UseDualStackEndpoint == endpoints.DualStackEndpointStateUnset {
|
||||||
|
if aws.BoolValue(c.Config.UseDualStack) {
|
||||||
|
c.Config.UseDualStackEndpoint = endpoints.DualStackEndpointStateEnabled
|
||||||
|
} else {
|
||||||
|
c.Config.UseDualStackEndpoint = endpoints.DualStackEndpointStateDisabled
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Support building custom endpoints based on config
|
// Support building custom endpoints based on config
|
||||||
c.Handlers.Build.PushFront(endpointHandler)
|
c.Handlers.Build.PushFront(endpointHandler)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package s3
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/endpoints"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
|
@ -155,7 +156,7 @@ func endpointHandler(req *request.Request) {
|
||||||
}
|
}
|
||||||
case arn.OutpostAccessPointARN:
|
case arn.OutpostAccessPointARN:
|
||||||
// outposts does not support FIPS regions
|
// outposts does not support FIPS regions
|
||||||
if resReq.UseFIPS() {
|
if req.Config.UseFIPSEndpoint == endpoints.FIPSEndpointStateEnabled {
|
||||||
req.Error = s3shared.NewFIPSConfigurationError(resource, req.ClientInfo.PartitionID,
|
req.Error = s3shared.NewFIPSConfigurationError(resource, req.ClientInfo.PartitionID,
|
||||||
aws.StringValue(req.Config.Region), nil)
|
aws.StringValue(req.Config.Region), nil)
|
||||||
return
|
return
|
||||||
|
|
@ -202,7 +203,7 @@ func updateRequestAccessPointEndpoint(req *request.Request, accessPoint arn.Acce
|
||||||
|
|
||||||
func updateRequestS3ObjectLambdaAccessPointEndpoint(req *request.Request, accessPoint arn.S3ObjectLambdaAccessPointARN) error {
|
func updateRequestS3ObjectLambdaAccessPointEndpoint(req *request.Request, accessPoint arn.S3ObjectLambdaAccessPointARN) error {
|
||||||
// DualStack not supported
|
// DualStack not supported
|
||||||
if aws.BoolValue(req.Config.UseDualStack) {
|
if isUseDualStackEndpoint(req) {
|
||||||
return s3shared.NewClientConfiguredForDualStackError(accessPoint,
|
return s3shared.NewClientConfiguredForDualStackError(accessPoint,
|
||||||
req.ClientInfo.PartitionID, aws.StringValue(req.Config.Region), nil)
|
req.ClientInfo.PartitionID, aws.StringValue(req.Config.Region), nil)
|
||||||
}
|
}
|
||||||
|
|
@ -233,7 +234,7 @@ func updateRequestOutpostAccessPointEndpoint(req *request.Request, accessPoint a
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dualstack not supported
|
// Dualstack not supported
|
||||||
if aws.BoolValue(req.Config.UseDualStack) {
|
if isUseDualStackEndpoint(req) {
|
||||||
return s3shared.NewClientConfiguredForDualStackError(accessPoint,
|
return s3shared.NewClientConfiguredForDualStackError(accessPoint,
|
||||||
req.ClientInfo.PartitionID, aws.StringValue(req.Config.Region), nil)
|
req.ClientInfo.PartitionID, aws.StringValue(req.Config.Region), nil)
|
||||||
}
|
}
|
||||||
|
|
@ -258,7 +259,7 @@ func removeBucketFromPath(u *url.URL) {
|
||||||
|
|
||||||
func buildWriteGetObjectResponseEndpoint(req *request.Request) {
|
func buildWriteGetObjectResponseEndpoint(req *request.Request) {
|
||||||
// DualStack not supported
|
// DualStack not supported
|
||||||
if aws.BoolValue(req.Config.UseDualStack) {
|
if isUseDualStackEndpoint(req) {
|
||||||
req.Error = awserr.New("ConfigurationError", "client configured for dualstack but not supported for operation", nil)
|
req.Error = awserr.New("ConfigurationError", "client configured for dualstack but not supported for operation", nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -273,7 +274,7 @@ func buildWriteGetObjectResponseEndpoint(req *request.Request) {
|
||||||
signingRegion := req.ClientInfo.SigningRegion
|
signingRegion := req.ClientInfo.SigningRegion
|
||||||
|
|
||||||
if !hasCustomEndpoint(req) {
|
if !hasCustomEndpoint(req) {
|
||||||
endpoint, err := resolveRegionalEndpoint(req, aws.StringValue(req.Config.Region), EndpointsID)
|
endpoint, err := resolveRegionalEndpoint(req, aws.StringValue(req.Config.Region), req.ClientInfo.ResolvedRegion, EndpointsID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
req.Error = awserr.New(request.ErrCodeSerialization, "failed to resolve endpoint", err)
|
req.Error = awserr.New(request.ErrCodeSerialization, "failed to resolve endpoint", err)
|
||||||
return
|
return
|
||||||
|
|
@ -289,3 +290,10 @@ func buildWriteGetObjectResponseEndpoint(req *request.Request) {
|
||||||
|
|
||||||
redirectSigner(req, signingName, signingRegion)
|
redirectSigner(req, signingName, signingRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isUseDualStackEndpoint(req *request.Request) bool {
|
||||||
|
if req.Config.UseDualStackEndpoint != endpoints.DualStackEndpointStateUnset {
|
||||||
|
return req.Config.UseDualStackEndpoint == endpoints.DualStackEndpointStateEnabled
|
||||||
|
}
|
||||||
|
return aws.BoolValue(req.Config.UseDualStack)
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,23 +41,11 @@ type accessPointEndpointBuilder arn.AccessPointARN
|
||||||
func (a accessPointEndpointBuilder) build(req *request.Request) error {
|
func (a accessPointEndpointBuilder) build(req *request.Request) error {
|
||||||
resolveService := arn.AccessPointARN(a).Service
|
resolveService := arn.AccessPointARN(a).Service
|
||||||
resolveRegion := arn.AccessPointARN(a).Region
|
resolveRegion := arn.AccessPointARN(a).Region
|
||||||
cfgRegion := aws.StringValue(req.Config.Region)
|
|
||||||
|
|
||||||
if s3shared.IsFIPS(cfgRegion) {
|
endpoint, err := resolveRegionalEndpoint(req, resolveRegion, "", resolveService)
|
||||||
if aws.BoolValue(req.Config.S3UseARNRegion) && s3shared.IsCrossRegion(req, resolveRegion) {
|
|
||||||
// FIPS with cross region is not supported, the SDK must fail
|
|
||||||
// because there is no well defined method for SDK to construct a
|
|
||||||
// correct FIPS endpoint.
|
|
||||||
return s3shared.NewClientConfiguredForCrossRegionFIPSError(arn.AccessPointARN(a),
|
|
||||||
req.ClientInfo.PartitionID, cfgRegion, nil)
|
|
||||||
}
|
|
||||||
resolveRegion = cfgRegion
|
|
||||||
}
|
|
||||||
|
|
||||||
endpoint, err := resolveRegionalEndpoint(req, resolveRegion, resolveService)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return s3shared.NewFailedToResolveEndpointError(arn.AccessPointARN(a),
|
return s3shared.NewFailedToResolveEndpointError(arn.AccessPointARN(a),
|
||||||
req.ClientInfo.PartitionID, cfgRegion, err)
|
req.ClientInfo.PartitionID, resolveRegion, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
endpoint.URL = endpoints.AddScheme(endpoint.URL, aws.BoolValue(req.Config.DisableSSL))
|
endpoint.URL = endpoints.AddScheme(endpoint.URL, aws.BoolValue(req.Config.DisableSSL))
|
||||||
|
|
@ -107,23 +95,11 @@ type s3ObjectLambdaAccessPointEndpointBuilder arn.S3ObjectLambdaAccessPointARN
|
||||||
//
|
//
|
||||||
func (a s3ObjectLambdaAccessPointEndpointBuilder) build(req *request.Request) error {
|
func (a s3ObjectLambdaAccessPointEndpointBuilder) build(req *request.Request) error {
|
||||||
resolveRegion := arn.S3ObjectLambdaAccessPointARN(a).Region
|
resolveRegion := arn.S3ObjectLambdaAccessPointARN(a).Region
|
||||||
cfgRegion := aws.StringValue(req.Config.Region)
|
|
||||||
|
|
||||||
if s3shared.IsFIPS(cfgRegion) {
|
endpoint, err := resolveRegionalEndpoint(req, resolveRegion, "", EndpointsID)
|
||||||
if aws.BoolValue(req.Config.S3UseARNRegion) && s3shared.IsCrossRegion(req, resolveRegion) {
|
|
||||||
// FIPS with cross region is not supported, the SDK must fail
|
|
||||||
// because there is no well defined method for SDK to construct a
|
|
||||||
// correct FIPS endpoint.
|
|
||||||
return s3shared.NewClientConfiguredForCrossRegionFIPSError(arn.S3ObjectLambdaAccessPointARN(a),
|
|
||||||
req.ClientInfo.PartitionID, cfgRegion, nil)
|
|
||||||
}
|
|
||||||
resolveRegion = cfgRegion
|
|
||||||
}
|
|
||||||
|
|
||||||
endpoint, err := resolveRegionalEndpoint(req, resolveRegion, EndpointsID)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return s3shared.NewFailedToResolveEndpointError(arn.S3ObjectLambdaAccessPointARN(a),
|
return s3shared.NewFailedToResolveEndpointError(arn.S3ObjectLambdaAccessPointARN(a),
|
||||||
req.ClientInfo.PartitionID, cfgRegion, err)
|
req.ClientInfo.PartitionID, resolveRegion, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
endpoint.URL = endpoints.AddScheme(endpoint.URL, aws.BoolValue(req.Config.DisableSSL))
|
endpoint.URL = endpoints.AddScheme(endpoint.URL, aws.BoolValue(req.Config.DisableSSL))
|
||||||
|
|
@ -181,7 +157,7 @@ func (o outpostAccessPointEndpointBuilder) build(req *request.Request) error {
|
||||||
endpointsID = "s3"
|
endpointsID = "s3"
|
||||||
}
|
}
|
||||||
|
|
||||||
endpoint, err := resolveRegionalEndpoint(req, resolveRegion, endpointsID)
|
endpoint, err := resolveRegionalEndpoint(req, resolveRegion, "", endpointsID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return s3shared.NewFailedToResolveEndpointError(o,
|
return s3shared.NewFailedToResolveEndpointError(o,
|
||||||
req.ClientInfo.PartitionID, resolveRegion, err)
|
req.ClientInfo.PartitionID, resolveRegion, err)
|
||||||
|
|
@ -220,11 +196,16 @@ func (o outpostAccessPointEndpointBuilder) hostPrefixLabelValues() map[string]st
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func resolveRegionalEndpoint(r *request.Request, region string, endpointsID string) (endpoints.ResolvedEndpoint, error) {
|
func resolveRegionalEndpoint(r *request.Request, region, resolvedRegion, endpointsID string) (endpoints.ResolvedEndpoint, error) {
|
||||||
return r.Config.EndpointResolver.EndpointFor(endpointsID, region, func(opts *endpoints.Options) {
|
return r.Config.EndpointResolver.EndpointFor(endpointsID, region, func(opts *endpoints.Options) {
|
||||||
opts.DisableSSL = aws.BoolValue(r.Config.DisableSSL)
|
opts.DisableSSL = aws.BoolValue(r.Config.DisableSSL)
|
||||||
opts.UseDualStack = aws.BoolValue(r.Config.UseDualStack)
|
opts.UseDualStack = aws.BoolValue(r.Config.UseDualStack)
|
||||||
|
opts.UseDualStackEndpoint = r.Config.UseDualStackEndpoint
|
||||||
|
opts.UseFIPSEndpoint = r.Config.UseFIPSEndpoint
|
||||||
opts.S3UsEast1RegionalEndpoint = endpoints.RegionalS3UsEast1Endpoint
|
opts.S3UsEast1RegionalEndpoint = endpoints.RegionalS3UsEast1Endpoint
|
||||||
|
opts.ResolvedRegion = resolvedRegion
|
||||||
|
opts.Logger = r.Config.Logger
|
||||||
|
opts.LogDeprecated = r.Config.LogLevel.Matches(aws.LogDebugWithDeprecated)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,11 +51,11 @@ func New(p client.ConfigProvider, cfgs ...*aws.Config) *S3 {
|
||||||
if c.SigningNameDerived || len(c.SigningName) == 0 {
|
if c.SigningNameDerived || len(c.SigningName) == 0 {
|
||||||
c.SigningName = "s3"
|
c.SigningName = "s3"
|
||||||
}
|
}
|
||||||
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName)
|
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName, c.ResolvedRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newClient creates, initializes and returns a new service client instance.
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *S3 {
|
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName, resolvedRegion string) *S3 {
|
||||||
svc := &S3{
|
svc := &S3{
|
||||||
Client: client.New(
|
Client: client.New(
|
||||||
cfg,
|
cfg,
|
||||||
|
|
@ -67,6 +67,7 @@ func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint,
|
||||||
PartitionID: partitionID,
|
PartitionID: partitionID,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
APIVersion: "2006-03-01",
|
APIVersion: "2006-03-01",
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
},
|
},
|
||||||
handlers,
|
handlers,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -48,11 +48,11 @@ const (
|
||||||
// svc := sqs.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
// svc := sqs.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
||||||
func New(p client.ConfigProvider, cfgs ...*aws.Config) *SQS {
|
func New(p client.ConfigProvider, cfgs ...*aws.Config) *SQS {
|
||||||
c := p.ClientConfig(EndpointsID, cfgs...)
|
c := p.ClientConfig(EndpointsID, cfgs...)
|
||||||
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName)
|
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName, c.ResolvedRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newClient creates, initializes and returns a new service client instance.
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *SQS {
|
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName, resolvedRegion string) *SQS {
|
||||||
svc := &SQS{
|
svc := &SQS{
|
||||||
Client: client.New(
|
Client: client.New(
|
||||||
cfg,
|
cfg,
|
||||||
|
|
@ -64,6 +64,7 @@ func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint,
|
||||||
PartitionID: partitionID,
|
PartitionID: partitionID,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
APIVersion: "2012-11-05",
|
APIVersion: "2012-11-05",
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
},
|
},
|
||||||
handlers,
|
handlers,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -513,12 +513,20 @@ type AccountInfo struct {
|
||||||
EmailAddress *string `locationName:"emailAddress" min:"1" type:"string"`
|
EmailAddress *string `locationName:"emailAddress" min:"1" type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AccountInfo) String() string {
|
func (s AccountInfo) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AccountInfo) GoString() string {
|
func (s AccountInfo) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -542,12 +550,16 @@ func (s *AccountInfo) SetEmailAddress(v string) *AccountInfo {
|
||||||
}
|
}
|
||||||
|
|
||||||
type GetRoleCredentialsInput struct {
|
type GetRoleCredentialsInput struct {
|
||||||
_ struct{} `type:"structure"`
|
_ struct{} `type:"structure" nopayload:"true"`
|
||||||
|
|
||||||
// The token issued by the CreateToken API call. For more information, see CreateToken
|
// The token issued by the CreateToken API call. For more information, see CreateToken
|
||||||
// (https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateToken.html)
|
// (https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateToken.html)
|
||||||
// in the AWS SSO OIDC API Reference Guide.
|
// in the AWS SSO OIDC API Reference Guide.
|
||||||
//
|
//
|
||||||
|
// AccessToken is a sensitive parameter and its value will be
|
||||||
|
// replaced with "sensitive" in string returned by GetRoleCredentialsInput's
|
||||||
|
// String and GoString methods.
|
||||||
|
//
|
||||||
// AccessToken is a required field
|
// AccessToken is a required field
|
||||||
AccessToken *string `location:"header" locationName:"x-amz-sso_bearer_token" type:"string" required:"true" sensitive:"true"`
|
AccessToken *string `location:"header" locationName:"x-amz-sso_bearer_token" type:"string" required:"true" sensitive:"true"`
|
||||||
|
|
||||||
|
|
@ -562,12 +574,20 @@ type GetRoleCredentialsInput struct {
|
||||||
RoleName *string `location:"querystring" locationName:"role_name" type:"string" required:"true"`
|
RoleName *string `location:"querystring" locationName:"role_name" type:"string" required:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetRoleCredentialsInput) String() string {
|
func (s GetRoleCredentialsInput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetRoleCredentialsInput) GoString() string {
|
func (s GetRoleCredentialsInput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -616,12 +636,20 @@ type GetRoleCredentialsOutput struct {
|
||||||
RoleCredentials *RoleCredentials `locationName:"roleCredentials" type:"structure"`
|
RoleCredentials *RoleCredentials `locationName:"roleCredentials" type:"structure"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetRoleCredentialsOutput) String() string {
|
func (s GetRoleCredentialsOutput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetRoleCredentialsOutput) GoString() string {
|
func (s GetRoleCredentialsOutput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -641,12 +669,20 @@ type InvalidRequestException struct {
|
||||||
Message_ *string `locationName:"message" type:"string"`
|
Message_ *string `locationName:"message" type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s InvalidRequestException) String() string {
|
func (s InvalidRequestException) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s InvalidRequestException) GoString() string {
|
func (s InvalidRequestException) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -690,12 +726,16 @@ func (s *InvalidRequestException) RequestID() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
type ListAccountRolesInput struct {
|
type ListAccountRolesInput struct {
|
||||||
_ struct{} `type:"structure"`
|
_ struct{} `type:"structure" nopayload:"true"`
|
||||||
|
|
||||||
// The token issued by the CreateToken API call. For more information, see CreateToken
|
// The token issued by the CreateToken API call. For more information, see CreateToken
|
||||||
// (https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateToken.html)
|
// (https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateToken.html)
|
||||||
// in the AWS SSO OIDC API Reference Guide.
|
// in the AWS SSO OIDC API Reference Guide.
|
||||||
//
|
//
|
||||||
|
// AccessToken is a sensitive parameter and its value will be
|
||||||
|
// replaced with "sensitive" in string returned by ListAccountRolesInput's
|
||||||
|
// String and GoString methods.
|
||||||
|
//
|
||||||
// AccessToken is a required field
|
// AccessToken is a required field
|
||||||
AccessToken *string `location:"header" locationName:"x-amz-sso_bearer_token" type:"string" required:"true" sensitive:"true"`
|
AccessToken *string `location:"header" locationName:"x-amz-sso_bearer_token" type:"string" required:"true" sensitive:"true"`
|
||||||
|
|
||||||
|
|
@ -712,12 +752,20 @@ type ListAccountRolesInput struct {
|
||||||
NextToken *string `location:"querystring" locationName:"next_token" type:"string"`
|
NextToken *string `location:"querystring" locationName:"next_token" type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s ListAccountRolesInput) String() string {
|
func (s ListAccountRolesInput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s ListAccountRolesInput) GoString() string {
|
func (s ListAccountRolesInput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -776,12 +824,20 @@ type ListAccountRolesOutput struct {
|
||||||
RoleList []*RoleInfo `locationName:"roleList" type:"list"`
|
RoleList []*RoleInfo `locationName:"roleList" type:"list"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s ListAccountRolesOutput) String() string {
|
func (s ListAccountRolesOutput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s ListAccountRolesOutput) GoString() string {
|
func (s ListAccountRolesOutput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -799,12 +855,16 @@ func (s *ListAccountRolesOutput) SetRoleList(v []*RoleInfo) *ListAccountRolesOut
|
||||||
}
|
}
|
||||||
|
|
||||||
type ListAccountsInput struct {
|
type ListAccountsInput struct {
|
||||||
_ struct{} `type:"structure"`
|
_ struct{} `type:"structure" nopayload:"true"`
|
||||||
|
|
||||||
// The token issued by the CreateToken API call. For more information, see CreateToken
|
// The token issued by the CreateToken API call. For more information, see CreateToken
|
||||||
// (https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateToken.html)
|
// (https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateToken.html)
|
||||||
// in the AWS SSO OIDC API Reference Guide.
|
// in the AWS SSO OIDC API Reference Guide.
|
||||||
//
|
//
|
||||||
|
// AccessToken is a sensitive parameter and its value will be
|
||||||
|
// replaced with "sensitive" in string returned by ListAccountsInput's
|
||||||
|
// String and GoString methods.
|
||||||
|
//
|
||||||
// AccessToken is a required field
|
// AccessToken is a required field
|
||||||
AccessToken *string `location:"header" locationName:"x-amz-sso_bearer_token" type:"string" required:"true" sensitive:"true"`
|
AccessToken *string `location:"header" locationName:"x-amz-sso_bearer_token" type:"string" required:"true" sensitive:"true"`
|
||||||
|
|
||||||
|
|
@ -816,12 +876,20 @@ type ListAccountsInput struct {
|
||||||
NextToken *string `location:"querystring" locationName:"next_token" type:"string"`
|
NextToken *string `location:"querystring" locationName:"next_token" type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s ListAccountsInput) String() string {
|
func (s ListAccountsInput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s ListAccountsInput) GoString() string {
|
func (s ListAccountsInput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -871,12 +939,20 @@ type ListAccountsOutput struct {
|
||||||
NextToken *string `locationName:"nextToken" type:"string"`
|
NextToken *string `locationName:"nextToken" type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s ListAccountsOutput) String() string {
|
func (s ListAccountsOutput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s ListAccountsOutput) GoString() string {
|
func (s ListAccountsOutput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -894,22 +970,34 @@ func (s *ListAccountsOutput) SetNextToken(v string) *ListAccountsOutput {
|
||||||
}
|
}
|
||||||
|
|
||||||
type LogoutInput struct {
|
type LogoutInput struct {
|
||||||
_ struct{} `type:"structure"`
|
_ struct{} `type:"structure" nopayload:"true"`
|
||||||
|
|
||||||
// The token issued by the CreateToken API call. For more information, see CreateToken
|
// The token issued by the CreateToken API call. For more information, see CreateToken
|
||||||
// (https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateToken.html)
|
// (https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateToken.html)
|
||||||
// in the AWS SSO OIDC API Reference Guide.
|
// in the AWS SSO OIDC API Reference Guide.
|
||||||
//
|
//
|
||||||
|
// AccessToken is a sensitive parameter and its value will be
|
||||||
|
// replaced with "sensitive" in string returned by LogoutInput's
|
||||||
|
// String and GoString methods.
|
||||||
|
//
|
||||||
// AccessToken is a required field
|
// AccessToken is a required field
|
||||||
AccessToken *string `location:"header" locationName:"x-amz-sso_bearer_token" type:"string" required:"true" sensitive:"true"`
|
AccessToken *string `location:"header" locationName:"x-amz-sso_bearer_token" type:"string" required:"true" sensitive:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s LogoutInput) String() string {
|
func (s LogoutInput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s LogoutInput) GoString() string {
|
func (s LogoutInput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -937,12 +1025,20 @@ type LogoutOutput struct {
|
||||||
_ struct{} `type:"structure"`
|
_ struct{} `type:"structure"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s LogoutOutput) String() string {
|
func (s LogoutOutput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s LogoutOutput) GoString() string {
|
func (s LogoutOutput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -955,12 +1051,20 @@ type ResourceNotFoundException struct {
|
||||||
Message_ *string `locationName:"message" type:"string"`
|
Message_ *string `locationName:"message" type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s ResourceNotFoundException) String() string {
|
func (s ResourceNotFoundException) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s ResourceNotFoundException) GoString() string {
|
func (s ResourceNotFoundException) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -1020,20 +1124,36 @@ type RoleCredentials struct {
|
||||||
// The key that is used to sign the request. For more information, see Using
|
// The key that is used to sign the request. For more information, see Using
|
||||||
// Temporary Security Credentials to Request Access to AWS Resources (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)
|
// Temporary Security Credentials to Request Access to AWS Resources (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)
|
||||||
// in the AWS IAM User Guide.
|
// in the AWS IAM User Guide.
|
||||||
|
//
|
||||||
|
// SecretAccessKey is a sensitive parameter and its value will be
|
||||||
|
// replaced with "sensitive" in string returned by RoleCredentials's
|
||||||
|
// String and GoString methods.
|
||||||
SecretAccessKey *string `locationName:"secretAccessKey" type:"string" sensitive:"true"`
|
SecretAccessKey *string `locationName:"secretAccessKey" type:"string" sensitive:"true"`
|
||||||
|
|
||||||
// The token used for temporary credentials. For more information, see Using
|
// The token used for temporary credentials. For more information, see Using
|
||||||
// Temporary Security Credentials to Request Access to AWS Resources (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)
|
// Temporary Security Credentials to Request Access to AWS Resources (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)
|
||||||
// in the AWS IAM User Guide.
|
// in the AWS IAM User Guide.
|
||||||
|
//
|
||||||
|
// SessionToken is a sensitive parameter and its value will be
|
||||||
|
// replaced with "sensitive" in string returned by RoleCredentials's
|
||||||
|
// String and GoString methods.
|
||||||
SessionToken *string `locationName:"sessionToken" type:"string" sensitive:"true"`
|
SessionToken *string `locationName:"sessionToken" type:"string" sensitive:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s RoleCredentials) String() string {
|
func (s RoleCredentials) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s RoleCredentials) GoString() string {
|
func (s RoleCredentials) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -1073,12 +1193,20 @@ type RoleInfo struct {
|
||||||
RoleName *string `locationName:"roleName" type:"string"`
|
RoleName *string `locationName:"roleName" type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s RoleInfo) String() string {
|
func (s RoleInfo) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s RoleInfo) GoString() string {
|
func (s RoleInfo) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -1104,12 +1232,20 @@ type TooManyRequestsException struct {
|
||||||
Message_ *string `locationName:"message" type:"string"`
|
Message_ *string `locationName:"message" type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s TooManyRequestsException) String() string {
|
func (s TooManyRequestsException) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s TooManyRequestsException) GoString() string {
|
func (s TooManyRequestsException) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -1161,12 +1297,20 @@ type UnauthorizedException struct {
|
||||||
Message_ *string `locationName:"message" type:"string"`
|
Message_ *string `locationName:"message" type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s UnauthorizedException) String() string {
|
func (s UnauthorizedException) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s UnauthorizedException) GoString() string {
|
func (s UnauthorizedException) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,11 +52,11 @@ func New(p client.ConfigProvider, cfgs ...*aws.Config) *SSO {
|
||||||
if c.SigningNameDerived || len(c.SigningName) == 0 {
|
if c.SigningNameDerived || len(c.SigningName) == 0 {
|
||||||
c.SigningName = "awsssoportal"
|
c.SigningName = "awsssoportal"
|
||||||
}
|
}
|
||||||
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName)
|
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName, c.ResolvedRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newClient creates, initializes and returns a new service client instance.
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *SSO {
|
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName, resolvedRegion string) *SSO {
|
||||||
svc := &SSO{
|
svc := &SSO{
|
||||||
Client: client.New(
|
Client: client.New(
|
||||||
cfg,
|
cfg,
|
||||||
|
|
@ -68,6 +68,7 @@ func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint,
|
||||||
PartitionID: partitionID,
|
PartitionID: partitionID,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
APIVersion: "2019-06-10",
|
APIVersion: "2019-06-10",
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
},
|
},
|
||||||
handlers,
|
handlers,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -1605,12 +1605,20 @@ type AssumeRoleInput struct {
|
||||||
TransitiveTagKeys []*string `type:"list"`
|
TransitiveTagKeys []*string `type:"list"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AssumeRoleInput) String() string {
|
func (s AssumeRoleInput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AssumeRoleInput) GoString() string {
|
func (s AssumeRoleInput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -1785,12 +1793,20 @@ type AssumeRoleOutput struct {
|
||||||
SourceIdentity *string `min:"2" type:"string"`
|
SourceIdentity *string `min:"2" type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AssumeRoleOutput) String() string {
|
func (s AssumeRoleOutput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AssumeRoleOutput) GoString() string {
|
func (s AssumeRoleOutput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -1917,12 +1933,20 @@ type AssumeRoleWithSAMLInput struct {
|
||||||
SAMLAssertion *string `min:"4" type:"string" required:"true"`
|
SAMLAssertion *string `min:"4" type:"string" required:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AssumeRoleWithSAMLInput) String() string {
|
func (s AssumeRoleWithSAMLInput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AssumeRoleWithSAMLInput) GoString() string {
|
func (s AssumeRoleWithSAMLInput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -2089,12 +2113,20 @@ type AssumeRoleWithSAMLOutput struct {
|
||||||
SubjectType *string `type:"string"`
|
SubjectType *string `type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AssumeRoleWithSAMLOutput) String() string {
|
func (s AssumeRoleWithSAMLOutput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AssumeRoleWithSAMLOutput) GoString() string {
|
func (s AssumeRoleWithSAMLOutput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -2264,12 +2296,20 @@ type AssumeRoleWithWebIdentityInput struct {
|
||||||
WebIdentityToken *string `min:"4" type:"string" required:"true"`
|
WebIdentityToken *string `min:"4" type:"string" required:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AssumeRoleWithWebIdentityInput) String() string {
|
func (s AssumeRoleWithWebIdentityInput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AssumeRoleWithWebIdentityInput) GoString() string {
|
func (s AssumeRoleWithWebIdentityInput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -2432,12 +2472,20 @@ type AssumeRoleWithWebIdentityOutput struct {
|
||||||
SubjectFromWebIdentityToken *string `min:"6" type:"string"`
|
SubjectFromWebIdentityToken *string `min:"6" type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AssumeRoleWithWebIdentityOutput) String() string {
|
func (s AssumeRoleWithWebIdentityOutput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AssumeRoleWithWebIdentityOutput) GoString() string {
|
func (s AssumeRoleWithWebIdentityOutput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -2505,12 +2553,20 @@ type AssumedRoleUser struct {
|
||||||
AssumedRoleId *string `min:"2" type:"string" required:"true"`
|
AssumedRoleId *string `min:"2" type:"string" required:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AssumedRoleUser) String() string {
|
func (s AssumedRoleUser) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s AssumedRoleUser) GoString() string {
|
func (s AssumedRoleUser) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -2552,12 +2608,20 @@ type Credentials struct {
|
||||||
SessionToken *string `type:"string" required:"true"`
|
SessionToken *string `type:"string" required:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s Credentials) String() string {
|
func (s Credentials) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s Credentials) GoString() string {
|
func (s Credentials) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -2595,12 +2659,20 @@ type DecodeAuthorizationMessageInput struct {
|
||||||
EncodedMessage *string `min:"1" type:"string" required:"true"`
|
EncodedMessage *string `min:"1" type:"string" required:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s DecodeAuthorizationMessageInput) String() string {
|
func (s DecodeAuthorizationMessageInput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s DecodeAuthorizationMessageInput) GoString() string {
|
func (s DecodeAuthorizationMessageInput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -2637,12 +2709,20 @@ type DecodeAuthorizationMessageOutput struct {
|
||||||
DecodedMessage *string `type:"string"`
|
DecodedMessage *string `type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s DecodeAuthorizationMessageOutput) String() string {
|
func (s DecodeAuthorizationMessageOutput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s DecodeAuthorizationMessageOutput) GoString() string {
|
func (s DecodeAuthorizationMessageOutput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -2672,12 +2752,20 @@ type FederatedUser struct {
|
||||||
FederatedUserId *string `min:"2" type:"string" required:"true"`
|
FederatedUserId *string `min:"2" type:"string" required:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s FederatedUser) String() string {
|
func (s FederatedUser) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s FederatedUser) GoString() string {
|
func (s FederatedUser) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -2706,12 +2794,20 @@ type GetAccessKeyInfoInput struct {
|
||||||
AccessKeyId *string `min:"16" type:"string" required:"true"`
|
AccessKeyId *string `min:"16" type:"string" required:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetAccessKeyInfoInput) String() string {
|
func (s GetAccessKeyInfoInput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetAccessKeyInfoInput) GoString() string {
|
func (s GetAccessKeyInfoInput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -2745,12 +2841,20 @@ type GetAccessKeyInfoOutput struct {
|
||||||
Account *string `type:"string"`
|
Account *string `type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetAccessKeyInfoOutput) String() string {
|
func (s GetAccessKeyInfoOutput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetAccessKeyInfoOutput) GoString() string {
|
func (s GetAccessKeyInfoOutput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -2765,12 +2869,20 @@ type GetCallerIdentityInput struct {
|
||||||
_ struct{} `type:"structure"`
|
_ struct{} `type:"structure"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetCallerIdentityInput) String() string {
|
func (s GetCallerIdentityInput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetCallerIdentityInput) GoString() string {
|
func (s GetCallerIdentityInput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -2794,12 +2906,20 @@ type GetCallerIdentityOutput struct {
|
||||||
UserId *string `type:"string"`
|
UserId *string `type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetCallerIdentityOutput) String() string {
|
func (s GetCallerIdentityOutput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetCallerIdentityOutput) GoString() string {
|
func (s GetCallerIdentityOutput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -2949,12 +3069,20 @@ type GetFederationTokenInput struct {
|
||||||
Tags []*Tag `type:"list"`
|
Tags []*Tag `type:"list"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetFederationTokenInput) String() string {
|
func (s GetFederationTokenInput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetFederationTokenInput) GoString() string {
|
func (s GetFederationTokenInput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -3057,12 +3185,20 @@ type GetFederationTokenOutput struct {
|
||||||
PackedPolicySize *int64 `type:"integer"`
|
PackedPolicySize *int64 `type:"integer"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetFederationTokenOutput) String() string {
|
func (s GetFederationTokenOutput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetFederationTokenOutput) GoString() string {
|
func (s GetFederationTokenOutput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -3120,12 +3256,20 @@ type GetSessionTokenInput struct {
|
||||||
TokenCode *string `min:"6" type:"string"`
|
TokenCode *string `min:"6" type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetSessionTokenInput) String() string {
|
func (s GetSessionTokenInput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetSessionTokenInput) GoString() string {
|
func (s GetSessionTokenInput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -3181,12 +3325,20 @@ type GetSessionTokenOutput struct {
|
||||||
Credentials *Credentials `type:"structure"`
|
Credentials *Credentials `type:"structure"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetSessionTokenOutput) String() string {
|
func (s GetSessionTokenOutput) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s GetSessionTokenOutput) GoString() string {
|
func (s GetSessionTokenOutput) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -3209,12 +3361,20 @@ type PolicyDescriptorType struct {
|
||||||
Arn *string `locationName:"arn" min:"20" type:"string"`
|
Arn *string `locationName:"arn" min:"20" type:"string"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s PolicyDescriptorType) String() string {
|
func (s PolicyDescriptorType) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s PolicyDescriptorType) GoString() string {
|
func (s PolicyDescriptorType) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
@ -3267,12 +3427,20 @@ type Tag struct {
|
||||||
Value *string `type:"string" required:"true"`
|
Value *string `type:"string" required:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the string representation
|
// String returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s Tag) String() string {
|
func (s Tag) String() string {
|
||||||
return awsutil.Prettify(s)
|
return awsutil.Prettify(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoString returns the string representation
|
// GoString returns the string representation.
|
||||||
|
//
|
||||||
|
// API parameter values that are decorated as "sensitive" in the API will not
|
||||||
|
// be included in the string output. The member name will be present, but the
|
||||||
|
// value will be replaced with "sensitive".
|
||||||
func (s Tag) GoString() string {
|
func (s Tag) GoString() string {
|
||||||
return s.String()
|
return s.String()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,11 +48,11 @@ const (
|
||||||
// svc := sts.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
// svc := sts.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
||||||
func New(p client.ConfigProvider, cfgs ...*aws.Config) *STS {
|
func New(p client.ConfigProvider, cfgs ...*aws.Config) *STS {
|
||||||
c := p.ClientConfig(EndpointsID, cfgs...)
|
c := p.ClientConfig(EndpointsID, cfgs...)
|
||||||
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName)
|
return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName, c.ResolvedRegion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newClient creates, initializes and returns a new service client instance.
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *STS {
|
func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName, resolvedRegion string) *STS {
|
||||||
svc := &STS{
|
svc := &STS{
|
||||||
Client: client.New(
|
Client: client.New(
|
||||||
cfg,
|
cfg,
|
||||||
|
|
@ -64,6 +64,7 @@ func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint,
|
||||||
PartitionID: partitionID,
|
PartitionID: partitionID,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
APIVersion: "2011-06-15",
|
APIVersion: "2011-06-15",
|
||||||
|
ResolvedRegion: resolvedRegion,
|
||||||
},
|
},
|
||||||
handlers,
|
handlers,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ github.com/aws/amazon-ec2-instance-selector/v2/pkg/bytequantity
|
||||||
github.com/aws/amazon-ec2-instance-selector/v2/pkg/cli
|
github.com/aws/amazon-ec2-instance-selector/v2/pkg/cli
|
||||||
github.com/aws/amazon-ec2-instance-selector/v2/pkg/selector
|
github.com/aws/amazon-ec2-instance-selector/v2/pkg/selector
|
||||||
github.com/aws/amazon-ec2-instance-selector/v2/pkg/selector/outputs
|
github.com/aws/amazon-ec2-instance-selector/v2/pkg/selector/outputs
|
||||||
# github.com/aws/aws-sdk-go v1.40.38
|
# github.com/aws/aws-sdk-go v1.42.5
|
||||||
## explicit; go 1.11
|
## explicit; go 1.11
|
||||||
github.com/aws/aws-sdk-go/aws
|
github.com/aws/aws-sdk-go/aws
|
||||||
github.com/aws/aws-sdk-go/aws/arn
|
github.com/aws/aws-sdk-go/aws/arn
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue