From 062d6266cf5153bf40dbe01d781cdeace7653aa1 Mon Sep 17 00:00:00 2001 From: davidli Date: Mon, 8 Jun 2015 16:37:11 +0800 Subject: [PATCH] Add support for Openstack Identity v3 API Signed-off-by: Li Wenquan --- docs/storage/driver/swift/swift.go | 34 ++++++++++++++++++------- docs/storage/driver/swift/swift_test.go | 31 +++++++++++++++------- 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/docs/storage/driver/swift/swift.go b/docs/storage/driver/swift/swift.go index 66c1a85b..0875edef 100644 --- a/docs/storage/driver/swift/swift.go +++ b/docs/storage/driver/swift/swift.go @@ -10,6 +10,7 @@ package swift import ( "bytes" + "crypto/tls" "encoding/json" "fmt" "io" @@ -40,14 +41,18 @@ const directoryMimeType = "application/directory" //DriverParameters A struct that encapsulates all of the driver parameters after all values have been set type DriverParameters struct { - Username string - Password string - AuthURL string - Tenant string - Region string - Container string - Prefix string - ChunkSize int + Username string + Password string + AuthURL string + Tenant string + TenantID string + Domain string + DomainID string + Region string + Container string + Prefix string + InsecureSkipVerify bool + ChunkSize int } type swiftInfo map[string]interface{} @@ -89,7 +94,8 @@ type Driver struct { // - container func FromParameters(parameters map[string]interface{}) (*Driver, error) { params := DriverParameters{ - ChunkSize: defaultChunkSize, + ChunkSize: defaultChunkSize, + InsecureSkipVerify: false, } if err := mapstructure.Decode(parameters, ¶ms); err != nil { @@ -121,6 +127,12 @@ func FromParameters(parameters map[string]interface{}) (*Driver, error) { // New constructs a new Driver with the given Openstack Swift credentials and container name func New(params DriverParameters) (*Driver, error) { + transport := &http.Transport{ + Proxy: http.ProxyFromEnvironment, + MaxIdleConnsPerHost: 2048, + TLSClientConfig: &tls.Config{InsecureSkipVerify: params.InsecureSkipVerify}, + } + ct := swift.Connection{ UserName: params.Username, ApiKey: params.Password, @@ -128,6 +140,10 @@ func New(params DriverParameters) (*Driver, error) { Region: params.Region, UserAgent: "distribution", Tenant: params.Tenant, + TenantId: params.TenantID, + Domain: params.Domain, + DomainId: params.DomainID, + Transport: transport, ConnectTimeout: 60 * time.Second, Timeout: 15 * 60 * time.Second, } diff --git a/docs/storage/driver/swift/swift_test.go b/docs/storage/driver/swift/swift_test.go index 5ead8d15..fc66aa26 100644 --- a/docs/storage/driver/swift/swift_test.go +++ b/docs/storage/driver/swift/swift_test.go @@ -3,6 +3,7 @@ package swift import ( "io/ioutil" "os" + "strconv" "testing" "github.com/ncw/swift/swifttest" @@ -21,15 +22,19 @@ type SwiftDriverConstructor func(rootDirectory string) (*Driver, error) func init() { var ( - username string - password string - authURL string - tenant string - container string - region string - prefix string - swiftServer *swifttest.SwiftServer - err error + username string + password string + authURL string + tenant string + tenantID string + domain string + domainID string + container string + region string + prefix string + insecureSkipVerify bool + swiftServer *swifttest.SwiftServer + err error ) if username = os.Getenv("OS_USERNAME"); username == "" { username = os.Getenv("ST_USER") @@ -41,9 +46,13 @@ func init() { authURL = os.Getenv("ST_AUTH") } tenant = os.Getenv("OS_TENANT_NAME") + tenantID = os.Getenv("OS_TENANT_ID") + domain = os.Getenv("OS_DOMAIN_NAME") + domainID = os.Getenv("OS_DOMAIN_ID") container = os.Getenv("OS_CONTAINER_NAME") region = os.Getenv("OS_REGION_NAME") prefix = os.Getenv("OS_CONTAINER_PREFIX") + insecureSkipVerify, _ = strconv.ParseBool(os.Getenv("ST_INSECURESKIPVERIFY")) if username == "" || password == "" || authURL == "" || container == "" { if swiftServer, err = swifttest.NewSwiftServer("localhost"); err != nil { @@ -67,9 +76,13 @@ func init() { password, authURL, tenant, + tenantID, + domain, + domainID, region, container, prefix, + insecureSkipVerify, defaultChunkSize, }