fog 1.33.0 → 1.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +47 -0
  3. data/Rakefile +3 -0
  4. data/fog.gemspec +4 -4
  5. data/lib/fog/openstack/baremetal.rb +20 -82
  6. data/lib/fog/openstack/compute.rb +11 -34
  7. data/lib/fog/openstack/core.rb +37 -10
  8. data/lib/fog/openstack/identity.rb +33 -44
  9. data/lib/fog/openstack/identity_v2.rb +14 -84
  10. data/lib/fog/openstack/identity_v3.rb +4 -51
  11. data/lib/fog/openstack/image.rb +22 -83
  12. data/lib/fog/openstack/metering.rb +15 -76
  13. data/lib/fog/openstack/models/compute/server.rb +1 -1
  14. data/lib/fog/openstack/models/orchestration/events.rb +1 -0
  15. data/lib/fog/openstack/models/orchestration/resources.rb +1 -0
  16. data/lib/fog/openstack/models/orchestration/stack.rb +1 -1
  17. data/lib/fog/openstack/models/orchestration/stacks.rb +1 -0
  18. data/lib/fog/openstack/models/orchestration/templates.rb +1 -0
  19. data/lib/fog/openstack/network.rb +21 -21
  20. data/lib/fog/openstack/orchestration.rb +11 -91
  21. data/lib/fog/openstack/planning.rb +19 -81
  22. data/lib/fog/openstack/requests/compute/list_security_groups.rb +9 -1
  23. data/lib/fog/openstack/requests/network/add_router_interface.rb +12 -4
  24. data/lib/fog/openstack/requests/network/create_port.rb +14 -12
  25. data/lib/fog/openstack/requests/network/get_port.rb +4 -0
  26. data/lib/fog/openstack/requests/network/set_tenant.rb +1 -0
  27. data/lib/fog/openstack/storage.rb +18 -57
  28. data/lib/fog/openstack/volume.rb +17 -79
  29. data/lib/fog/rackspace/requests/storage/get_object_https_url.rb +13 -2
  30. data/lib/fog/vcloud_director/generators/compute/edge_gateway_service_configuration.rb +7 -6
  31. data/lib/fog/vcloud_director/models/compute/vm_customizations.rb +15 -0
  32. data/lib/fog/version.rb +1 -1
  33. data/lib/tasks/changelog_task.rb +1 -0
  34. data/spec/fog/openstack/volume_spec.rb +5 -0
  35. data/tests/compute/helper.rb +0 -6
  36. data/tests/openstack/requests/network/port_tests.rb +14 -12
  37. data/tests/rackspace/requests/storage/object_tests.rb +46 -4
  38. data/tests/vcloud_director/requests/compute/edge_gateway_tests.rb +2 -2
  39. metadata +11 -74
  40. data/lib/fog/bin/dynect.rb +0 -28
  41. data/tests/brightbox/compute/helper.rb +0 -1
  42. data/tests/brightbox/compute/schema.rb +0 -799
  43. data/tests/brightbox/compute_tests.rb +0 -101
  44. data/tests/brightbox/helper.rb +0 -1
  45. data/tests/brightbox/models/compute/account_tests.rb +0 -17
  46. data/tests/brightbox/models/compute/cloud_ip_tests.rb +0 -32
  47. data/tests/brightbox/models/compute/database_server_tests.rb +0 -78
  48. data/tests/brightbox/models/compute/database_snapshot_tests.rb +0 -26
  49. data/tests/brightbox/models/compute/database_type_tests.rb +0 -27
  50. data/tests/brightbox/models/compute/server_tests.rb +0 -19
  51. data/tests/brightbox/oauth2_tests.rb +0 -110
  52. data/tests/brightbox/requests/compute/account_tests.rb +0 -65
  53. data/tests/brightbox/requests/compute/api_client_tests.rb +0 -64
  54. data/tests/brightbox/requests/compute/application_test.rb +0 -63
  55. data/tests/brightbox/requests/compute/cloud_ip_tests.rb +0 -85
  56. data/tests/brightbox/requests/compute/collaboration_tests.rb +0 -39
  57. data/tests/brightbox/requests/compute/database_server_tests.rb +0 -54
  58. data/tests/brightbox/requests/compute/database_snapsnot_tests.rb +0 -47
  59. data/tests/brightbox/requests/compute/database_type_tests.rb +0 -17
  60. data/tests/brightbox/requests/compute/firewall_policy_tests.rb +0 -40
  61. data/tests/brightbox/requests/compute/firewall_rule_tests.rb +0 -43
  62. data/tests/brightbox/requests/compute/helper.rb +0 -41
  63. data/tests/brightbox/requests/compute/image_tests.rb +0 -60
  64. data/tests/brightbox/requests/compute/interface_tests.rb +0 -33
  65. data/tests/brightbox/requests/compute/load_balancer_tests.rb +0 -121
  66. data/tests/brightbox/requests/compute/server_group_tests.rb +0 -96
  67. data/tests/brightbox/requests/compute/server_tests.rb +0 -99
  68. data/tests/brightbox/requests/compute/server_type_tests.rb +0 -34
  69. data/tests/brightbox/requests/compute/user_collaboration_tests.rb +0 -67
  70. data/tests/brightbox/requests/compute/user_tests.rb +0 -38
  71. data/tests/brightbox/requests/compute/zone_tests.rb +0 -34
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 54e5d06378a8bcb46784753de3c7fa8f8252e196
4
- data.tar.gz: f3b2c0a9ae87d177341e3eff3b291a8e832eae02
3
+ metadata.gz: c821b9ebefd673f9820e7ae4f41afa5add225538
4
+ data.tar.gz: 1432597d1fa4695ea327825276f2720a2d460036
5
5
  SHA512:
