fog 1.7.0 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (219) hide show
  1. data/.gitignore +2 -2
  2. data/README.md +9 -10
  3. data/Rakefile +15 -299
  4. data/changelog.txt +153 -0
  5. data/docs/about/contributing.markdown +1 -0
  6. data/docs/dns/index.markdown +1 -1
  7. data/docs/index.markdown +8 -3
  8. data/fog.gemspec +3 -3
  9. data/lib/fog.rb +0 -5
  10. data/lib/fog/aws/auto_scaling.rb +1 -1
  11. data/lib/fog/aws/cloud_watch.rb +1 -1
  12. data/lib/fog/aws/compute.rb +2 -1
  13. data/lib/fog/aws/dynamodb.rb +30 -64
  14. data/lib/fog/aws/elb.rb +1 -1
  15. data/lib/fog/aws/glacier.rb +1 -1
  16. data/lib/fog/aws/iam.rb +1 -0
  17. data/lib/fog/aws/models/auto_scaling/group.rb +1 -1
  18. data/lib/fog/aws/models/compute/server.rb +2 -0
  19. data/lib/fog/aws/models/compute/volume.rb +0 -1
  20. data/lib/fog/aws/models/iam/user.rb +1 -1
  21. data/lib/fog/aws/parsers/compute/describe_instances.rb +3 -1
  22. data/lib/fog/aws/parsers/compute/describe_reserved_instances_offerings.rb +1 -1
  23. data/lib/fog/aws/parsers/storage/delete_multiple_objects.rb +50 -0
  24. data/lib/fog/aws/rds.rb +2 -2
  25. data/lib/fog/aws/requests/compute/describe_availability_zones.rb +3 -0
  26. data/lib/fog/aws/requests/compute/describe_reserved_instances_offerings.rb +11 -8
  27. data/lib/fog/aws/requests/compute/modify_volume_attribute.rb +51 -0
  28. data/lib/fog/aws/requests/dns/change_resource_record_sets.rb +1 -0
  29. data/lib/fog/aws/requests/storage/delete_multiple_objects.rb +172 -0
  30. data/lib/fog/aws/signaturev4.rb +1 -1
  31. data/lib/fog/aws/sqs.rb +1 -1
  32. data/lib/fog/aws/storage.rb +2 -0
  33. data/lib/fog/bluebox/requests/compute/create_block.rb +1 -3
  34. data/lib/fog/brightbox/compute.rb +239 -84
  35. data/lib/fog/brightbox/models/compute/account.rb +9 -3
  36. data/lib/fog/brightbox/models/compute/server.rb +2 -1
  37. data/lib/fog/brightbox/models/compute/servers.rb +33 -1
  38. data/lib/fog/brightbox/oauth2.rb +164 -0
  39. data/lib/fog/brightbox/requests/compute/activate_console_server.rb +9 -2
  40. data/lib/fog/brightbox/requests/compute/add_listeners_load_balancer.rb +11 -2
  41. data/lib/fog/brightbox/requests/compute/add_nodes_load_balancer.rb +11 -2
  42. data/lib/fog/brightbox/requests/compute/add_servers_server_group.rb +9 -11
  43. data/lib/fog/brightbox/requests/compute/apply_to_firewall_policy.rb +11 -2
  44. data/lib/fog/brightbox/requests/compute/create_api_client.rb +11 -2
  45. data/lib/fog/brightbox/requests/compute/create_application.rb +11 -2
  46. data/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +11 -1
  47. data/lib/fog/brightbox/requests/compute/create_firewall_policy.rb +13 -2
  48. data/lib/fog/brightbox/requests/compute/create_firewall_rule.rb +17 -2
  49. data/lib/fog/brightbox/requests/compute/create_image.rb +18 -2
  50. data/lib/fog/brightbox/requests/compute/create_load_balancer.rb +14 -2
  51. data/lib/fog/brightbox/requests/compute/create_server.rb +17 -2
  52. data/lib/fog/brightbox/requests/compute/create_server_group.rb +11 -2
  53. data/lib/fog/brightbox/requests/compute/destroy_api_client.rb +9 -2
  54. data/lib/fog/brightbox/requests/compute/destroy_application.rb +9 -2
  55. data/lib/fog/brightbox/requests/compute/destroy_cloud_ip.rb +9 -2
  56. data/lib/fog/brightbox/requests/compute/destroy_firewall_policy.rb +9 -2
  57. data/lib/fog/brightbox/requests/compute/destroy_firewall_rule.rb +9 -2
  58. data/lib/fog/brightbox/requests/compute/destroy_image.rb +9 -2
  59. data/lib/fog/brightbox/requests/compute/destroy_load_balancer.rb +9 -2
  60. data/lib/fog/brightbox/requests/compute/destroy_server.rb +9 -2
  61. data/lib/fog/brightbox/requests/compute/destroy_server_group.rb +9 -2
  62. data/lib/fog/brightbox/requests/compute/get_account.rb +7 -15
  63. data/lib/fog/brightbox/requests/compute/get_api_client.rb +9 -2
  64. data/lib/fog/brightbox/requests/compute/get_application.rb +9 -2
  65. data/lib/fog/brightbox/requests/compute/get_authenticated_user.rb +1 -3
  66. data/lib/fog/brightbox/requests/compute/get_cloud_ip.rb +9 -2
  67. data/lib/fog/brightbox/requests/compute/get_firewall_policy.rb +9 -2
  68. data/lib/fog/brightbox/requests/compute/get_firewall_rule.rb +9 -2
  69. data/lib/fog/brightbox/requests/compute/get_image.rb +9 -2
  70. data/lib/fog/brightbox/requests/compute/get_interface.rb +9 -2
  71. data/lib/fog/brightbox/requests/compute/get_load_balancer.rb +9 -2
  72. data/lib/fog/brightbox/requests/compute/get_scoped_account.rb +1 -5
  73. data/lib/fog/brightbox/requests/compute/get_server.rb +9 -2
  74. data/lib/fog/brightbox/requests/compute/get_server_group.rb +9 -2
  75. data/lib/fog/brightbox/requests/compute/get_server_type.rb +9 -2
  76. data/lib/fog/brightbox/requests/compute/get_user.rb +7 -15
  77. data/lib/fog/brightbox/requests/compute/get_zone.rb +9 -2
  78. data/lib/fog/brightbox/requests/compute/list_accounts.rb +6 -2
  79. data/lib/fog/brightbox/requests/compute/list_api_clients.rb +8 -2
  80. data/lib/fog/brightbox/requests/compute/list_applications.rb +8 -2
  81. data/lib/fog/brightbox/requests/compute/list_cloud_ips.rb +8 -2
  82. data/lib/fog/brightbox/requests/compute/list_firewall_policies.rb +8 -2
  83. data/lib/fog/brightbox/requests/compute/list_images.rb +8 -2
  84. data/lib/fog/brightbox/requests/compute/list_load_balancers.rb +8 -2
  85. data/lib/fog/brightbox/requests/compute/list_server_groups.rb +8 -2
  86. data/lib/fog/brightbox/requests/compute/list_server_types.rb +8 -2
  87. data/lib/fog/brightbox/requests/compute/list_servers.rb +8 -2
  88. data/lib/fog/brightbox/requests/compute/list_users.rb +8 -2
  89. data/lib/fog/brightbox/requests/compute/list_zones.rb +8 -2
  90. data/lib/fog/brightbox/requests/compute/map_cloud_ip.rb +11 -2
  91. data/lib/fog/brightbox/requests/compute/move_servers_server_group.rb +10 -12
  92. data/lib/fog/brightbox/requests/compute/remove_firewall_policy.rb +11 -2
  93. data/lib/fog/brightbox/requests/compute/remove_listeners_load_balancer.rb +11 -2
  94. data/lib/fog/brightbox/requests/compute/remove_nodes_load_balancer.rb +11 -2
  95. data/lib/fog/brightbox/requests/compute/remove_servers_server_group.rb +9 -10
  96. data/lib/fog/brightbox/requests/compute/reset_ftp_password_account.rb +22 -3
  97. data/lib/fog/brightbox/requests/compute/reset_ftp_password_scoped_account.rb +18 -0
  98. data/lib/fog/brightbox/requests/compute/reset_secret_api_client.rb +13 -1
  99. data/lib/fog/brightbox/requests/compute/reset_secret_application.rb +9 -2
  100. data/lib/fog/brightbox/requests/compute/shutdown_server.rb +9 -2
  101. data/lib/fog/brightbox/requests/compute/snapshot_server.rb +9 -2
  102. data/lib/fog/brightbox/requests/compute/start_server.rb +9 -2
  103. data/lib/fog/brightbox/requests/compute/stop_server.rb +9 -2
  104. data/lib/fog/brightbox/requests/compute/unmap_cloud_ip.rb +9 -2
  105. data/lib/fog/brightbox/requests/compute/update_account.rb +32 -34
  106. data/lib/fog/brightbox/requests/compute/update_api_client.rb +12 -2
  107. data/lib/fog/brightbox/requests/compute/update_application.rb +12 -2
  108. data/lib/fog/brightbox/requests/compute/update_cloud_ip.rb +13 -2
  109. data/lib/fog/brightbox/requests/compute/update_firewall_rule.rb +16 -1
  110. data/lib/fog/brightbox/requests/compute/update_image.rb +17 -2
  111. data/lib/fog/brightbox/requests/compute/update_load_balancer.rb +15 -2
  112. data/lib/fog/brightbox/requests/compute/update_scoped_account.rb +12 -19
  113. data/lib/fog/brightbox/requests/compute/update_server.rb +12 -2
  114. data/lib/fog/brightbox/requests/compute/update_server_group.rb +12 -2
  115. data/lib/fog/brightbox/requests/compute/update_user.rb +15 -2
  116. data/lib/fog/cloudstack/models/compute/server.rb +3 -1
  117. data/lib/fog/core.rb +1 -0
  118. data/lib/fog/core/connection.rb +1 -0
  119. data/lib/fog/google/storage.rb +13 -2
  120. data/lib/fog/libvirt/models/compute/server.rb +1 -0
  121. data/lib/fog/libvirt/requests/compute/list_domains.rb +2 -2
  122. data/lib/fog/openstack.rb +57 -58
  123. data/lib/fog/openstack/compute.rb +15 -14
  124. data/lib/fog/openstack/identity.rb +10 -2
  125. data/lib/fog/openstack/image.rb +1 -1
  126. data/lib/fog/openstack/models/compute/flavor.rb +5 -1
  127. data/lib/fog/openstack/models/compute/security_group.rb +1 -1
  128. data/lib/fog/openstack/models/compute/server.rb +5 -0
  129. data/lib/fog/openstack/models/identity/users.rb +1 -2
  130. data/lib/fog/openstack/requests/compute/create_flavor.rb +4 -1
  131. data/lib/fog/openstack/requests/compute/create_security_group.rb +1 -1
  132. data/lib/fog/openstack/requests/compute/get_limits.rb +93 -0
  133. data/lib/fog/openstack/requests/compute/list_tenants.rb +1 -0
  134. data/lib/fog/openstack/requests/compute/release_address.rb +13 -1
  135. data/lib/fog/openstack/requests/compute/reset_server_state.rb +24 -0
  136. data/lib/fog/openstack/requests/identity/create_role.rb +1 -1
  137. data/lib/fog/openstack/requests/identity/set_tenant.rb +21 -0
  138. data/lib/fog/openstack/volume.rb +2 -1
  139. data/lib/fog/rackspace/models/compute_v2/server.rb +27 -0
  140. data/lib/fog/rackspace/models/compute_v2/servers.rb +8 -0
  141. data/lib/fog/rackspace/models/dns/record.rb +14 -1
  142. data/lib/fog/rackspace/models/storage/file.rb +68 -2
  143. data/lib/fog/rackspace/requests/compute_v2/create_server.rb +3 -0
  144. data/lib/fog/version.rb +5 -0
  145. data/lib/fog/vsphere/compute.rb +74 -8
  146. data/lib/fog/vsphere/models/compute/cluster.rb +31 -0
  147. data/lib/fog/vsphere/models/compute/clusters.rb +26 -0
  148. data/lib/fog/vsphere/models/compute/datacenter.rb +35 -0
  149. data/lib/fog/vsphere/models/compute/datacenters.rb +23 -0
  150. data/lib/fog/vsphere/models/compute/datastore.rb +24 -0
  151. data/lib/fog/vsphere/models/compute/datastores.rb +25 -0
  152. data/lib/fog/vsphere/models/compute/folder.rb +28 -0
  153. data/lib/fog/vsphere/models/compute/folders.rb +27 -0
  154. data/lib/fog/vsphere/models/compute/interface.rb +39 -0
  155. data/lib/fog/vsphere/models/compute/interfaces.rb +33 -0
  156. data/lib/fog/vsphere/models/compute/network.rb +21 -0
  157. data/lib/fog/vsphere/models/compute/networks.rb +25 -0
  158. data/lib/fog/vsphere/models/compute/resource_pool.rb +23 -0
  159. data/lib/fog/vsphere/models/compute/resource_pools.rb +26 -0
  160. data/lib/fog/vsphere/models/compute/server.rb +78 -12
  161. data/lib/fog/vsphere/models/compute/servers.rb +16 -20
  162. data/lib/fog/vsphere/models/compute/template.rb +13 -0
  163. data/lib/fog/vsphere/models/compute/templates.rb +23 -0
  164. data/lib/fog/vsphere/models/compute/volume.rb +45 -0
  165. data/lib/fog/vsphere/models/compute/volumes.rb +33 -0
  166. data/lib/fog/vsphere/requests/compute/create_vm.rb +114 -0
  167. data/lib/fog/vsphere/requests/compute/get_cluster.rb +25 -0
  168. data/lib/fog/vsphere/requests/compute/get_datacenter.rb +29 -0
  169. data/lib/fog/vsphere/requests/compute/get_datastore.rb +25 -0
  170. data/lib/fog/vsphere/requests/compute/get_folder.rb +73 -0
  171. data/lib/fog/vsphere/requests/compute/get_network.rb +25 -0
  172. data/lib/fog/vsphere/requests/compute/get_resource_pool.rb +26 -0
  173. data/lib/fog/vsphere/requests/compute/get_virtual_machine.rb +62 -0
  174. data/lib/fog/vsphere/requests/compute/list_clusters.rb +37 -0
  175. data/lib/fog/vsphere/requests/compute/list_datacenters.rb +34 -0
  176. data/lib/fog/vsphere/requests/compute/list_datastores.rb +40 -0
  177. data/lib/fog/vsphere/requests/compute/list_folders.rb +45 -0
  178. data/lib/fog/vsphere/requests/compute/list_networks.rb +38 -0
  179. data/lib/fog/vsphere/requests/compute/list_resource_pools.rb +39 -0
  180. data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +132 -166
  181. data/lib/fog/vsphere/requests/compute/list_vm_interfaces.rb +52 -0
  182. data/lib/fog/vsphere/requests/compute/list_vm_volumes.rb +51 -0
  183. data/lib/fog/vsphere/requests/compute/vm_clone.rb +6 -8
  184. data/lib/fog/vsphere/requests/compute/vm_destroy.rb +1 -8
  185. data/lib/fog/vsphere/requests/compute/vm_reconfig_hardware.rb +1 -2
  186. data/lib/tasks/changelog_task.rb +98 -0
  187. data/lib/tasks/documentation_task.rb +155 -0
  188. data/lib/tasks/test_task.rb +46 -0
  189. data/tests/aws/models/iam/users_tests.rb +16 -2
  190. data/tests/aws/requests/auto_scaling/notification_configuration_tests.rb +1 -0
  191. data/tests/aws/requests/auto_scaling/tag_tests.rb +1 -0
  192. data/tests/aws/requests/compute/instance_tests.rb +2 -0
  193. data/tests/aws/requests/compute/volume_tests.rb +8 -0
  194. data/tests/aws/requests/storage/object_tests.rb +18 -1
  195. data/tests/aws/requests/storage/versioning_tests.rb +70 -0
  196. data/tests/brightbox/compute_tests.rb +96 -4
  197. data/tests/brightbox/models/compute/account_tests.rb +15 -0
  198. data/tests/brightbox/oauth2_tests.rb +103 -0
  199. data/tests/brightbox/requests/compute/account_tests.rb +9 -2
  200. data/tests/brightbox/requests/compute/interface_tests.rb +18 -4
  201. data/tests/dns/models/record_tests.rb +17 -3
  202. data/tests/openstack/requests/compute/address_tests.rb +22 -19
  203. data/tests/openstack/requests/compute/flavor_tests.rb +4 -2
  204. data/tests/openstack/requests/compute/limit_tests.rb +60 -0
  205. data/tests/openstack/requests/compute/quota_tests.rb +16 -3
  206. data/tests/openstack/requests/compute/security_group_tests.rb +1 -1
  207. data/tests/rackspace/models/compute_v2/servers_tests.rb +6 -0
  208. data/tests/rackspace/models/storage/file_tests.rb +172 -0
  209. data/tests/rackspace/requests/dns/helper.rb +12 -26
  210. data/tests/vsphere/compute_tests.rb +3 -3
  211. data/tests/vsphere/models/compute/server_tests.rb +1 -2
  212. data/tests/vsphere/requests/compute/list_virtual_machines_tests.rb +5 -13
  213. data/tests/vsphere/requests/compute/vm_clone_tests.rb +2 -2
  214. metadata +59 -11
  215. data/lib/fog/vsphere/requests/compute/datacenters.rb +0 -34
  216. data/lib/fog/vsphere/requests/compute/find_vm_by_ref.rb +0 -41
  217. data/lib/fog/vsphere/requests/compute/vm_create.rb +0 -97
  218. data/tests/vsphere/requests/compute/find_vm_by_ref_tests.rb +0 -26
  219. data/tests/vsphere/requests/compute/vm_create_tests.rb +0 -20
