|  | package openstack | 
|  |  | 
|  | import ( | 
|  | "fmt" | 
|  | "os" | 
|  |  | 
|  | "github.com/rackspace/gophercloud" | 
|  | ) | 
|  |  | 
|  | var nilOptions = gophercloud.AuthOptions{} | 
|  |  | 
|  | // ErrNoAuthUrl, ErrNoUsername, and ErrNoPassword errors indicate of the required OS_AUTH_URL, OS_USERNAME, or OS_PASSWORD | 
|  | // environment variables, respectively, remain undefined.  See the AuthOptions() function for more details. | 
|  | var ( | 
|  | ErrNoAuthURL  = fmt.Errorf("Environment variable OS_AUTH_URL needs to be set.") | 
|  | ErrNoUsername = fmt.Errorf("Environment variable OS_USERNAME needs to be set.") | 
|  | ErrNoPassword = fmt.Errorf("Environment variable OS_PASSWORD needs to be set.") | 
|  | ) | 
|  |  | 
|  | // AuthOptions fills out an identity.AuthOptions structure with the settings found on the various OpenStack | 
|  | // OS_* environment variables.  The following variables provide sources of truth: OS_AUTH_URL, OS_USERNAME, | 
|  | // OS_PASSWORD, OS_TENANT_ID, and OS_TENANT_NAME.  Of these, OS_USERNAME, OS_PASSWORD, and OS_AUTH_URL must | 
|  | // have settings, or an error will result.  OS_TENANT_ID and OS_TENANT_NAME are optional. | 
|  | func AuthOptionsFromEnv() (gophercloud.AuthOptions, error) { | 
|  | authURL := os.Getenv("OS_AUTH_URL") | 
|  | username := os.Getenv("OS_USERNAME") | 
|  | userID := os.Getenv("OS_USERID") | 
|  | password := os.Getenv("OS_PASSWORD") | 
|  | tenantID := os.Getenv("OS_TENANT_ID") | 
|  | tenantName := os.Getenv("OS_TENANT_NAME") | 
|  | domainID := os.Getenv("OS_DOMAIN_ID") | 
|  | domainName := os.Getenv("OS_DOMAIN_NAME") | 
|  |  | 
|  | if authURL == "" { | 
|  | return nilOptions, ErrNoAuthURL | 
|  | } | 
|  |  | 
|  | if username == "" && userID == "" { | 
|  | return nilOptions, ErrNoUsername | 
|  | } | 
|  |  | 
|  | if password == "" { | 
|  | return nilOptions, ErrNoPassword | 
|  | } | 
|  |  | 
|  | ao := gophercloud.AuthOptions{ | 
|  | IdentityEndpoint: authURL, | 
|  | UserID:           userID, | 
|  | Username:         username, | 
|  | Password:         password, | 
|  | TenantID:         tenantID, | 
|  | TenantName:       tenantName, | 
|  | DomainID:         domainID, | 
|  | DomainName:       domainName, | 
|  | } | 
|  |  | 
|  | return ao, nil | 
|  | } |