forked from TrueCloudLab/distribution
Add dualstack option to S3 storage driver
Allow the storage driver to optionally use AWS SDK's dualstack mode. This allows the registry to communicate with S3 in IPv6 environments. Signed-off-by: Adam Kaplan <adam.kaplan@redhat.com>
This commit is contained in:
parent
81a2d171ee
commit
e2caaf9cba
3 changed files with 33 additions and 0 deletions
|
@ -128,6 +128,7 @@ storage:
|
|||
multipartcopymaxconcurrency: 100
|
||||
multipartcopythresholdsize: 33554432
|
||||
rootdirectory: /s3/object/name/prefix
|
||||
usedualstack: false
|
||||
swift:
|
||||
username: username
|
||||
password: password
|
||||
|
|
|
@ -102,6 +102,7 @@ type DriverParameters struct {
|
|||
UserAgent string
|
||||
ObjectACL string
|
||||
SessionToken string
|
||||
UseDualStack bool
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
@ -338,6 +339,23 @@ func FromParameters(parameters map[string]interface{}) (*Driver, error) {
|
|||
objectACL = objectACLString
|
||||
}
|
||||
|
||||
useDualStackBool := false
|
||||
useDualStack := parameters["usedualstack"]
|
||||
switch useDualStack := useDualStack.(type) {
|
||||
case string:
|
||||
b, err := strconv.ParseBool(useDualStack)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("the useDualStack parameter should be a boolean")
|
||||
}
|
||||
useDualStackBool = b
|
||||
case bool:
|
||||
useDualStackBool = useDualStack
|
||||
case nil:
|
||||
// do nothing
|
||||
default:
|
||||
return nil, fmt.Errorf("the useDualStack parameter should be a boolean")
|
||||
}
|
||||
|
||||
sessionToken := ""
|
||||
|
||||
params := DriverParameters{
|
||||
|
@ -360,6 +378,7 @@ func FromParameters(parameters map[string]interface{}) (*Driver, error) {
|
|||
fmt.Sprint(userAgent),
|
||||
objectACL,
|
||||
fmt.Sprint(sessionToken),
|
||||
useDualStackBool,
|
||||
}
|
||||
|
||||
return New(params)
|
||||
|
@ -421,6 +440,9 @@ func New(params DriverParameters) (*Driver, error) {
|
|||
|
||||
awsConfig.WithRegion(params.Region)
|
||||
awsConfig.WithDisableSSL(!params.Secure)
|
||||
if params.UseDualStack {
|
||||
awsConfig.UseDualStackEndpoint = endpoints.DualStackEndpointStateEnabled
|
||||
}
|
||||
|
||||
if params.UserAgent != "" || params.SkipVerify {
|
||||
httpTransport := http.DefaultTransport
|
||||
|
|
|
@ -42,6 +42,7 @@ func init() {
|
|||
root, err := ioutil.TempDir("", "driver-")
|
||||
regionEndpoint := os.Getenv("REGION_ENDPOINT")
|
||||
sessionToken := os.Getenv("AWS_SESSION_TOKEN")
|
||||
useDualStack := os.Getenv("S3_USE_DUALSTACK")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@ -80,6 +81,14 @@ func init() {
|
|||
}
|
||||
}
|
||||
|
||||
useDualStackBool := false
|
||||
if useDualStack != "" {
|
||||
useDualStackBool, err = strconv.ParseBool(useDualStack)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
parameters := DriverParameters{
|
||||
accessKey,
|
||||
secretKey,
|
||||
|
@ -100,6 +109,7 @@ func init() {
|
|||
driverName + "-test",
|
||||
objectACL,
|
||||
sessionToken,
|
||||
useDualStackBool,
|
||||
}
|
||||
|
||||
return New(parameters)
|
||||
|
|
Loading…
Reference in a new issue