@@ -69,6 +69,7 @@ module Fog
69
69
  request :remove_fixed_ip
70
70
  request :server_diagnostics
71
71
  request :boot_from_snapshot
72
+ request :reset_server_state
72
73
 
73
74
  # Server Extenstions
74
75
  request :get_console_output
@@ -125,6 +126,7 @@ module Fog
125
126
  # Tenant
126
127
  request :list_tenants
127
128
  request :set_tenant
129
+ request :get_limits
128
130
 
129
131
  # Volume
130
132
  request :list_volumes
@@ -189,13 +191,13 @@ module Fog
189
191
  :addresses => {},
190
192
  :quota => {
191
193
  'metadata_items' => 128,
194
+ 'key_pairs' => 10,
192
195
  'injected_file_content_bytes' => 10240,
196
+ 'injected_file_path_bytes' => 256,
193
197
  'injected_files' => 5,
194
- 'gigabytes' => 1000,
195
198
  'ram' => 51200,
196
199
  'floating_ips' => 10,
197
200
  'instances' => 10,
198
- 'volumes' => 10,
199
201
  'cores' => 20,
200
202
  }
201
203
  }
@@ -249,9 +251,10 @@ module Fog
249
251
 
250
252
  def initialize(options={})
251
253
  @openstack_auth_token = options[:openstack_auth_token]