6
- metadata.gz: 155cc3a6c109f0b7097c0a0a9576c77377b188c37b62137f0b17110659926695db1d8120765c55f75188a1dfef012ac62bc8bdaf5cf059451cb14551afbbe771
7
- data.tar.gz: 9354b948a15c1b36c53b18b34f6abb74a01aad171494885dbd8f8f961432803f66b5a879ccb2de87d035365b435436fd29db5961a86153079cd7a654d765113b
6
+ metadata.gz: 2afc927bafda27b29fffb39f59ffeb25f6e0a04cd5bbbba091c10b8fb44d997611b86a9e188103343a3821f5660daccc497220710646a39fc01b6ca38f669b15
7
+ data.tar.gz: 667d372ed314968334671ae4569c934236610958dc2e54717dd02d14c212eb8c3e5553500e795d77493723c66a4385fdace66bb06a4abf4602a0baa542bab683
@@ -1,3 +1,50 @@
1
+ ## 1.34.0 09/03/2015
2
+ *Hash* 23467f391cbc9d8d3262da33cec533f8b8e80cee
3
+
4
+ Statistic | Value
5
+ ------------- | --------:
6
+ Collaborators | 2
7
+ Downloads | 11446261
8
+ Forks | 1472
9
+ Open Issues | 82
10
+ Watchers | 3594
11
+
12
+ **MVP!** Oleg Vivtash
13
+
14
+ #### [Brightbox]
15
+ * Remove provider specific tests. thanks Paul Thornthwaite
16
+
17
+ #### [OpenStack]
18
+ * Enable list_snapshots_detailed request. thanks Greg Blomquist
19
+
20
+ #### [misc]
21
+ * Adding #get_by_id for Fog::Compute::VcloudDirector::VmCustomizations. thanks Adam Leff
22
+ * Fix attach router to also use port id if passed. thanks Andrew Battye
23
+ * When getting a v3 identity service from the catalog, make sure the path includes /v3. thanks Darren Hague
24
+ * Fix issue #3662 - copy openstack_identity_endpoint option to @openstack_identity_public_endpoint. thanks Darren Hague
25
+ * Extract dynect bin from fog to fog-dynect. thanks Glenn Pratt
26
+ * Fix deprecated call to security_groups. thanks Greg Blomquist
27
+ * Fix deprecated call to resources. thanks Greg Blomquist
28
+ * Cloud Director supports multiple peer subnets. thanks Josh Myers
29
+ * Openstack missing passing of unscoped_token. thanks Ladislav Smola
30
+ * Allow Rackspace-specific options for get_object_https_url. thanks Oleg Vivtash
31
+ * Code prettified. thanks Oleg Vivtash
32
+ * Ruby187 hash syntax. thanks Oleg Vivtash
33
+ * Fog::Storage[:rackspace] object requests test update. thanks Oleg Vivtash
34
+ * Fog::Storage[:rackspace] object requests test cleanup. thanks Oleg Vivtash
35
+ * relax dependency for fog-ecloud. thanks Praveen Arimbrathodiyil
36
+ * support allowed address pairs. thanks pyama86
37
+ * style. thanks pyama86
38
+ * api path set. thanks pyama86
39
+
40
+ #### [openstack]
41
+ * allow auth_token attribute to be written to. thanks Darren Hague
42
+ * align recognized parameters, move common things among services into openstack core. thanks Maurice Schreiber
43
+ * undo premature move of identity_service_type: default value does no good. thanks Maurice Schreiber
44
+ * orchestration: add missing collection requires, path variable already contains tenant_id. thanks Maurice Schreiber
45
+ * core: fix wrong merge in 3b129ab9b2eac1cddc3fa680c88f436a6a853474. thanks Maurice Schreiber
46
+
47
+
1
48
  ## 1.33.0 08/12/2015
