Add support for Openstack Identity v3 API
Signed-off-by: Li Wenquan <wenquan.li@hp.com>master
							parent
							
								
									3ff9f9b9cc
								
							
						
					
					
						commit
						af99dbd6bf
					
				| 
						 | 
				
			
			@ -49,7 +49,6 @@ This section lists all the registry configuration options. Some options in
 | 
			
		|||
the list are mutually exclusive. So, make sure to read the detailed reference
 | 
			
		||||
information about each option that appears later in this page.
 | 
			
		||||
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
    version: 0.1
 | 
			
		||||
    log:
 | 
			
		||||
      level: debug
 | 
			
		||||
| 
						 | 
				
			
			@ -96,8 +95,12 @@ information about each option that appears later in this page.
 | 
			
		|||
      swift:
 | 
			
		||||
        username: username
 | 
			
		||||
        password: password
 | 
			
		||||
        authurl: https://storage.myprovider.com/v2.0
 | 
			
		||||
        authurl: https://storage.myprovider.com/v2.0 or https://storage.myprovider.com/v3/auth
 | 
			
		||||
        tenant: tenantname
 | 
			
		||||
        tenantid: tenantid
 | 
			
		||||
        domain: domain name for Openstack Identity v3 API
 | 
			
		||||
        domainid: domain id for Openstack Identity v3 API
 | 
			
		||||
        insecureskipverify: true
 | 
			
		||||
        region: fr
 | 
			
		||||
        container: containername
 | 
			
		||||
        rootdirectory: /swift/object/name/prefix
 | 
			
		||||
| 
						 | 
				
			
			@ -665,6 +668,50 @@ This storage backend uses Openstack Swift object storage.
 | 
			
		|||
      Your Openstack tenant name.
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
  <tr>
 | 
			
		||||
    <td>
 | 
			
		||||
      <code>tenantid</code>
 | 
			
		||||
    </td>
 | 
			
		||||
    <td>
 | 
			
		||||
      no
 | 
			
		||||
    </td>
 | 
			
		||||
    <td>
 | 
			
		||||
      Your Openstack tenant id.
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
  <tr>
 | 
			
		||||
    <td>
 | 
			
		||||
      <code>domain</code>
 | 
			
		||||
    </td>
 | 
			
		||||
    <td>
 | 
			
		||||
      no
 | 
			
		||||
    </td>
 | 
			
		||||
    <td>
 | 
			
		||||
      Your Openstack domain name for Identity v3 API.
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
  <tr>
 | 
			
		||||
    <td>
 | 
			
		||||
      <code>domainid</code>
 | 
			
		||||
    </td>
 | 
			
		||||
    <td>
 | 
			
		||||
      no
 | 
			
		||||
    </td>
 | 
			
		||||
    <td>
 | 
			
		||||
      Your Openstack domain id for Identity v3 API.
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
  <tr>
 | 
			
		||||
    <td>
 | 
			
		||||
      <code>insecureskipverify</code>
 | 
			
		||||
    </td>
 | 
			
		||||
    <td>
 | 
			
		||||
      no
 | 
			
		||||
    </td>
 | 
			
		||||
      true for skip TLS verification, false by default.
 | 
			
		||||
    <td>
 | 
			
		||||
    </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
  <tr>
 | 
			
		||||
    <td>
 | 
			
		||||
      <code>chunksize</code>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,15 @@ An implementation of the `storagedriver.StorageDriver` interface which uses [Ope
 | 
			
		|||
 | 
			
		||||
`container`: The name of your Swift container where you wish to store objects. An additional container - named `<container>_segments` to store the data will be used. The driver will try to create both containers during its initialization.
 | 
			
		||||
 | 
			
		||||
`tenant`: (optional) Your Openstack tenant name.
 | 
			
		||||
`tenant`: (optional) Your Openstack tenant name. You can either use `tenant` or `tenantid`.
 | 
			
		||||
 | 
			
		||||
`tenantid`: (optional) Your Openstack tenant id. You can either use `tenant` or `tenantid`.
 | 
			
		||||
 | 
			
		||||
`domain`: (Optional) Your Openstack domain name for Identity v3 API. You can either use `domain` or `domainid`.
 | 
			
		||||
 | 
			
		||||
`domainid`: (Optional) Your Openstack domain id for Identity v3 API. You can either use `domain` or `domainid`.
 | 
			
		||||
 | 
			
		||||
`insecureskipverify`: (Optional) insecureskipverify can be set to true to skip TLS verification for your openstack provider. Default is false.
 | 
			
		||||
 | 
			
		||||
`region`: (optional) The name of the Openstack region in which you would like to store objects (for example `fr`).
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue