Skip to content

Commit b842494

Browse files
committed
Rename Auth to AuthInfo, create a custom type for AuthType
1 parent b835a70 commit b842494

File tree

4 files changed

+121
-107
lines changed

4 files changed

+121
-107
lines changed

openstack/clientconfig/requests.go

Lines changed: 84 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,20 @@ import (
1111
"gopkg.in/yaml.v2"
1212
)
1313

14+
// AuthType respresents a valid method of authentication.
15+
type AuthType string
16+
17+
const (
18+
AuthPassword AuthType = "password"
19+
AuthToken AuthType = "token"
20+
21+
AuthV2Password AuthType = "v2password"
22+
AuthV2Token AuthType = "v2token"
23+
24+
AuthV3Password AuthType = "v3password"
25+
AuthV3Token AuthType = "v3token"
26+
)
27+
1428
// ClientOpts represents options to customize the way a client is
1529
// configured.
1630
type ClientOpts struct {
@@ -22,11 +36,11 @@ type ClientOpts struct {
2236

2337
// AuthType specifies the type of authentication to use.
2438
// By default, this is "password".
25-
AuthType string
39+
AuthType AuthType
2640

27-
// Auth defines the authentication information needed to
41+
// AuthInfo defines the authentication information needed to
2842
// authenticate to a cloud when clouds.yaml isn't used.
29-
Auth *Auth
43+
AuthInfo *AuthInfo
3044
}
3145

3246
// LoadYAML will load a clouds.yaml file and return the full config.
@@ -138,17 +152,17 @@ func AuthOptions(opts *ClientOpts) (*gophercloud.AuthOptions, error) {
138152
}
139153
}
140154