2
49
  *Hash* 514fb792da07e6c5beaf4b735ea944fa873483f0
3
50
 
data/Rakefile CHANGED
@@ -81,6 +81,9 @@ namespace :test do
81
81
  task :openstack do
82
82
  sh("export FOG_MOCK=#{mock} && bundle exec shindont tests/openstack")
83
83
  end
84
+ task :rackspace do
85
+ sh("export FOG_MOCK=#{mock} && bundle exec shindont tests/rackspace")
86
+ end
84
87
  task :cloudstack do
85
88
  sh("export FOG_MOCK=#{mock} && bundle exec shindont tests/cloudstack")
86
89
  end
@@ -11,8 +11,8 @@ Gem::Specification.new do |s|
11
11
  ## If your rubyforge_project name is different, then edit it and comment out
12
12
  ## the sub! line in the Rakefile
13
13
  s.name = "fog"
14
- s.version = "1.33.0"
15
- s.date = "2015-08-12"
14
+ s.version = "1.34.0"
15
+ s.date = "2015-09-03"
16
16
  s.rubyforge_project = "fog"
17
17
 
18
18
  ## Make sure your summary is short. The description may be as long
@@ -55,8 +55,8 @@ Gem::Specification.new do |s|
55
55
  s.add_dependency("fog-atmos")
56
56
  s.add_dependency("fog-aws", ">= 0.6.0")
57
57
  s.add_dependency("fog-brightbox", "~> 0.4")
58
- s.add_dependency("fog-dynect")
59
- s.add_dependency("fog-ecloud", "= 0.1.1")
58
+ s.add_dependency("fog-dynect", "~> 0.0.2")
59
+ s.add_dependency("fog-ecloud", "~> 0.1")
60
60
  s.add_dependency("fog-google", ">= 0.0.2")
61
61
  s.add_dependency("fog-local")
62
62
  s.add_dependency("fog-powerdns", ">= 0.1.1")
@@ -6,10 +6,15 @@ module Fog
6
6
  SUPPORTED_VERSIONS = /(.)*/
7
7
 
8
8
  requires :openstack_auth_url
