1package openstack 2 3import ( 4 "os" 5 6 "github.com/gophercloud/gophercloud" 7) 8 9var nilOptions = gophercloud.AuthOptions{} 10 11// AuthOptionsFromEnv fills out an identity.AuthOptions structure with the settings found on the various OpenStack 12// OS_* environment variables. The following variables provide sources of truth: OS_AUTH_URL, OS_USERNAME, 13// OS_PASSWORD, OS_TENANT_ID, and OS_TENANT_NAME. Of these, OS_USERNAME, OS_PASSWORD, and OS_AUTH_URL must 14// have settings, or an error will result. OS_TENANT_ID and OS_TENANT_NAME are optional. 15func AuthOptionsFromEnv() (gophercloud.AuthOptions, error) { 16 authURL := os.Getenv("OS_AUTH_URL") 17 username := os.Getenv("OS_USERNAME") 18 userID := os.Getenv("OS_USERID") 19 password := os.Getenv("OS_PASSWORD") 20 tenantID := os.Getenv("OS_TENANT_ID") 21 tenantName := os.Getenv("OS_TENANT_NAME") 22 domainID := os.Getenv("OS_DOMAIN_ID") 23 domainName := os.Getenv("OS_DOMAIN_NAME") 24 25 if authURL == "" { 26 err := gophercloud.ErrMissingInput{Argument: "authURL"} 27 return nilOptions, err 28 } 29 30 if username == "" && userID == "" { 31 err := gophercloud.ErrMissingInput{Argument: "username"} 32 return nilOptions, err 33 } 34 35 if password == "" { 36 err := gophercloud.ErrMissingInput{Argument: "password"} 37 return nilOptions, err 38 } 39 40 ao := gophercloud.AuthOptions{ 41 IdentityEndpoint: authURL, 42 UserID: userID, 43 Username: username, 44 Password: password, 45 TenantID: tenantID, 46 TenantName: tenantName, 47 DomainID: domainID, 48 DomainName: domainName, 49 } 50 51 return ao, nil 52} 53