254
+ @auth_token = options[:openstack_auth_token]
252
255
  @openstack_identity_public_endpoint = options[:openstack_identity_endpoint]
253
256
 
254
- unless @openstack_auth_token
257
+ unless @auth_token
255
258
  missing_credentials = Array.new
256
259
  @openstack_api_key = options[:openstack_api_key]
257
260
  @openstack_username = options[:openstack_username]
@@ -300,6 +303,7 @@ module Fog
300
303
  response = @connection.request(params.merge({
301
304
  :headers => {
302
305
  'Content-Type' => 'application/json',
306
+ 'Accept' => 'application/json',
303
307
  'X-Auth-Token' => @auth_token
304
308
  }.merge!(params[:headers] || {}),
305
309
  :host => @host,
@@ -333,14 +337,14 @@ module Fog
333
337
  private
334
338
 
335
339
  def authenticate
336
- if @openstack_must_reauthenticate || @openstack_auth_token.nil?
340
+ if !@openstack_management_url || @openstack_must_reauthenticate
337
341
  options = {
338
- :openstack_api_key => @openstack_api_key,
339
- :openstack_username => @openstack_username,
340
- :openstack_auth_token => @openstack_auth_token,
341
- :openstack_auth_uri => @openstack_auth_uri,
342
- :openstack_region => @openstack_region,
343
- :openstack_tenant => @openstack_tenant,
342
+ :openstack_api_key => @openstack_api_key,
343
+ :openstack_username => @openstack_username,
344
+ :openstack_auth_token => @auth_token,
345
+ :openstack_auth_uri => @openstack_auth_uri,
346
+ :openstack_region => @openstack_region,
347
+ :openstack_tenant => @openstack_tenant,
344
348
  :openstack_service_name => @openstack_service_name,
345
349
  :openstack_identity_service_name => @openstack_identity_service_name
346
350
  }
@@ -359,12 +363,9 @@ module Fog
359
363
  @auth_token_expiration = credentials[:expires]
360
364
  @openstack_management_url = credentials[:server_management_url]
361
365
  @openstack_identity_public_endpoint = credentials[:identity_public_endpoint]
362
- uri = URI.parse(@openstack_management_url)
363
- else
364
- @auth_token = @openstack_auth_token
365
- uri = URI.parse(@openstack_management_url)
366
366
  end
367
367
 
368
+ uri = URI.parse(@openstack_management_url)
368
369
  @host = uri.host
369
370
  @path, @tenant_id = uri.path.scan(/(\/.*)\/(.*)/).flatten
370
371
 
@@ -51,12 +51,16 @@ module Fog
51
51
  request :get_role
52
52
  request :list_roles
53
53
 
54
+ request :set_tenant
55
+
54
56
 
55
57
  class Mock
56
58
  attr_reader :auth_token
59
+ attr_reader :unscoped_token
57
60
  attr_reader :auth_token_expiration
58
61
  attr_reader :current_user
59
62
  attr_reader :current_tenant
63
+ attr_reader :unscoped_token
60
64
 
61
65
  def self.data
62
66
  @users ||= {}
@@ -114,6 +118,7 @@ module Fog
114
118
  @current_user = self.data[:users].values.find do |u|
115
119
  u['name'] == @openstack_username
116
120
  end
121
+ @current_tenant_id = Fog::Mock.random_hex(32)
117
122
 
118
123
  unless @current_user
119
124
  @current_user_id = Fog::Mock.random_hex(32)
@@ -151,6 +156,7 @@ module Fog
151
156
  class Real
152
157
  attr_reader :current_user
153
158
  attr_reader :current_tenant
159
+ attr_reader :unscoped_token
154
160
 
155
161
  def initialize(options={})
156
162
  @openstack_auth_token = options[:openstack_auth_token]
@@ -166,7 +172,7 @@ module Fog
166
172
  end
167
173
 
168
174
  @openstack_tenant = options[:openstack_tenant]
169
- @openstack_auth_uri = URI.parse(options[:openstack_auth_url])
175
+ @openstack_auth_uri = URI.parse(options[:openstack_auth_url])
170
176
  @openstack_management_url = options[:openstack_management_url]
171
177
  @openstack_must_reauthenticate = false
172
178
  @openstack_service_name = options[:openstack_service_name] || ['identity']
@@ -203,6 +209,7 @@ module Fog
203
209
  response = @connection.request(params.merge({
204
210
  :headers => {
205
211
  'Content-Type' => 'application/json',
212
+ 'Accept' => 'application/json',
206
213
  'X-Auth-Token' => @auth_token
207
214
  }.merge!(params[:headers] || {}),
208
215
  :host => @host,
@@ -235,7 +242,7 @@ module Fog
235
242
  private
236
243
 
237
244
  def authenticate
238
- if @openstack_must_reauthenticate || @openstack_auth_token.nil?
245
+ if !@openstack_management_url || @openstack_must_reauthenticate
239
246
  options = {
240
247
  :openstack_api_key => @openstack_api_key,
241
248
  :openstack_username => @openstack_username,
@@ -255,6 +262,7 @@ module Fog
255
262
  @auth_token = credentials[:token]
256
263
  @openstack_management_url = credentials[:server_management_url]
257
264
  @openstack_current_user_id = credentials[:current_user_id]
265
+ @unscoped_token = credentials[:unscoped_token]
258
266
  uri = URI.parse(@openstack_management_url)
259
267
  else
260
268
  @auth_token = @openstack_auth_token
@@ -172,7 +172,7 @@ module Fog
172
172
  private
173
173
 
174
174
  def authenticate
175
- if @openstack_must_reauthenticate || @openstack_auth_token.nil?
175
+ if !@openstack_management_url || @openstack_must_reauthenticate
176
176
  options = {
177
177
  :openstack_tenant => @openstack_tenant,
178
178
  :openstack_api_key => @openstack_api_key,
@@ -14,6 +14,8 @@ module Fog
14
14
  attribute :swap
15
15
  attribute :rxtx_factor
16
16
  attribute :ephemeral, :aliases => 'OS-FLV-EXT-DATA:ephemeral'
17
+ attribute :is_public, :aliases => 'os-flavor-access:is_public'
18
+ attribute :disabled, :aliases => 'OS-FLV-DISABLED:disabled'
17
19
 
18
20
  def initialize(attributes)
19
21
  @connection = attributes[:connection]
@@ -23,8 +25,10 @@ module Fog
23
25
  def save
24
26
  requires :name, :ram, :vcpus, :disk
25
27
  attributes[:ephemeral] = self.ephemeral || 0
28
+ attributes[:is_public] = self.is_public || false
29
+ attributes[:disabled] = self.disabled || false
26
30
  attributes[:swap] = self.swap || 0
27
- attributes[:rxtx_factor] = self.rxtx_factor || 1
31
+ attributes[:rxtx_factor] = self.rxtx_factor || 1.0
28
32
  merge_attributes(connection.create_flavor(self.attributes).body['flavor'])
29
33
  self
30
34
  end
@@ -17,7 +17,7 @@ module Fog
17
17
  def save
18
18
  requires :name, :description
19
19
  data = connection.create_security_group(name, description)
20
- merge_attributes(data.body['security_groups'])
20
+ merge_attributes(data.body['security_group'])
21
21
  true
22
22
  end
23
23
 
@@ -195,6 +195,11 @@ module Fog
195
195
  connection.disassociate_address id, floating_ip
196
196
  end
197
197
 
198
+ def reset_vm_state(vm_state)
199
+ requires :id
200
+ connection.reset_server_state id, vm_state
201
+ end
202
+
198
203
  def min_count=(new_min_count)
199
204
  @min_count = new_min_count
200
205
  end
@@ -7,10 +7,9 @@ module Fog
7
7
  class Users < Fog::Collection
8
8
  model Fog::Identity::OpenStack::User
9
9
 
10
- attribute :tenant
10
+ attribute :tenant_id
11
11
 
12
12
  def all
13
- tenant_id = tenant.nil? ? nil : tenant.id
14
13
  load(connection.list_users(tenant_id).body['users'])
15
14
  end
16
15
 
@@ -29,6 +29,7 @@ module Fog
29
29
  'id' => attributes[:flavor_id],
30
30
  'swap' => attributes[:swap],
31
31
  'OS-FLV-EXT-DATA:ephemeral' => attributes[:ephemeral],
32
+ 'os-flavor-access:is_public' => attributes[:is_public],
32
33
  'rxtx_factor' => attributes[:rxtx_factor]
33
34
  }
34
35
  }
@@ -67,8 +68,10 @@ module Fog
67
68
  "rel" => "bookmark"
68
69
  }
69
70
  ],
70
- "rxtx_factor" => attributes[:rxtx_factor] || 1,
71
+ "rxtx_factor" => attributes[:rxtx_factor] || 1.0,
71
72
  "OS-FLV-EXT-DATA:ephemeral" => attributes[:ephemeral] || 0,
73
+ "os-flavor-access:is_public" => attributes[:is_public] || false,
74
+ "OS-FLV-DISABLED:disabled" => attributes[:disabled] || false,
72
75
  "ram" => attributes[:ram],
73
76
  "id" => "11",
74
77
  "swap" => attributes[:swap] || ""
@@ -41,7 +41,7 @@ module Fog
41
41
  'Content-Length' => Fog::Mock.random_numbers(3).to_s,
42
42
  'Date' => Date.new}
43
43
  response.body = {
44
- 'security_group' => self.data[:security_groups].values
44
+ 'security_group' => self.data[:security_groups][security_group_id]
45
45
  }
46
46
  response
47
47
  end
@@ -0,0 +1,93 @@
1
+ module Fog
2
+ module Compute
3
+ class OpenStack
4
+
5
+ # http://docs.openstack.org/api/openstack-compute/2/content/ProgramaticLimits.html
6
+ #
7
+ class Real
8
+ def get_limits
9
+ request(
10
+ :expects => 200,
11
+ :method => 'GET',
12
+ :path => '/limits.json'
13
+ )
14
+ end
15
+ end
16
+
17
+
18
+ class Mock
19
+ def get_limits
20
+ rate_limits = [
21
+ { 'regex' => '.*',
22
+ 'limit' => [
23
+ { 'next-available' => '2012-11-22T16:13:44Z',
24
+ 'unit' => 'MINUTE',
25
+ 'verb' => 'POST',
26
+ 'remaining' => 9,
27
+ 'value' => 10 },
28
+ { 'next-available' => '2012-11-23T00:46:14Z',
29
+ 'unit' => 'MINUTE',
30
+ 'verb' => 'PUT',
31
+ 'remaining' => 10,
32
+ 'value' => 10 },
33
+ { 'next-available' => '2012-11-22T16:14:30Z',
34
+ 'unit' => 'MINUTE',
35
+ 'verb' => 'DELETE',
36
+ 'remaining' => 99,
37
+ 'value' => 100 } ],
38
+ 'uri' => '*' },
39
+ { 'regex' => '^/servers',
40
+ 'limit' => [
41
+ { 'next-available' => '2012-11-23T00:46:14Z',
42
+ 'unit' => 'DAY',
43
+ 'verb' => 'POST',
44
+ 'remaining' => 50,
45
+ 'value' => 50} ],
46
+ 'uri'=>'*/servers' },
47
+ { 'regex' => '.*changes-since.*',
48
+ 'limit' => [
49
+ { 'next-available' => '2012-11-23T00:46:14Z',
50
+ 'unit' => 'MINUTE',
51
+ 'verb' => 'GET',
52
+ 'remaining' => 3,
53
+ 'value' => 3 } ],
54
+ 'uri' => '*changes-since*' }
55
+ ]
56
+
57
+ absolute_limits = {
58
+ # Max
59
+ 'maxServerMeta' => 128,
60
+ 'maxTotalInstances' => 10,
61
+ 'maxPersonality' => 5,
62
+ 'maxImageMeta' => 128,
63
+ 'maxPersonalitySize' => 10240,
64
+ 'maxSecurityGroupRules' => 20,
65
+ 'maxTotalKeypairs' => 100,
66
+ 'maxSecurityGroups' => 10,
67
+ 'maxTotalCores' => 20,
68
+ 'maxTotalFloatingIps' => 10,
69
+ 'maxTotalRAMSize' => 51200,
70
+
71
+ # Used
72
+ 'totalCoresUsed' => -1,
73
+ 'totalRAMUsed' => -2048,
74
+ 'totalInstancesUsed' => -1,
75
+ 'totalSecurityGroupsUsed' => 0,
76
+ 'totalKeyPairsUsed' => 0
77
+ }
78
+
79
+
80
+ Excon::Response.new(
81
+ :status => 200,
82
+ :body => {
83
+ 'limits' => {
84
+ 'rate' => rate_limits,
85
+ 'absolute' => absolute_limits }
86
+ }
87
+ )
88
+ end
89
+ end
90
+
91
+ end
92
+ end
93
+ end
@@ -6,6 +6,7 @@ module Fog
6
6
  response = @identity_connection.request({
7
7
  :expects => [200, 204],
8
8
  :headers => {'Content-Type' => 'application/json',
9
+ 'Accept' => 'application/json',
9
10
  'X-Auth-Token' => @auth_token},
10
11
  :method => 'GET',
11
12
  :path => '/v2.0/tenants'
@@ -15,8 +15,20 @@ module Fog
15
15
 
16
16
  class Mock
17
17
 
18
+ def release_address(address_id)
19
+ response = Excon::Response.new
20
+ response.status = 202
21
+ response.headers = {
22
+ "Content-Type" => "text/html; charset=UTF-8",
23
+ "Content-Length" => "0",
24
+ "Date" => Date.new
25
+ }
26
+ response.body = {}
27
+ response
28
+ end
29
+
30
+ end # mock
18
31
 
19
- end
20
32
  end
21
33
  end
22
34
  end
@@ -0,0 +1,24 @@
1
+ module Fog
2
+ module Compute
3
+ class OpenStack
4
+ class Real
5
+
6
+ def reset_server_state(server_id, status)
7
+ body = { 'os-resetState' => { 'state' => status } }
8
+ server_action(server_id, body, 202)
9
+ end
10
+
11
+ end
12
+
13
+ class Mock
14
+
15
+ def reset_server_state(server_id, status)
16
+ response = get_server_details(server_id)
17
+ response.body['server']['status'] = status.upcase
18
+ response
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -21,7 +21,7 @@ module Fog
21
21
  class Mock
22
22
  def create_role(name)
23
23
  data = {
24
- 'id' => Fog::Mock.random_numbers(6).to_s,
24
+ 'id' => Fog::Mock.random_base64(64),
25
25
  'name' => name
26
26
  }
27
27
  self.data[:roles][data['id']] = data
@@ -0,0 +1,21 @@
1
+ module Fog
2
+ module Identity
3
+ class OpenStack
4
+
5
+ class Real
6
+ def set_tenant(tenant)
7
+ @openstack_must_reauthenticate = true
8
+ @openstack_tenant = tenant.to_s
9
+ authenticate
10
+ end
11
+ end
12
+
13
+ class Mock
14
+ def set_tenant(tenant)
15
+ true
16
+ end
17
+ end
18
+
19
+ end # class OpenStack
20
+ end # module Identity
21
+ end # module Fog
@@ -142,6 +142,7 @@ module Fog
142
142
  response = @connection.request(params.merge({
143
143
  :headers => {
144
144
  'Content-Type' => 'application/json',
145
+ 'Accept' => 'application/json',
145
146
  'X-Auth-Token' => @auth_token
146
147
  }.merge!(params[:headers] || {}),
147
148
  :host => @host,
@@ -174,7 +175,7 @@ module Fog
174
175
  private
175
176
 
176
177
  def authenticate
177
- if @openstack_must_reauthenticate || @openstack_auth_token.nil?
178
+ if !@openstack_management_url || @openstack_must_reauthenticate
178
179
  options = {
179
180
  :openstack_tenant => @openstack_tenant,
180
181
  :openstack_api_key => @openstack_api_key,