Add support for Openstack Identity v3 API

Signed-off-by: Li Wenquan <wenquan.li@hp.com>
This commit is contained in:
davidli 2015-06-08 16:37:11 +08:00 committed by Sylvain Baubeau
parent 3f9e7ed169
commit 062d6266cf
2 changed files with 47 additions and 18 deletions

View file

@ -10,6 +10,7 @@ package swift
import ( import (
"bytes" "bytes"
"crypto/tls"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "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 //DriverParameters A struct that encapsulates all of the driver parameters after all values have been set
type DriverParameters struct { type DriverParameters struct {
Username string Username string
Password string Password string
AuthURL string AuthURL string
Tenant string Tenant string
Region string TenantID string
Container string Domain string
Prefix string DomainID string
ChunkSize int Region string
Container string
Prefix string
InsecureSkipVerify bool
ChunkSize int
} }
type swiftInfo map[string]interface{} type swiftInfo map[string]interface{}
@ -89,7 +94,8 @@ type Driver struct {
// - container // - container
func FromParameters(parameters map[string]interface{}) (*Driver, error) { func FromParameters(parameters map[string]interface{}) (*Driver, error) {
params := DriverParameters{ params := DriverParameters{
ChunkSize: defaultChunkSize, ChunkSize: defaultChunkSize,
InsecureSkipVerify: false,
} }
if err := mapstructure.Decode(parameters, &params); err != nil { if err := mapstructure.Decode(parameters, &params); 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 // New constructs a new Driver with the given Openstack Swift credentials and container name
func New(params DriverParameters) (*Driver, error) { func New(params DriverParameters) (*Driver, error) {
transport := &http.Transport{
Proxy: http.ProxyFromEnvironment,
MaxIdleConnsPerHost: 2048,
TLSClientConfig: &tls.Config{InsecureSkipVerify: params.InsecureSkipVerify},
}
ct := swift.Connection{ ct := swift.Connection{
UserName: params.Username, UserName: params.Username,
ApiKey: params.Password, ApiKey: params.Password,
@ -128,6 +140,10 @@ func New(params DriverParameters) (*Driver, error) {
Region: params.Region, Region: params.Region,
UserAgent: "distribution", UserAgent: "distribution",
Tenant: params.Tenant, Tenant: params.Tenant,
TenantId: params.TenantID,
Domain: params.Domain,
DomainId: params.DomainID,
Transport: transport,
ConnectTimeout: 60 * time.Second, ConnectTimeout: 60 * time.Second,
Timeout: 15 * 60 * time.Second, Timeout: 15 * 60 * time.Second,
} }

View file

@ -3,6 +3,7 @@ package swift
import ( import (
"io/ioutil" "io/ioutil"
"os" "os"
"strconv"
"testing" "testing"
"github.com/ncw/swift/swifttest" "github.com/ncw/swift/swifttest"
@ -21,15 +22,19 @@ type SwiftDriverConstructor func(rootDirectory string) (*Driver, error)
func init() { func init() {
var ( var (
username string username string
password string password string
authURL string authURL string
tenant string tenant string
container string tenantID string
region string domain string
prefix string domainID string
swiftServer *swifttest.SwiftServer container string
err error region string
prefix string
insecureSkipVerify bool
swiftServer *swifttest.SwiftServer
err error
) )
if username = os.Getenv("OS_USERNAME"); username == "" { if username = os.Getenv("OS_USERNAME"); username == "" {
username = os.Getenv("ST_USER") username = os.Getenv("ST_USER")
@ -41,9 +46,13 @@ func init() {
authURL = os.Getenv("ST_AUTH") authURL = os.Getenv("ST_AUTH")
} }
tenant = os.Getenv("OS_TENANT_NAME") 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") container = os.Getenv("OS_CONTAINER_NAME")
region = os.Getenv("OS_REGION_NAME") region = os.Getenv("OS_REGION_NAME")
prefix = os.Getenv("OS_CONTAINER_PREFIX") prefix = os.Getenv("OS_CONTAINER_PREFIX")
insecureSkipVerify, _ = strconv.ParseBool(os.Getenv("ST_INSECURESKIPVERIFY"))
if username == "" || password == "" || authURL == "" || container == "" { if username == "" || password == "" || authURL == "" || container == "" {
if swiftServer, err = swifttest.NewSwiftServer("localhost"); err != nil { if swiftServer, err = swifttest.NewSwiftServer("localhost"); err != nil {
@ -67,9 +76,13 @@ func init() {
password, password,
authURL, authURL,
tenant, tenant,
tenantID,
domain,
domainID,
region, region,
container, container,
prefix, prefix,
insecureSkipVerify,
defaultChunkSize, defaultChunkSize,
} }