9
- recognizes :openstack_auth_token, :openstack_management_url, :persistent,
10
- :openstack_service_type, :openstack_service_name, :openstack_tenant,
11
- :openstack_api_key, :openstack_username,
12
- :current_user, :current_tenant, :openstack_endpoint_type, :openstack_region
9
+ recognizes :openstack_auth_token, :openstack_management_url,
10
+ :persistent, :openstack_service_type, :openstack_service_name,
11
+ :openstack_tenant, :openstack_tenant_id,
12
+ :openstack_api_key, :openstack_username, :openstack_identity_endpoint,
13
+ :current_user, :current_tenant, :openstack_region,
14
+ :openstack_endpoint_type,
15
+ :openstack_project_name, :openstack_project_id,
16
+ :openstack_project_domain, :openstack_user_domain, :openstack_domain_name,
17
+ :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id
13
18
 
14
19
  ## MODELS
15
20
  #
@@ -241,55 +246,29 @@ module Fog
241
246
  end
242
247
 
243
248
  class Real
244
- attr_reader :current_user
245
- attr_reader :current_tenant
249
+ include Fog::OpenStack::Core
246
250
 
247
251
  def initialize(options={})
248
- @openstack_auth_token = options[:openstack_auth_token]
252
+ initialize_identity options
249
253
 
250
- unless @openstack_auth_token
251
- missing_credentials = Array.new
252
- @openstack_api_key = options[:openstack_api_key]
253
- @openstack_username = options[:openstack_username]
254
-
255
- missing_credentials << :openstack_api_key unless @openstack_api_key
256
- missing_credentials << :openstack_username unless @openstack_username
257
- raise ArgumentError, "Missing required arguments: #{missing_credentials.join(', ')}" unless missing_credentials.empty?
258
- end
259
-
260
- @openstack_tenant = options[:openstack_tenant]
261
- @openstack_auth_uri = URI.parse(options[:openstack_auth_url])
262
- @openstack_management_url = options[:openstack_management_url]
263
- @openstack_must_reauthenticate = false
264
- @openstack_service_type = options[:openstack_service_type] || ['baremetal']
265
- @openstack_service_name = options[:openstack_service_name]
266
- @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL'
267
- @openstack_region = options[:openstack_region]
254
+ @openstack_service_type = options[:openstack_service_type] || ['baremetal']
255
+ @openstack_service_name = options[:openstack_service_name]
268
256
 
269
257
  @connection_options = options[:connection_options] || {}
270
258
 
271
- @current_user = options[:current_user]
272
- @current_tenant = options[:current_tenant]
273
-
274
259
  authenticate
275
260
 
261
+ unless @path.match(SUPPORTED_VERSIONS)
262
+ @path = "/" + Fog::OpenStack.get_supported_version(SUPPORTED_VERSIONS,
263
+ @openstack_management_uri,
264
+ @auth_token,
265
+ @connection_options)
266
+ end
267
+
276
268
  @persistent = options[:persistent] || false
277
269
  @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
278
270
  end
279
271
 
280
- def credentials
281
- { :provider => 'openstack',
282
- :openstack_auth_url => @openstack_auth_uri.to_s,
283
- :openstack_auth_token => @auth_token,
284
- :openstack_management_url => @openstack_management_url,
285
- :current_user => @current_user,
286
- :current_tenant => @current_tenant }
287
- end
288
-
289
- def reload
290
- @connection.reset
291
- end
292
-
293
272
  def request(params)
294
273
  begin
