Code refactoring for bpa operator
[icn.git] / cmd / bpa-operator / vendor / github.com / gophercloud / gophercloud / openstack / auth_env.go
1 package openstack
2
3 import (
4         "os"
5
6         "github.com/gophercloud/gophercloud"
7 )
8
9 var nilOptions = gophercloud.AuthOptions{}
10
11 /*
12 AuthOptionsFromEnv fills out an identity.AuthOptions structure with the
13 settings found on the various OpenStack OS_* environment variables.
14
15 The following variables provide sources of truth: OS_AUTH_URL, OS_USERNAME,
16 OS_PASSWORD and OS_PROJECT_ID.
17
18 Of these, OS_USERNAME, OS_PASSWORD, and OS_AUTH_URL must have settings,
19 or an error will result.  OS_PROJECT_ID, is optional.
20
21 OS_TENANT_ID and OS_TENANT_NAME are deprecated forms of OS_PROJECT_ID and
22 OS_PROJECT_NAME and the latter are expected against a v3 auth api.
23
24 If OS_PROJECT_ID and OS_PROJECT_NAME are set, they will still be referred
25 as "tenant" in Gophercloud.
26
27 If OS_PROJECT_NAME is set, it requires OS_PROJECT_ID to be set as well to
28 handle projects not on the default domain.
29
30 To use this function, first set the OS_* environment variables (for example,
31 by sourcing an `openrc` file), then:
32
33         opts, err := openstack.AuthOptionsFromEnv()
34         provider, err := openstack.AuthenticatedClient(opts)
35 */
36 func AuthOptionsFromEnv() (gophercloud.AuthOptions, error) {
37         authURL := os.Getenv("OS_AUTH_URL")
38         username := os.Getenv("OS_USERNAME")
39         userID := os.Getenv("OS_USERID")
40         password := os.Getenv("OS_PASSWORD")
41         tenantID := os.Getenv("OS_TENANT_ID")
42         tenantName := os.Getenv("OS_TENANT_NAME")
43         domainID := os.Getenv("OS_DOMAIN_ID")
44         domainName := os.Getenv("OS_DOMAIN_NAME")
45         applicationCredentialID := os.Getenv("OS_APPLICATION_CREDENTIAL_ID")
46         applicationCredentialName := os.Getenv("OS_APPLICATION_CREDENTIAL_NAME")
47         applicationCredentialSecret := os.Getenv("OS_APPLICATION_CREDENTIAL_SECRET")
48
49         // If OS_PROJECT_ID is set, overwrite tenantID with the value.
50         if v := os.Getenv("OS_PROJECT_ID"); v != "" {
51                 tenantID = v
52         }
53
54         // If OS_PROJECT_NAME is set, overwrite tenantName with the value.
55         if v := os.Getenv("OS_PROJECT_NAME"); v != "" {
56                 tenantName = v
57         }
58
59         if authURL == "" {
60                 err := gophercloud.ErrMissingEnvironmentVariable{
61                         EnvironmentVariable: "OS_AUTH_URL",
62                 }
63                 return nilOptions, err
64         }
65
66         if userID == "" && username == "" {
67                 // Empty username and userID could be ignored, when applicationCredentialID and applicationCredentialSecret are set
68                 if applicationCredentialID == "" && applicationCredentialSecret == "" {
69                         err := gophercloud.ErrMissingAnyoneOfEnvironmentVariables{
70                                 EnvironmentVariables: []string{"OS_USERID", "OS_USERNAME"},
71                         }
72                         return nilOptions, err
73                 }
74         }
75
76         if password == "" && applicationCredentialID == "" && applicationCredentialName == "" {
77                 err := gophercloud.ErrMissingEnvironmentVariable{
78                         EnvironmentVariable: "OS_PASSWORD",
79                 }
80                 return nilOptions, err
81         }
82
83         if (applicationCredentialID != "" || applicationCredentialName != "") && applicationCredentialSecret == "" {
84                 err := gophercloud.ErrMissingEnvironmentVariable{
85                         EnvironmentVariable: "OS_APPLICATION_CREDENTIAL_SECRET",
86                 }
87                 return nilOptions, err
88         }
89
90         if domainID == "" && domainName == "" && tenantID == "" && tenantName != "" {
91                 err := gophercloud.ErrMissingEnvironmentVariable{
92                         EnvironmentVariable: "OS_PROJECT_ID",
93                 }
94                 return nilOptions, err
95         }
96
97         if applicationCredentialID == "" && applicationCredentialName != "" && applicationCredentialSecret != "" {
98                 if userID == "" && username == "" {
99                         return nilOptions, gophercloud.ErrMissingAnyoneOfEnvironmentVariables{
100                                 EnvironmentVariables: []string{"OS_USERID", "OS_USERNAME"},
101                         }
102                 }
103                 if username != "" && domainID == "" && domainName == "" {
104                         return nilOptions, gophercloud.ErrMissingAnyoneOfEnvironmentVariables{
105                                 EnvironmentVariables: []string{"OS_DOMAIN_ID", "OS_DOMAIN_NAME"},
106                         }
107                 }
108         }
109
110         ao := gophercloud.AuthOptions{
111                 IdentityEndpoint:            authURL,
112                 UserID:                      userID,
113                 Username:                    username,
114                 Password:                    password,
115                 TenantID:                    tenantID,
116                 TenantName:                  tenantName,
117                 DomainID:                    domainID,
118                 DomainName:                  domainName,
119                 ApplicationCredentialID:     applicationCredentialID,
120                 ApplicationCredentialName:   applicationCredentialName,
121                 ApplicationCredentialSecret: applicationCredentialSecret,
122         }
123
124         return ao, nil
125 }