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>master
							parent
							
								
									81a2d171ee
								
							
						
					
					
						commit
						e2caaf9cba
					
				|  | @ -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 New Issue