@@ -11,6 +11,20 @@ import (
11
11
"gopkg.in/yaml.v2"
12
12
)
13
13
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
+
14
28
// ClientOpts represents options to customize the way a client is
15
29
// configured.
16
30
type ClientOpts struct {
@@ -22,11 +36,11 @@ type ClientOpts struct {
22
36
23
37
// AuthType specifies the type of authentication to use.
24
38
// By default, this is "password".
25
- AuthType string
39
+ AuthType AuthType
26
40
27
- // Auth defines the authentication information needed to
41
+ // AuthInfo defines the authentication information needed to
28
42
// authenticate to a cloud when clouds.yaml isn't used.
29
- Auth * Auth
43
+ AuthInfo * AuthInfo
30
44
}
31
45
32
46
// LoadYAML will load a clouds.yaml file and return the full config.
@@ -138,17 +152,17 @@ func AuthOptions(opts *ClientOpts) (*gophercloud.AuthOptions, error) {
138
152
}
139
153
}
140
154
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 {
143
157
// 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
146
160
}
147
161
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
149
163
// 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 )
152
166
}
153
167
}
154
168
@@ -179,26 +193,26 @@ func determineIdentityAPI(cloud *Cloud, opts *ClientOpts) string {
179
193
}
180
194
181
195
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" ) {
184
198
identityAPI = "2.0"
185
199
}
186
200
187
- if strings .Contains (cloud .Auth .AuthURL , "v3" ) {
201
+ if strings .Contains (cloud .AuthInfo .AuthURL , "v3" ) {
188
202
identityAPI = "3"
189
203
}
190
204
}
191
205
}
192
206
193
207
if identityAPI == "" {
194
208
switch cloud .AuthType {
195
- case "v2password" :
209
+ case AuthV2Password :
196
210
identityAPI = "2.0"
197
- case "v2token" :
211
+ case AuthV2Token :
198
212
identityAPI = "2.0"
199
- case "v3password" :
213
+ case AuthV3Password :
200
214
identityAPI = "3"
201
- case "v3token" :
215
+ case AuthV3Token :
202
216
identityAPI = "3"
203
217
}
204
218
}
@@ -221,48 +235,48 @@ func v2auth(cloud *Cloud, opts *ClientOpts) (*gophercloud.AuthOptions, error) {
221
235
}
222
236
223
237
if v := os .Getenv (envPrefix + "AUTH_URL" ); v != "" {
224
- cloud .Auth .AuthURL = v
238
+ cloud .AuthInfo .AuthURL = v
225
239
}
226
240
227
241
if v := os .Getenv (envPrefix + "TOKEN" ); v != "" {
228
- cloud .Auth .Token = v
242
+ cloud .AuthInfo .Token = v
229
243
}
230
244
231
245
if v := os .Getenv (envPrefix + "AUTH_TOKEN" ); v != "" {
232
- cloud .Auth .Token = v
246
+ cloud .AuthInfo .Token = v
233
247
}
234
248
235
249
if v := os .Getenv (envPrefix + "USERNAME" ); v != "" {
236
- cloud .Auth .Username = v
250
+ cloud .AuthInfo .Username = v
237
251
}
238
252
239
253
if v := os .Getenv (envPrefix + "PASSWORD" ); v != "" {
240
- cloud .Auth .Password = v
254
+ cloud .AuthInfo .Password = v
241
255
}
242
256
243
257
if v := os .Getenv (envPrefix + "TENANT_ID" ); v != "" {
244
- cloud .Auth .ProjectID = v
258
+ cloud .AuthInfo .ProjectID = v
245
259
}
246
260
247
261
if v := os .Getenv (envPrefix + "PROJECT_ID" ); v != "" {
248
- cloud .Auth .ProjectID = v
262
+ cloud .AuthInfo .ProjectID = v
249
263
}
250
264
251
265
if v := os .Getenv (envPrefix + "TENANT_NAME" ); v != "" {
252
- cloud .Auth .ProjectName = v
266
+ cloud .AuthInfo .ProjectName = v
253
267
}
254
268
255
269
if v := os .Getenv (envPrefix + "PROJECT_NAME" ); v != "" {
256
- cloud .Auth .ProjectName = v
270
+ cloud .AuthInfo .ProjectName = v
257
271
}
258
272
259
273
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 ,
266
280
}
267
281
268
282
return ao , nil
@@ -277,112 +291,112 @@ func v3auth(cloud *Cloud, opts *ClientOpts) (*gophercloud.AuthOptions, error) {
277
291
}
278
292
279
293
if v := os .Getenv (envPrefix + "AUTH_URL" ); v != "" {
280
- cloud .Auth .AuthURL = v
294
+ cloud .AuthInfo .AuthURL = v
281
295
}
282
296
283
297
if v := os .Getenv (envPrefix + "TOKEN" ); v != "" {
284
- cloud .Auth .Token = v
298
+ cloud .AuthInfo .Token = v
285
299
}
286
300
287
301
if v := os .Getenv (envPrefix + "AUTH_TOKEN" ); v != "" {
288
- cloud .Auth .Token = v
302
+ cloud .AuthInfo .Token = v
289
303
}
290
304
291
305
if v := os .Getenv (envPrefix + "USERNAME" ); v != "" {
292
- cloud .Auth .Username = v
306
+ cloud .AuthInfo .Username = v
293
307
}
294
308
295
309
if v := os .Getenv (envPrefix + "USER_ID" ); v != "" {
296
- cloud .Auth .UserID = v
310
+ cloud .AuthInfo .UserID = v
297
311
}
298
312
299
313
if v := os .Getenv (envPrefix + "PASSWORD" ); v != "" {
300
- cloud .Auth .Password = v
314
+ cloud .AuthInfo .Password = v
301
315
}
302
316
303
317
if v := os .Getenv (envPrefix + "TENANT_ID" ); v != "" {
304
- cloud .Auth .ProjectID = v
318
+ cloud .AuthInfo .ProjectID = v
305
319
}
306
320
307
321
if v := os .Getenv (envPrefix + "PROJECT_ID" ); v != "" {
308
- cloud .Auth .ProjectID = v
322
+ cloud .AuthInfo .ProjectID = v
309
323
}
310
324
311
325
if v := os .Getenv (envPrefix + "TENANT_NAME" ); v != "" {
312
- cloud .Auth .ProjectName = v
326
+ cloud .AuthInfo .ProjectName = v
313
327
}
314
328
315
329
if v := os .Getenv (envPrefix + "PROJECT_NAME" ); v != "" {
316
- cloud .Auth .ProjectName = v
330
+ cloud .AuthInfo .ProjectName = v
317
331
}
318
332
319
333
if v := os .Getenv (envPrefix + "DOMAIN_ID" ); v != "" {
320
- cloud .Auth .DomainID = v
334
+ cloud .AuthInfo .DomainID = v
321
335
}
322
336
323
337
if v := os .Getenv (envPrefix + "DOMAIN_NAME" ); v != "" {
324
- cloud .Auth .DomainName = v
338
+ cloud .AuthInfo .DomainName = v
325
339
}
326
340
327
341
if v := os .Getenv (envPrefix + "PROJECT_DOMAIN_ID" ); v != "" {
328
- cloud .Auth .ProjectDomainID = v
342
+ cloud .AuthInfo .ProjectDomainID = v
329
343
}
330
344
331
345
if v := os .Getenv (envPrefix + "PROJECT_DOMAIN_NAME" ); v != "" {
332
- cloud .Auth .ProjectDomainName = v
346
+ cloud .AuthInfo .ProjectDomainName = v
333
347
}
334
348
335
349
if v := os .Getenv (envPrefix + "USER_DOMAIN_ID" ); v != "" {
336
- cloud .Auth .UserDomainID = v
350
+ cloud .AuthInfo .UserDomainID = v
337
351
}
338
352
339
353
if v := os .Getenv (envPrefix + "USER_DOMAIN_NAME" ); v != "" {
340
- cloud .Auth .UserDomainName = v
354
+ cloud .AuthInfo .UserDomainName = v
341
355
}
342
356
343
357
// Build a scope and try to do it correctly.
344
358
// https://github.com/openstack/os-client-config/blob/master/os_client_config/config.py#L595
345
359
scope := new (gophercloud.AuthScope )
346
360
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
352
366
}
353
367
} else {
354
368
// If Domain* is set, but UserDomain* or ProjectDomain* aren't,
355
369
// then use Domain* as the default setting.
356
370
cloud = setDomainIfNeeded (cloud )
357
371
358
- if cloud .Auth .ProjectID != "" {
359
- scope .ProjectID = cloud .Auth .ProjectID
372
+ if cloud .AuthInfo .ProjectID != "" {
373
+ scope .ProjectID = cloud .AuthInfo .ProjectID
360
374
} 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
364
378
}
365
379
}
366
380
367
381
ao := & gophercloud.AuthOptions {
368
382
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 ,
378
392
}
379
393
380
394
// If an auth_type of "token" was specified, then make sure
381
395
// Gophercloud properly authenticates with a token. This involves
382
396
// unsetting a few other auth options. The reason this is done
383
397
// here is to wait until all auth settings (both in clouds.yaml
384
398
// 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 != "" {
386
400
ao .Username = ""
387
401
ao .Password = ""
388
402
ao .UserID = ""
@@ -392,7 +406,7 @@ func v3auth(cloud *Cloud, opts *ClientOpts) (*gophercloud.AuthOptions, error) {
392
406
393
407
// Check for absolute minimum requirements.
394
408
if ao .IdentityEndpoint == "" {
395
- err := gophercloud.ErrMissingInput {Argument : "authURL " }
409
+ err := gophercloud.ErrMissingInput {Argument : "auth_url " }
396
410
return nil , err
397
411
}
398
412
@@ -423,7 +437,7 @@ func NewServiceClient(service string, opts *ClientOpts) (*gophercloud.ServiceCli
423
437
}
424
438
425
439
if cloud == nil {
426
- cloud .Auth = opts .Auth
440
+ cloud .AuthInfo = opts .AuthInfo
427
441
}
428
442
429
443
// Environment variable overrides.
0 commit comments