295
274
  response = @connection.request(params.merge({
@@ -323,47 +302,6 @@ module Fog
323
302
 
324
303
  private
325
304
 
326
- def authenticate
327
- if !@openstack_management_url || @openstack_must_reauthenticate
328
- options = {
329
- :openstack_tenant => @openstack_tenant,
330
- :openstack_api_key => @openstack_api_key,
331
- :openstack_username => @openstack_username,
332
- :openstack_auth_uri => @openstack_auth_uri,
333
- :openstack_region => @openstack_region,
334
- :openstack_auth_token => @openstack_must_reauthenticate ? nil : @openstack_auth_token,
335
- :openstack_service_type => @openstack_service_type,
336
- :openstack_service_name => @openstack_service_name,
337
- :openstack_endpoint_type => @openstack_endpoint_type
338
- }
339
-
340
- credentials = Fog::OpenStack.authenticate(options, @connection_options)
341
-
342
- @current_user = credentials[:user]
343
- @current_tenant = credentials[:tenant]
344
-
345
- @openstack_must_reauthenticate = false
346
- @auth_token = credentials[:token]
347
- @openstack_management_url = credentials[:server_management_url]
348
- uri = URI.parse(@openstack_management_url)
349
- else
350
- @auth_token = @openstack_auth_token
351
- uri = URI.parse(@openstack_management_url)
352
- end
353
-
354
- @host = uri.host
355
- @path = uri.path
356
- @path.sub!(/\/$/, '')
357
- unless @path.match(SUPPORTED_VERSIONS)
358
- @path = "/" + Fog::OpenStack.get_supported_version(SUPPORTED_VERSIONS,
359
- uri,
360
- @auth_token,
361
- @connection_options)
362
- end
363
- @port = uri.port
364
- @scheme = uri.scheme
365
- true
366
- end
367
305
  end
368
306
  end
369
307
  end
@@ -327,28 +327,27 @@ module Fog
327
327
  end
328
328
 
329
329
  class Real
330
-
331
330
  include Fog::OpenStack::Core
332
331
 
333
332
  def initialize(options={})
334
333
  initialize_identity options
335
334
 
336
335
  @openstack_identity_service_type = options[:openstack_identity_service_type] || 'identity'
337
- @openstack_service_type = options[:openstack_service_type] || ['nova', 'compute']
338
- @openstack_service_name = options[:openstack_service_name]
339
-
340
- @connection_options = options[:connection_options] || {}
341
336
 
342
- authenticate_compute
337
+ @openstack_service_type = options[:openstack_service_type] || ['nova', 'compute']
338
+ @openstack_service_name = options[:openstack_service_name]
343
339
 
344
- @persistent = options[:persistent] || false
345
- @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
346
- end
340
+ @connection_options = options[:connection_options] || {}
347
341
 
342
+ authenticate
348
343
 
344
+ unless @path.match(/1\.1|v2/)
345
+ raise Fog::OpenStack::Errors::ServiceUnavailable.new(
346
+ "OpenStack compute binding only supports version 2 (a.k.a. 1.1)")
347
+ end
349
348
 
350
- def reload
351
- @connection.reset
349
+ @persistent = options[:persistent] || false
350
+ @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
352
351
  end
353
352
 
354
353
  def request(params)
@@ -365,7 +364,7 @@ module Fog
365
364
  rescue Excon::Errors::Unauthorized => error
366
365
  if error.response.body != 'Bad username or password' # token expiration
367
366
  @openstack_must_reauthenticate = true
368
- authenticate_compute
367
+ authenticate
369
368
  retry
370
369
  else # Bad Credentials
371
370
  raise error
@@ -388,28 +387,6 @@ module Fog
388
387
 
389
388
  private
390
389
 
391
- def authenticate_compute
392
- authenticate
393
-
394
- uri = URI.parse(@openstack_management_url)
395
- @host = uri.host
396
- @path = uri.path
397
-
398
- @path.sub!(/\/$/, '')
399
- unless @path.match(/1\.1|v2/)
400
- raise Fog::OpenStack::Errors::ServiceUnavailable.new(
401
- "OpenStack compute binding only supports version 2 (a.k.a. 1.1)")
402
- end
403
-
404
- # Not all implementations have identity service in the catalog
405
- if @openstack_identity_public_endpoint || @openstack_management_url
406
- @identity_connection = Fog::Core::Connection.new(
407
- @openstack_identity_public_endpoint || @openstack_management_url,
408
- false, @connection_options)
409
- end
410
-
411
- true
412
- end
413
390
  end
414
391
  end
415
392
  end
@@ -56,7 +56,7 @@ module Fog
56
56
  service(:planning, 'Planning')
57
57
 
58
58
  module Core
59
- attr_reader :auth_token
59
+ attr_accessor :auth_token
60
60
  attr_reader :auth_token_expiration
61
61
  attr_reader :current_user
62
62
  attr_reader :current_user_id
@@ -75,6 +75,7 @@ module Fog
75
75
  end
76
76
 
77
77
  @auth_token ||= options[:openstack_auth_token]
78
+ @openstack_identity_public_endpoint = options[:openstack_identity_endpoint]
78
79
 
79
80
  @openstack_auth_uri = URI.parse(options[:openstack_auth_url])
80
81
  @openstack_must_reauthenticate = false
@@ -97,16 +98,22 @@ module Fog
97
98
  end
98
99
 
99
100
  def credentials
100
- options = { :provider => 'openstack',
101
- :openstack_auth_url => @openstack_auth_uri.to_s,
102
- :openstack_auth_token => @auth_token,
101
+ options = {
102
+ :provider => 'openstack',
103
+ :openstack_auth_url => @openstack_auth_uri.to_s,
104
+ :openstack_auth_token => @auth_token,
103
105
  :openstack_identity_endpoint => @openstack_identity_public_endpoint,
104
- :current_user => @current_user,
105
- :current_user_id => @current_user_id,
106
- :current_tenant => @current_tenant }
106
+ :current_user => @current_user,
107
+ :current_user_id => @current_user_id,
108
+ :current_tenant => @current_tenant,
109
+ :unscoped_token => @unscoped_token}
107
110
  openstack_options.merge options
108
111
  end
109
112
 
113
+ def reload
114
+ @connection.reset
115
+ end
116
+
110
117
  private
111
118
 
112
119
  def openstack_options
@@ -135,6 +142,7 @@ module Fog
135
142
  @openstack_must_reauthenticate = false
136
143
  @auth_token = credentials[:token]
137
144
  @openstack_management_url = credentials[:server_management_url]
145
+ @unscoped_token = credentials[:unscoped_token]
138
146
  else
139
147
  @auth_token = @openstack_auth_token
140
148
  end
@@ -142,8 +150,17 @@ module Fog
142
150
 
143
151
  @host = @openstack_management_uri.host
144
152
  @path = @openstack_management_uri.path
153
+ @path.sub!(/\/$/, '')
145
154
  @port = @openstack_management_uri.port
146
155
  @scheme = @openstack_management_uri.scheme
156
+
157
+ # Not all implementations have identity service in the catalog
158
+ if @openstack_identity_public_endpoint || @openstack_management_url
159
+ @identity_connection = Fog::Core::Connection.new(
160
+ @openstack_identity_public_endpoint || @openstack_management_url,
161
+ false, @connection_options)
162
+ end
163
+
147
164
  true
148
165
  end
149
166
  end
@@ -342,7 +359,7 @@ module Fog
342
359
  raise Fog::Errors::NotFound.new("Multiple regions available choose one of these '#{regions.join(',')}'")
343
360
  end
344
361
 
345
- identity_service = get_service_v3(body, identity_service_type) if identity_service_type
362
+ identity_service = get_service_v3(body, identity_service_type, nil, nil, :endpoint_path_matches => /\/v3/) if identity_service_type
346
363
 
347
364
  management_url = service['endpoints'].find { |e| e['interface']==endpoint_type }['url']
348
365
  identity_url = identity_service['endpoints'].find { |e| e['interface']=='public' }['url'] if identity_service
@@ -502,8 +519,9 @@ module Fog
502
519
  [response.headers["X-Subject-Token"], Fog::JSON.decode(response.body)]
503
520
  end
504
521
 
505
- def self.get_service_v3(hash, service_type=[], service_name=nil, region=nil)
522
+ def self.get_service_v3(hash, service_type=[], service_name=nil, region=nil, options={})
506
523
 
524
+ # Find all services matching any of the types in service_type, filtered by service_name if it's non-nil
507
525
  services = hash['token']['catalog'].find_all do |s|
508
526
  if service_name.nil? or service_name.empty?
509
527
  service_type.include?(s['type'])
@@ -512,12 +530,21 @@ module Fog
512
530
  end
513
531
  end if hash['token']['catalog']
514
532
 
533
+ # Filter the found services by region (if specified) and whether the endpoint path matches the given regex (e.g. /\/v3/)
515
534
  services.find do |s|
516
- region.nil? or s['endpoints'].any? { |ep| ep['region'] == region }
535
+ s['endpoints'].any? { |ep| endpoint_region?(ep, region) && endpoint_path_match?(ep, options[:endpoint_path_matches])}
517
536
  end if services
518
537
 
519
538
  end
520
539
 
540
+ def self.endpoint_region?(endpoint, region)
541
+ region.nil? || endpoint['region'] == region
542
+ end
543
+
544
+ def self.endpoint_path_match?(endpoint, match_regex)
545
+ match_regex.nil? || URI(endpoint['url']).path =~ match_regex
546
+ end
547
+
521
548
  def self.get_supported_version(supported_versions, uri, auth_token, connection_options = {})
522
549
  connection = Fog::Core::Connection.new("#{uri.scheme}://#{uri.host}:#{uri.port}", false, connection_options)
523
550
  response = connection.request({
@@ -22,53 +22,42 @@ module Fog
22
22
  end
23
23
 
24
24
  module Common
25
-
26
- def authenticate
27
- if !@openstack_management_url || @openstack_must_reauthenticate
28
- options = {
29
- :openstack_api_key => @openstack_api_key,
30
- :openstack_username => @openstack_username,
31
- :openstack_userid => @openstack_userid,
32
- :openstack_domain_name => @openstack_domain_name,
33
- :openstack_domain_id => @openstack_domain_id,
34
- :openstack_project_name => @openstack_project_name,
35
- :openstack_auth_token => @openstack_must_reauthenticate ? nil : @openstack_auth_token,
36
- :openstack_auth_uri => @openstack_auth_uri,
37
- :openstack_tenant => @openstack_tenant,
38
- :openstack_service_type => @openstack_service_type,
39
- :openstack_service_name => @openstack_service_name,
40
- :openstack_endpoint_type => @openstack_endpoint_type,
41
- :openstack_region => @openstack_region
42
- }
43
-
44
- credentials = Fog::OpenStack.authenticate(options, @connection_options)
45
-
46
- @current_user = credentials[:user]
47
- @current_user_id = credentials[:current_user_id]
48
- @current_tenant = credentials[:tenant]
49
-
50
- @openstack_must_reauthenticate = false
51
- @auth_token = credentials[:token]
52
- @openstack_management_url = credentials[:server_management_url]
53
- @openstack_current_user_id = credentials[:current_user_id]
54
- @unscoped_token = credentials[:unscoped_token]
55
- uri = URI.parse(@openstack_management_url)
56
- else
57
- @auth_token = @openstack_auth_token
58
- uri = URI.parse(@openstack_management_url)
25
+ attr_reader :unscoped_token
26
+
27
+ include Fog::OpenStack::Core
28
+
29
+ def request(params)
30
+ retried = false
31
+ begin
32
+ response = @connection.request(params.merge({
33
+ :headers => params.fetch(:headers,{}).merge({
34
+ 'Content-Type' => 'application/json',
35
+ 'Accept' => 'application/json',
36
+ 'X-Auth-Token' => @auth_token
37
+ }),
38
+ :path => "#{@path}/#{params[:path]}"
39
+ }))
40
+ rescue Excon::Errors::Unauthorized => error
41
+ raise if retried
42
+ retried = true
43
+
44
+ @openstack_must_reauthenticate = true
45
+ authenticate
46
+ retry
47
+ rescue Excon::Errors::HTTPStatusError => error
48
+ raise case error
49
+ when Excon::Errors::NotFound
50
+ Fog::Identity::OpenStack::NotFound.slurp(error)
51
+ else
52
+ error
53
+ end
59
54
  end
60
-
61
- @host = uri.host
62
- @path = uri.path
63
- @path.sub!(/\/$/, '')
64
- @port = uri.port
65
- @scheme = uri.scheme
66
- true
55
+ unless response.body.empty?
56
+ response.body = Fog::JSON.decode(response.body)
57
+ end
58
+ response
67
59
  end
68
-
69
60
  end
70
61
  end
71
-
72
-
73
62
  end
74
63
  end