141-
// If cloud.Auth is nil, then no cloud was specified.
142-
if cloud.Auth == nil {
155+
// If cloud.AuthInfo is nil, then no cloud was specified.
156+
if cloud.AuthInfo == nil {
143157
// If opts.Auth is not nil, then try using the auth settings from it.
144-
if opts.Auth != nil {
145-
cloud.Auth = opts.Auth
158+
if opts.AuthInfo != nil {
159+
cloud.AuthInfo = opts.AuthInfo
146160
}
147161

148-
// If cloud.Auth is still nil, then set it to an empty Auth struct
162+
// If cloud.AuthInfo is still nil, then set it to an empty Auth struct
149163
// and rely on environment variables to do the authentication.
150-
if cloud.Auth == nil {
151-
cloud.Auth = new(Auth)
164+
if cloud.AuthInfo == nil {
165+
cloud.AuthInfo = new(AuthInfo)
152166
}
153167
}
154168

@@ -179,26 +193,26 @@ func determineIdentityAPI(cloud *Cloud, opts *ClientOpts) string {
179193
}
180194

181195
if identityAPI == "" {
182-
if cloud.Auth != nil {
183-
if strings.Contains(cloud.Auth.AuthURL, "v2.0") {
196+
if cloud.AuthInfo != nil {
197+
if strings.Contains(cloud.AuthInfo.AuthURL, "v2.0") {
184198
identityAPI = "2.0"
185199
}
186200

187-
if strings.Contains(cloud.Auth.AuthURL, "v3") {
201+
if strings.Contains(cloud.AuthInfo.AuthURL, "v3") {
188202
identityAPI = "3"
189203
}
190204
}
191205
}
192206

193207
if identityAPI == "" {
194208
switch cloud.AuthType {
195-
case "v2password":
209+
case AuthV2Password:
196210
identityAPI = "2.0"
197-
case "v2token":
211+
case AuthV2Token:
198212
identityAPI = "2.0"
199-
case "v3password":
213+
case AuthV3Password:
200214
identityAPI = "3"
201-
case "v3token":
215+
case AuthV3Token:
202216
identityAPI = "3"
203217
}
204218
}
@@ -221,48 +235,48 @@ func v2auth(cloud *Cloud, opts *ClientOpts) (*gophercloud.AuthOptions, error) {
221235
}
222236

223237
if v := os.Getenv(envPrefix + "AUTH_URL"); v != "" {
224-
cloud.Auth.AuthURL = v
238+
cloud.AuthInfo.AuthURL = v
225239
}
226240

227241
if v := os.Getenv(envPrefix + "TOKEN"); v != "" {
228-
cloud.Auth.Token = v
242+
cloud.AuthInfo.Token = v
229243
}
230244

231245
if v := os.Getenv(envPrefix + "AUTH_TOKEN"); v != "" {
232-
cloud.Auth.Token = v
246+
cloud.AuthInfo.Token = v
233247
}
234248

235249
if v := os.Getenv(envPrefix + "USERNAME"); v != "" {
236-
cloud.Auth.Username = v
250+
cloud.AuthInfo.Username = v
237251
}
238252

239253
if v := os.Getenv(envPrefix + "PASSWORD"); v != "" {
240-
cloud.Auth.Password = v
254+
cloud.AuthInfo.Password = v
241255
}
242256

243257
if v := os.Getenv(envPrefix + "TENANT_ID"); v != "" {
244-
cloud.Auth.ProjectID = v
258+
cloud.AuthInfo.ProjectID = v
245259
}
246260

247261
if v := os.Getenv(envPrefix + "PROJECT_ID"); v != "" {
248-
cloud.Auth.ProjectID = v
262+
cloud.AuthInfo.ProjectID = v
249263
}
250264

251265
if v := os.Getenv(envPrefix + "TENANT_NAME"); v != "" {
252-
cloud.Auth.ProjectName = v
266+
cloud.AuthInfo.ProjectName = v
253267
}
254268

255269
if v := os.Getenv(envPrefix + "PROJECT_NAME"); v != "" {
256-
cloud.Auth.ProjectName = v
270+
cloud.AuthInfo.ProjectName = v
257271
}
258272

259273
ao := &gophercloud.AuthOptions{
260-
IdentityEndpoint: cloud.Auth.AuthURL,
261-
TokenID: cloud.Auth.Token,
262-
Username: cloud.Auth.Username,
263-
Password: cloud.Auth.Password,
264-
TenantID: cloud.Auth.ProjectID,
265-
TenantName: cloud.Auth.ProjectName,
274+
IdentityEndpoint: cloud.AuthInfo.AuthURL,
275+
TokenID: cloud.AuthInfo.Token,
276+
Username: cloud.AuthInfo.Username,
277+
Password: cloud.AuthInfo.Password,
278+
TenantID: cloud.AuthInfo.ProjectID,
279+
TenantName: cloud.AuthInfo.ProjectName,
266280
}
267281

268282
return ao, nil
@@ -277,112 +291,112 @@ func v3auth(cloud *Cloud, opts *ClientOpts) (*gophercloud.AuthOptions, error) {
277291
}
278292

279293
if v := os.Getenv(envPrefix + "AUTH_URL"); v != "" {
280-
cloud.Auth.AuthURL = v
294+
cloud.AuthInfo.AuthURL = v
281295
}
282296

283297
if v := os.Getenv(envPrefix + "TOKEN"); v != "" {
284-
cloud.Auth.Token = v
298+
cloud.AuthInfo.Token = v
285299
}
286300

287301
if v := os.Getenv(envPrefix + "AUTH_TOKEN"); v != "" {
288-
cloud.Auth.Token = v
302+
cloud.AuthInfo.Token = v
289303
}
290304

291305
if v := os.Getenv(envPrefix + "USERNAME"); v != "" {
292-
cloud.Auth.Username = v
306+
cloud.AuthInfo.Username = v
293307
}
294308

295309
if v := os.Getenv(envPrefix + "USER_ID"); v != "" {
296-
cloud.Auth.UserID = v
310+
cloud.AuthInfo.UserID = v
297311
}
298312

299313
if v := os.Getenv(envPrefix + "PASSWORD"); v != "" {
300-
cloud.Auth.Password = v
314+
cloud.AuthInfo.Password = v
301315
}
302316

303317
if v := os.Getenv(envPrefix + "TENANT_ID"); v != "" {
304-
cloud.Auth.ProjectID = v
318+
cloud.AuthInfo.ProjectID = v
305319
}
306320

307321
if v := os.Getenv(envPrefix + "PROJECT_ID"); v != "" {
308-
cloud.Auth.ProjectID = v
322+
cloud.AuthInfo.ProjectID = v
309323
}
310324

311325
if v := os.Getenv(envPrefix + "TENANT_NAME"); v != "" {
312-
cloud.Auth.ProjectName = v
326+
cloud.AuthInfo.ProjectName = v
313327
}
314328

315329
if v := os.Getenv(envPrefix + "PROJECT_NAME"); v != "" {
316-
cloud.Auth.ProjectName = v
330+
cloud.AuthInfo.ProjectName = v
317331
}
318332

319333
if v := os.Getenv(envPrefix + "DOMAIN_ID"); v != "" {
320-
cloud.Auth.DomainID = v
334+
cloud.AuthInfo.DomainID = v
321335
}
322336

323337
if v := os.Getenv(envPrefix + "DOMAIN_NAME"); v != "" {
324-
cloud.Auth.DomainName = v
338+
cloud.AuthInfo.DomainName = v
325339
}
326340

327341
if v := os.Getenv(envPrefix + "PROJECT_DOMAIN_ID"); v != "" {
328-
cloud.Auth.ProjectDomainID = v
342+
cloud.AuthInfo.ProjectDomainID = v
329343
}
330344

331345
if v := os.Getenv(envPrefix + "PROJECT_DOMAIN_NAME"); v != "" {
332-
cloud.Auth.ProjectDomainName = v
346+
cloud.AuthInfo.ProjectDomainName = v
333347
}
334348

335349
if v := os.Getenv(envPrefix + "USER_DOMAIN_ID"); v != "" {
336-
cloud.Auth.UserDomainID = v
350+
cloud.AuthInfo.UserDomainID = v
337351
}
338352

339353
if v := os.Getenv(envPrefix + "USER_DOMAIN_NAME"); v != "" {
340-
cloud.Auth.UserDomainName = v
354+
cloud.AuthInfo.UserDomainName = v
341355
}
342356

343357
// Build a scope and try to do it correctly.
344358
// https://github.com/openstack/os-client-config/blob/master/os_client_config/config.py#L595
345359
scope := new(gophercloud.AuthScope)
346360

347-
if !isProjectScoped(cloud.Auth) {
348-
if cloud.Auth.DomainID != "" {
349-
scope.DomainID = cloud.Auth.DomainID
350-
} else if cloud.Auth.DomainName != "" {
351-
scope.DomainName = cloud.Auth.DomainName
361+
if !isProjectScoped(cloud.AuthInfo) {
362+
if cloud.AuthInfo.DomainID != "" {
363+
scope.DomainID = cloud.AuthInfo.DomainID
364+
} else if cloud.AuthInfo.DomainName != "" {
365+
scope.DomainName = cloud.AuthInfo.DomainName
352366
}
353367
} else {
354368
// If Domain* is set, but UserDomain* or ProjectDomain* aren't,
355369
// then use Domain* as the default setting.
356370
cloud = setDomainIfNeeded(cloud)
357371

358-
if cloud.Auth.ProjectID != "" {
359-
scope.ProjectID = cloud.Auth.ProjectID
372+
if cloud.AuthInfo.ProjectID != "" {
373+
scope.ProjectID = cloud.AuthInfo.ProjectID
360374
} else {
361-
scope.ProjectName = cloud.Auth.ProjectName
362-
scope.DomainID = cloud.Auth.ProjectDomainID
363-
scope.DomainName = cloud.Auth.ProjectDomainName
375+
scope.ProjectName = cloud.AuthInfo.ProjectName
376+
scope.DomainID = cloud.AuthInfo.ProjectDomainID
377+
scope.DomainName = cloud.AuthInfo.ProjectDomainName
364378
}
365379
}
366380

367381
ao := &gophercloud.AuthOptions{
368382
Scope: scope,
369-
IdentityEndpoint: cloud.Auth.AuthURL,
370-
TokenID: cloud.Auth.Token,
371-
Username: cloud.Auth.Username,
372-
UserID: cloud.Auth.UserID,
373-
Password: cloud.Auth.Password,
374-
TenantID: cloud.Auth.ProjectID,
375-
TenantName: cloud.Auth.ProjectName,
376-
DomainID: cloud.Auth.UserDomainID,
377-
DomainName: cloud.Auth.UserDomainName,
383+
IdentityEndpoint: cloud.AuthInfo.AuthURL,
384+
TokenID: cloud.AuthInfo.Token,
385+
Username: cloud.AuthInfo.Username,
386+
UserID: cloud.AuthInfo.UserID,
387+
Password: cloud.AuthInfo.Password,
388+
TenantID: cloud.AuthInfo.ProjectID,
389+
TenantName: cloud.AuthInfo.ProjectName,
390+
DomainID: cloud.AuthInfo.UserDomainID,
391+
DomainName: cloud.AuthInfo.UserDomainName,
378392
}
379393

380394
// If an auth_type of "token" was specified, then make sure
381395
// Gophercloud properly authenticates with a token. This involves
382396
// unsetting a few other auth options. The reason this is done
383397
// here is to wait until all auth settings (both in clouds.yaml
384398
// and via environment variables) are set and then unset them.
385-
if strings.Contains(cloud.AuthType, "token") || ao.TokenID != "" {
399+
if strings.Contains(string(cloud.AuthType), "token") || ao.TokenID != "" {
386400
ao.Username = ""
387401
ao.Password = ""
388402
ao.UserID = ""
@@ -392,7 +406,7 @@ func v3auth(cloud *Cloud, opts *ClientOpts) (*gophercloud.AuthOptions, error) {
392406

393407
// Check for absolute minimum requirements.
394408
if ao.IdentityEndpoint == "" {
395-
err := gophercloud.ErrMissingInput{Argument: "authURL"}
409+
err := gophercloud.ErrMissingInput{Argument: "auth_url"}
396410
return nil, err
397411
}
398412

@@ -423,7 +437,7 @@ func NewServiceClient(service string, opts *ClientOpts) (*gophercloud.ServiceCli
423437
}
424438

425439
if cloud == nil {
426-
cloud.Auth = opts.Auth
440+
cloud.AuthInfo = opts.AuthInfo
427441
}
428442

429443
// Environment variable overrides.

openstack/clientconfig/results.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ type Clouds struct {
99

1010
// Cloud represents an entry in a clouds.yaml file.
1111
type Cloud struct {
12-
Auth *Auth `yaml:"auth"`
13-
AuthType string `yaml:"auth_type"`
12+
AuthInfo *AuthInfo `yaml:"auth"`
13+
AuthType AuthType `yaml:"auth_type"`
1414
RegionName string `yaml:"region_name"`
1515
Regions []interface{} `yaml:"regions"`
1616

@@ -21,7 +21,7 @@ type Cloud struct {
2121

2222
// Auth represents the auth section of a cloud entry or
2323
// auth options entered explicitly in ClientOpts.
24-
type Auth struct {
24+
type AuthInfo struct {
2525
// AuthURL is the keystone/identity endpoint URL.
2626
AuthURL string `yaml:"auth_url"`
2727

0 commit comments

Comments
 (0)