func TestAuthenticatedClient(t *testing.T) { // Obtain credentials from the environment. ao, err := openstack.AuthOptionsFromEnv() if err != nil { t.Fatalf("Unable to acquire credentials: %v", err) } client, err := openstack.AuthenticatedClient(ao) if err != nil { t.Fatalf("Unable to authenticate: %v", err) } if client.TokenID == "" { t.Errorf("No token ID assigned to the client") } t.Logf("Client successfully acquired a token: %v", client.TokenID) // Find the storage service in the service catalog. storage, err := openstack.NewObjectStorageV1(client, gophercloud.EndpointOpts{ Region: os.Getenv("OS_REGION_NAME"), }) if err != nil { t.Errorf("Unable to locate a storage service: %v", err) } else { t.Logf("Located a storage service at endpoint: [%s]", storage.Endpoint) } }
func newClient(t *testing.T) *gophercloud.ServiceClient { ao, err := openstack.AuthOptionsFromEnv() th.AssertNoErr(t, err) client, err := openstack.AuthenticatedClient(ao) th.AssertNoErr(t, err) c, err := openstack.NewObjectStorageV1(client, gophercloud.EndpointOpts{ Region: os.Getenv("OS_REGION_NAME"), }) th.AssertNoErr(t, err) return c }
func (c *Config) objectStorageV1Client(region string) (*gophercloud.ServiceClient, error) { // If Swift Authentication is being used, return a swauth client. if c.Swauth { return swauth.NewObjectStorageV1(c.osClient, swauth.AuthOpts{ User: c.Username, Key: c.Password, }) } return openstack.NewObjectStorageV1(c.osClient, gophercloud.EndpointOpts{ Region: region, Availability: c.getEndpointType(), }) }
func (c *SwiftClient) validateConfig(conf map[string]string) (err error) { authUrl, ok := conf["auth_url"] if !ok { authUrl = os.Getenv("OS_AUTH_URL") if authUrl == "" { return fmt.Errorf("missing 'auth_url' configuration or OS_AUTH_URL environment variable") } } c.authurl = authUrl username, ok := conf["user_name"] if !ok { username = os.Getenv("OS_USERNAME") } c.username = username userID, ok := conf["user_id"] if !ok { userID = os.Getenv("OS_USER_ID") } c.userid = userID token, ok := conf["token"] if !ok { token = os.Getenv("OS_AUTH_TOKEN") } c.token = token password, ok := conf["password"] if !ok { password = os.Getenv("OS_PASSWORD") } c.password = password if password == "" && token == "" { return fmt.Errorf("missing either password or token configuration or OS_PASSWORD or OS_AUTH_TOKEN environment variable") } region, ok := conf["region_name"] if !ok { region = os.Getenv("OS_REGION_NAME") } c.region = region tenantID, ok := conf["tenant_id"] if !ok { tenantID = multiEnv([]string{ "OS_TENANT_ID", "OS_PROJECT_ID", }) } c.tenantid = tenantID tenantName, ok := conf["tenant_name"] if !ok { tenantName = multiEnv([]string{ "OS_TENANT_NAME", "OS_PROJECT_NAME", }) } c.tenantname = tenantName domainID, ok := conf["domain_id"] if !ok { domainID = multiEnv([]string{ "OS_USER_DOMAIN_ID", "OS_PROJECT_DOMAIN_ID", "OS_DOMAIN_ID", }) } c.domainid = domainID domainName, ok := conf["domain_name"] if !ok { domainName = multiEnv([]string{ "OS_USER_DOMAIN_NAME", "OS_PROJECT_DOMAIN_NAME", "OS_DOMAIN_NAME", "DEFAULT_DOMAIN", }) } c.domainname = domainName path, ok := conf["path"] if !ok || path == "" { return fmt.Errorf("missing 'path' configuration") } c.path = path if archivepath, ok := conf["archive_path"]; ok { log.Printf("[DEBUG] Archivepath set, enabling object versioning") c.archive = true c.archivepath = archivepath } if expire, ok := conf["expire_after"]; ok { log.Printf("[DEBUG] Requested that remote state expires after %s", expire) if strings.HasSuffix(expire, "d") { log.Printf("[DEBUG] Got a days expire after duration. Converting to hours") days, err := strconv.Atoi(expire[:len(expire)-1]) if err != nil { return fmt.Errorf("Error converting expire_after value %s to int: %s", expire, err) } expire = fmt.Sprintf("%dh", days*24) log.Printf("[DEBUG] Expire after %s hours", expire) } expireDur, err := time.ParseDuration(expire) if err != nil { log.Printf("[DEBUG] Error parsing duration %s: %s", expire, err) return fmt.Errorf("Error parsing expire_after duration '%s': %s", expire, err) } log.Printf("[DEBUG] Seconds duration = %d", int(expireDur.Seconds())) c.expireSecs = int(expireDur.Seconds()) } c.insecure = false raw, ok := conf["insecure"] if !ok { raw = os.Getenv("OS_INSECURE") } if raw != "" { v, err := strconv.ParseBool(raw) if err != nil { return fmt.Errorf("'insecure' and 'OS_INSECURE' could not be parsed as bool: %s", err) } c.insecure = v } cacertFile, ok := conf["cacert_file"] if !ok { cacertFile = os.Getenv("OS_CACERT") } c.cacert = cacertFile cert, ok := conf["cert"] if !ok { cert = os.Getenv("OS_CERT") } c.cert = cert key, ok := conf["key"] if !ok { key = os.Getenv("OS_KEY") } c.key = key ao := gophercloud.AuthOptions{ IdentityEndpoint: c.authurl, UserID: c.userid, Username: c.username, TenantID: c.tenantid, TenantName: c.tenantname, Password: c.password, TokenID: c.token, DomainID: c.domainid, DomainName: c.domainname, } provider, err := openstack.NewClient(ao.IdentityEndpoint) if err != nil { return err } config := &tls.Config{} if c.cacert != "" { caCert, err := ioutil.ReadFile(c.cacert) if err != nil { return err } caCertPool := x509.NewCertPool() caCertPool.AppendCertsFromPEM(caCert) config.RootCAs = caCertPool } if c.insecure { log.Printf("[DEBUG] Insecure mode set") config.InsecureSkipVerify = true } if c.cert != "" && c.key != "" { cert, err := tls.LoadX509KeyPair(c.cert, c.key) if err != nil { return err } config.Certificates = []tls.Certificate{cert} config.BuildNameToCertificate() } transport := &http.Transport{Proxy: http.ProxyFromEnvironment, TLSClientConfig: config} provider.HTTPClient.Transport = transport err = openstack.Authenticate(provider, ao) if err != nil { return err } c.client, err = openstack.NewObjectStorageV1(provider, gophercloud.EndpointOpts{ Region: c.region, }) return err }
func (c *Config) objectStorageV1Client(region string) (*gophercloud.ServiceClient, error) { return openstack.NewObjectStorageV1(c.osClient, gophercloud.EndpointOpts{ Region: region, Availability: c.getEndpointType(), }) }
func (c *SwiftClient) validateConfig(conf map[string]string) (err error) { authUrl, ok := conf["auth_url"] if !ok { authUrl = os.Getenv("OS_AUTH_URL") if authUrl == "" { return fmt.Errorf("missing 'auth_url' configuration or OS_AUTH_URL environment variable") } } c.authurl = authUrl username, ok := conf["user_name"] if !ok { username = os.Getenv("OS_USERNAME") } c.username = username userID, ok := conf["user_id"] if !ok { userID = os.Getenv("OS_USER_ID") } c.userid = userID password, ok := conf["password"] if !ok { password = os.Getenv("OS_PASSWORD") if password == "" { return fmt.Errorf("missing 'password' configuration or OS_PASSWORD environment variable") } } c.password = password region, ok := conf["region_name"] if !ok { region = os.Getenv("OS_REGION_NAME") } c.region = region tenantID, ok := conf["tenant_id"] if !ok { tenantID = multiEnv([]string{ "OS_TENANT_ID", "OS_PROJECT_ID", }) } c.tenantid = tenantID tenantName, ok := conf["tenant_name"] if !ok { tenantName = multiEnv([]string{ "OS_TENANT_NAME", "OS_PROJECT_NAME", }) } c.tenantname = tenantName domainID, ok := conf["domain_id"] if !ok { domainID = multiEnv([]string{ "OS_USER_DOMAIN_ID", "OS_PROJECT_DOMAIN_ID", "OS_DOMAIN_ID", }) } c.domainid = domainID domainName, ok := conf["domain_name"] if !ok { domainName = multiEnv([]string{ "OS_USER_DOMAIN_NAME", "OS_PROJECT_DOMAIN_NAME", "OS_DOMAIN_NAME", "DEFAULT_DOMAIN", }) } c.domainname = domainName path, ok := conf["path"] if !ok || path == "" { return fmt.Errorf("missing 'path' configuration") } c.path = path c.insecure = false raw, ok := conf["insecure"] if !ok { raw = os.Getenv("OS_INSECURE") } if raw != "" { v, err := strconv.ParseBool(raw) if err != nil { return fmt.Errorf("'insecure' and 'OS_INSECURE' could not be parsed as bool: %s", err) } c.insecure = v } cacertFile, ok := conf["cacert_file"] if !ok { cacertFile = os.Getenv("OS_CACERT") } c.cacert = cacertFile cert, ok := conf["cert"] if !ok { cert = os.Getenv("OS_CERT") } c.cert = cert key, ok := conf["key"] if !ok { key = os.Getenv("OS_KEY") } c.key = key ao := gophercloud.AuthOptions{ IdentityEndpoint: c.authurl, UserID: c.userid, Username: c.username, TenantID: c.tenantid, TenantName: c.tenantname, Password: c.password, DomainID: c.domainid, DomainName: c.domainname, } provider, err := openstack.NewClient(ao.IdentityEndpoint) if err != nil { return err } config := &tls.Config{} if c.cacert != "" { caCert, err := ioutil.ReadFile(c.cacert) if err != nil { return err } caCertPool := x509.NewCertPool() caCertPool.AppendCertsFromPEM(caCert) config.RootCAs = caCertPool } if c.insecure { log.Printf("[DEBUG] Insecure mode set") config.InsecureSkipVerify = true } if c.cert != "" && c.key != "" { cert, err := tls.LoadX509KeyPair(c.cert, c.key) if err != nil { return err } config.Certificates = []tls.Certificate{cert} config.BuildNameToCertificate() } transport := &http.Transport{Proxy: http.ProxyFromEnvironment, TLSClientConfig: config} provider.HTTPClient.Transport = transport err = openstack.Authenticate(provider, ao) if err != nil { return err } c.client, err = openstack.NewObjectStorageV1(provider, gophercloud.EndpointOpts{ Region: c.region, }) return err }