fog 1.8.0 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (990) hide show
  1. data/.gitignore +1 -0
  2. data/README.md +3 -1
  3. data/RELEASE.md +39 -0
  4. data/Rakefile +39 -14
  5. data/bin/fog +4 -0
  6. data/changelog.txt +430 -0
  7. data/docs/storage/aws.markdown +21 -0
  8. data/fog.gemspec +2 -2
  9. data/lib/fog/atmos/models/storage/directories.rb +2 -2
  10. data/lib/fog/atmos/models/storage/directory.rb +11 -11
  11. data/lib/fog/atmos/models/storage/file.rb +8 -8
  12. data/lib/fog/atmos/models/storage/files.rb +3 -3
  13. data/lib/fog/aws.rb +1 -0
  14. data/lib/fog/aws/compute.rb +2 -1
  15. data/lib/fog/aws/dynamodb.rb +1 -1
  16. data/lib/fog/aws/elasticache.rb +3 -1
  17. data/lib/fog/aws/models/auto_scaling/activities.rb +2 -2
  18. data/lib/fog/aws/models/auto_scaling/activity.rb +1 -1
  19. data/lib/fog/aws/models/auto_scaling/configuration.rb +2 -2
  20. data/lib/fog/aws/models/auto_scaling/configurations.rb +2 -2
  21. data/lib/fog/aws/models/auto_scaling/group.rb +12 -12
  22. data/lib/fog/aws/models/auto_scaling/groups.rb +2 -2
  23. data/lib/fog/aws/models/auto_scaling/instance.rb +5 -5
  24. data/lib/fog/aws/models/auto_scaling/instances.rb +2 -2
  25. data/lib/fog/aws/models/auto_scaling/policies.rb +2 -2
  26. data/lib/fog/aws/models/auto_scaling/policy.rb +2 -2
  27. data/lib/fog/aws/models/beanstalk/application.rb +7 -7
  28. data/lib/fog/aws/models/beanstalk/applications.rb +2 -2
  29. data/lib/fog/aws/models/beanstalk/environment.rb +10 -10
  30. data/lib/fog/aws/models/beanstalk/environments.rb +2 -2
  31. data/lib/fog/aws/models/beanstalk/events.rb +1 -1
  32. data/lib/fog/aws/models/beanstalk/template.rb +5 -5
  33. data/lib/fog/aws/models/beanstalk/templates.rb +3 -3
  34. data/lib/fog/aws/models/beanstalk/version.rb +6 -6
  35. data/lib/fog/aws/models/beanstalk/versions.rb +2 -2
  36. data/lib/fog/aws/models/cdn/distribution.rb +4 -4
  37. data/lib/fog/aws/models/cdn/distributions.rb +2 -2
  38. data/lib/fog/aws/models/cdn/invalidation.rb +2 -2
  39. data/lib/fog/aws/models/cdn/invalidations.rb +2 -2
  40. data/lib/fog/aws/models/cdn/streaming_distribution.rb +3 -3
  41. data/lib/fog/aws/models/cdn/streaming_distributions.rb +2 -2
  42. data/lib/fog/aws/models/cloud_watch/alarm.rb +2 -2
  43. data/lib/fog/aws/models/cloud_watch/alarm_data.rb +9 -9
  44. data/lib/fog/aws/models/cloud_watch/alarm_datum.rb +3 -3
  45. data/lib/fog/aws/models/cloud_watch/alarm_histories.rb +1 -1
  46. data/lib/fog/aws/models/cloud_watch/alarms.rb +7 -7
  47. data/lib/fog/aws/models/cloud_watch/metric_statistic.rb +2 -2
  48. data/lib/fog/aws/models/cloud_watch/metric_statistics.rb +3 -3
  49. data/lib/fog/aws/models/cloud_watch/metrics.rb +27 -7
  50. data/lib/fog/aws/models/compute/address.rb +9 -9
  51. data/lib/fog/aws/models/compute/addresses.rb +2 -2
  52. data/lib/fog/aws/models/compute/dhcp_option.rb +3 -3
  53. data/lib/fog/aws/models/compute/dhcp_options.rb +2 -2
  54. data/lib/fog/aws/models/compute/flavors.rb +1 -1
  55. data/lib/fog/aws/models/compute/image.rb +2 -2
  56. data/lib/fog/aws/models/compute/images.rb +5 -5
  57. data/lib/fog/aws/models/compute/internet_gateway.rb +4 -4
  58. data/lib/fog/aws/models/compute/internet_gateways.rb +2 -2
  59. data/lib/fog/aws/models/compute/key_pair.rb +4 -4
  60. data/lib/fog/aws/models/compute/key_pairs.rb +2 -2
  61. data/lib/fog/aws/models/compute/network_interface.rb +3 -3
  62. data/lib/fog/aws/models/compute/network_interfaces.rb +2 -2
  63. data/lib/fog/aws/models/compute/security_group.rb +7 -7
  64. data/lib/fog/aws/models/compute/security_groups.rb +3 -3
  65. data/lib/fog/aws/models/compute/server.rb +20 -16
  66. data/lib/fog/aws/models/compute/servers.rb +6 -6
  67. data/lib/fog/aws/models/compute/snapshot.rb +4 -4
  68. data/lib/fog/aws/models/compute/snapshots.rb +3 -3
  69. data/lib/fog/aws/models/compute/spot_request.rb +18 -8
  70. data/lib/fog/aws/models/compute/spot_requests.rb +11 -11
  71. data/lib/fog/aws/models/compute/subnet.rb +3 -3
  72. data/lib/fog/aws/models/compute/subnets.rb +2 -2
  73. data/lib/fog/aws/models/compute/tag.rb +2 -2
  74. data/lib/fog/aws/models/compute/tags.rb +3 -3
  75. data/lib/fog/aws/models/compute/volume.rb +12 -12
  76. data/lib/fog/aws/models/compute/volumes.rb +2 -2
  77. data/lib/fog/aws/models/compute/vpc.rb +2 -2
  78. data/lib/fog/aws/models/compute/vpcs.rb +2 -2
  79. data/lib/fog/aws/models/dns/record.rb +4 -4
  80. data/lib/fog/aws/models/dns/records.rb +3 -3
  81. data/lib/fog/aws/models/dns/zone.rb +3 -3
  82. data/lib/fog/aws/models/dns/zones.rb +2 -2
  83. data/lib/fog/aws/models/elasticache/cluster.rb +2 -2
  84. data/lib/fog/aws/models/elasticache/clusters.rb +2 -2
  85. data/lib/fog/aws/models/elasticache/parameter_group.rb +2 -2
  86. data/lib/fog/aws/models/elasticache/parameter_groups.rb +2 -2
  87. data/lib/fog/aws/models/elasticache/security_group.rb +4 -4
  88. data/lib/fog/aws/models/elasticache/security_groups.rb +2 -2
  89. data/lib/fog/aws/models/elb/listener.rb +2 -2
  90. data/lib/fog/aws/models/elb/load_balancer.rb +19 -19
  91. data/lib/fog/aws/models/elb/load_balancers.rb +2 -2
  92. data/lib/fog/aws/models/elb/policy.rb +3 -3
  93. data/lib/fog/aws/models/glacier/archive.rb +7 -7
  94. data/lib/fog/aws/models/glacier/job.rb +2 -2
  95. data/lib/fog/aws/models/glacier/jobs.rb +3 -3
  96. data/lib/fog/aws/models/glacier/vault.rb +7 -7
  97. data/lib/fog/aws/models/glacier/vaults.rb +2 -2
  98. data/lib/fog/aws/models/iam/access_key.rb +8 -8
  99. data/lib/fog/aws/models/iam/access_keys.rb +7 -7
  100. data/lib/fog/aws/models/iam/policies.rb +10 -10
  101. data/lib/fog/aws/models/iam/policy.rb +8 -8
  102. data/lib/fog/aws/models/iam/user.rb +10 -10
  103. data/lib/fog/aws/models/iam/users.rb +2 -2
  104. data/lib/fog/aws/models/rds/parameter.rb +2 -2
  105. data/lib/fog/aws/models/rds/parameter_group.rb +10 -10
  106. data/lib/fog/aws/models/rds/parameter_groups.rb +3 -3
  107. data/lib/fog/aws/models/rds/parameters.rb +2 -2
  108. data/lib/fog/aws/models/rds/security_group.rb +4 -4
  109. data/lib/fog/aws/models/rds/security_groups.rb +2 -2
  110. data/lib/fog/aws/models/rds/server.rb +10 -10
  111. data/lib/fog/aws/models/rds/servers.rb +3 -3
  112. data/lib/fog/aws/models/rds/snapshot.rb +3 -3
  113. data/lib/fog/aws/models/rds/snapshots.rb +3 -3
  114. data/lib/fog/aws/models/rds/subnet_groups.rb +2 -2
  115. data/lib/fog/aws/models/storage/directories.rb +2 -2
  116. data/lib/fog/aws/models/storage/directory.rb +13 -13
  117. data/lib/fog/aws/models/storage/file.rb +106 -14
  118. data/lib/fog/aws/models/storage/files.rb +10 -10
  119. data/lib/fog/aws/models/storage/version.rb +2 -2
  120. data/lib/fog/aws/models/storage/versions.rb +3 -3
  121. data/lib/fog/aws/parsers/compute/copy_snapshot.rb +22 -0
  122. data/lib/fog/aws/parsers/compute/describe_instances.rb +8 -1
  123. data/lib/fog/aws/parsers/compute/spot_instance_requests.rb +5 -3
  124. data/lib/fog/aws/parsers/elasticache/describe_reserved_cache_nodes.rb +37 -0
  125. data/lib/fog/aws/parsers/storage/cors_configuration.rb +41 -0
  126. data/lib/fog/aws/parsers/storage/get_bucket_lifecycle.rb +45 -11
  127. data/lib/fog/aws/requests/auto_scaling/resume_processes.rb +10 -1
  128. data/lib/fog/aws/requests/auto_scaling/suspend_processes.rb +7 -2
  129. data/lib/fog/aws/requests/cloud_formation/create_stack.rb +17 -0
  130. data/lib/fog/aws/requests/cloud_watch/list_metrics.rb +27 -0
  131. data/lib/fog/aws/requests/compute/copy_snapshot.rb +58 -0
  132. data/lib/fog/aws/requests/elasticache/describe_reserved_cache_nodes.rb +42 -0
  133. data/lib/fog/aws/requests/storage/abort_multipart_upload.rb +5 -7
  134. data/lib/fog/aws/requests/storage/complete_multipart_upload.rb +12 -16
  135. data/lib/fog/aws/requests/storage/copy_object.rb +19 -20
  136. data/lib/fog/aws/requests/storage/cors_utils.rb +41 -0
  137. data/lib/fog/aws/requests/storage/delete_bucket.rb +4 -7
  138. data/lib/fog/aws/requests/storage/delete_bucket_cors.rb +29 -0
  139. data/lib/fog/aws/requests/storage/delete_bucket_lifecycle.rb +4 -7
  140. data/lib/fog/aws/requests/storage/delete_bucket_policy.rb +5 -8
  141. data/lib/fog/aws/requests/storage/delete_bucket_website.rb +4 -7
  142. data/lib/fog/aws/requests/storage/delete_multiple_objects.rb +24 -29
  143. data/lib/fog/aws/requests/storage/delete_object.rb +5 -8
  144. data/lib/fog/aws/requests/storage/get_bucket.rb +25 -28
  145. data/lib/fog/aws/requests/storage/get_bucket_acl.rb +15 -18
  146. data/lib/fog/aws/requests/storage/get_bucket_cors.rb +65 -0
  147. data/lib/fog/aws/requests/storage/get_bucket_lifecycle.rb +9 -12
  148. data/lib/fog/aws/requests/storage/get_bucket_location.rb +5 -8
  149. data/lib/fog/aws/requests/storage/get_bucket_logging.rb +15 -18
  150. data/lib/fog/aws/requests/storage/get_bucket_object_versions.rb +37 -43
  151. data/lib/fog/aws/requests/storage/get_bucket_policy.rb +4 -7
  152. data/lib/fog/aws/requests/storage/get_bucket_versioning.rb +6 -9
  153. data/lib/fog/aws/requests/storage/get_bucket_website.rb +9 -11
  154. data/lib/fog/aws/requests/storage/get_object.rb +17 -20
  155. data/lib/fog/aws/requests/storage/get_object_acl.rb +18 -21
  156. data/lib/fog/aws/requests/storage/get_object_http_url.rb +6 -9
  157. data/lib/fog/aws/requests/storage/get_object_https_url.rb +6 -9
  158. data/lib/fog/aws/requests/storage/get_object_torrent.rb +15 -18
  159. data/lib/fog/aws/requests/storage/get_object_url.rb +7 -10
  160. data/lib/fog/aws/requests/storage/get_request_payment.rb +5 -8
  161. data/lib/fog/aws/requests/storage/get_service.rb +9 -11
  162. data/lib/fog/aws/requests/storage/head_object.rb +19 -22
  163. data/lib/fog/aws/requests/storage/initiate_multipart_upload.rb +17 -20
  164. data/lib/fog/aws/requests/storage/list_multipart_uploads.rb +27 -32
  165. data/lib/fog/aws/requests/storage/list_parts.rb +25 -29
  166. data/lib/fog/aws/requests/storage/post_object_hidden_fields.rb +15 -17
  167. data/lib/fog/aws/requests/storage/put_bucket.rb +8 -11
  168. data/lib/fog/aws/requests/storage/put_bucket_acl.rb +15 -17
  169. data/lib/fog/aws/requests/storage/put_bucket_cors.rb +49 -0
  170. data/lib/fog/aws/requests/storage/put_bucket_lifecycle.rb +44 -15
  171. data/lib/fog/aws/requests/storage/put_bucket_logging.rb +13 -15
  172. data/lib/fog/aws/requests/storage/put_bucket_policy.rb +3 -5
  173. data/lib/fog/aws/requests/storage/put_bucket_versioning.rb +3 -5
  174. data/lib/fog/aws/requests/storage/put_bucket_website.rb +5 -7
  175. data/lib/fog/aws/requests/storage/put_object.rb +19 -22
  176. data/lib/fog/aws/requests/storage/put_object_acl.rb +17 -19
  177. data/lib/fog/aws/requests/storage/put_object_url.rb +6 -9
  178. data/lib/fog/aws/requests/storage/put_request_payment.rb +3 -5
  179. data/lib/fog/aws/requests/storage/upload_part.rb +12 -15
  180. data/lib/fog/aws/storage.rb +8 -1
  181. data/lib/fog/bin/rackspace.rb +7 -0
  182. data/lib/fog/bluebox/models/compute/flavors.rb +2 -2
  183. data/lib/fog/bluebox/models/compute/image.rb +8 -8
  184. data/lib/fog/bluebox/models/compute/images.rb +2 -2
  185. data/lib/fog/bluebox/models/compute/locations.rb +2 -2
  186. data/lib/fog/bluebox/models/compute/server.rb +10 -10
  187. data/lib/fog/bluebox/models/compute/servers.rb +2 -2
  188. data/lib/fog/bluebox/models/dns/record.rb +3 -3
  189. data/lib/fog/bluebox/models/dns/records.rb +2 -2
  190. data/lib/fog/bluebox/models/dns/zone.rb +3 -3
  191. data/lib/fog/bluebox/models/dns/zones.rb +2 -2
  192. data/lib/fog/bluebox/requests/compute/create_block.rb +2 -2
  193. data/lib/fog/brightbox/compute.rb +56 -9
  194. data/lib/fog/brightbox/models/compute/account.rb +1 -1
  195. data/lib/fog/brightbox/models/compute/accounts.rb +3 -3
  196. data/lib/fog/brightbox/models/compute/api_client.rb +4 -4
  197. data/lib/fog/brightbox/models/compute/api_clients.rb +2 -2
  198. data/lib/fog/brightbox/models/compute/application.rb +2 -2
  199. data/lib/fog/brightbox/models/compute/applications.rb +3 -3
  200. data/lib/fog/brightbox/models/compute/cloud_ip.rb +4 -3
  201. data/lib/fog/brightbox/models/compute/cloud_ips.rb +4 -4
  202. data/lib/fog/brightbox/models/compute/firewall_policies.rb +3 -3
  203. data/lib/fog/brightbox/models/compute/firewall_policy.rb +5 -5
  204. data/lib/fog/brightbox/models/compute/firewall_rule.rb +3 -3
  205. data/lib/fog/brightbox/models/compute/firewall_rules.rb +2 -2
  206. data/lib/fog/brightbox/models/compute/flavors.rb +3 -3
  207. data/lib/fog/brightbox/models/compute/image.rb +3 -3
  208. data/lib/fog/brightbox/models/compute/images.rb +2 -2
  209. data/lib/fog/brightbox/models/compute/load_balancer.rb +3 -3
  210. data/lib/fog/brightbox/models/compute/load_balancers.rb +2 -2
  211. data/lib/fog/brightbox/models/compute/server.rb +23 -17
  212. data/lib/fog/brightbox/models/compute/server_group.rb +6 -6
  213. data/lib/fog/brightbox/models/compute/server_groups.rb +3 -3
  214. data/lib/fog/brightbox/models/compute/servers.rb +3 -3
  215. data/lib/fog/brightbox/models/compute/user.rb +1 -1
  216. data/lib/fog/brightbox/models/compute/users.rb +3 -3
  217. data/lib/fog/brightbox/models/compute/zones.rb +3 -3
  218. data/lib/fog/brightbox/requests/compute/activate_console_server.rb +1 -1
  219. data/lib/fog/brightbox/requests/compute/add_listeners_load_balancer.rb +1 -1
  220. data/lib/fog/brightbox/requests/compute/add_nodes_load_balancer.rb +1 -1
  221. data/lib/fog/brightbox/requests/compute/add_servers_server_group.rb +1 -1
  222. data/lib/fog/brightbox/requests/compute/apply_to_firewall_policy.rb +1 -1
  223. data/lib/fog/brightbox/requests/compute/create_api_client.rb +1 -1
  224. data/lib/fog/brightbox/requests/compute/create_application.rb +1 -1
  225. data/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +1 -1
  226. data/lib/fog/brightbox/requests/compute/create_firewall_policy.rb +1 -1
  227. data/lib/fog/brightbox/requests/compute/create_firewall_rule.rb +1 -1
  228. data/lib/fog/brightbox/requests/compute/create_image.rb +1 -1
  229. data/lib/fog/brightbox/requests/compute/create_load_balancer.rb +1 -1
  230. data/lib/fog/brightbox/requests/compute/create_server.rb +1 -1
  231. data/lib/fog/brightbox/requests/compute/create_server_group.rb +1 -1
  232. data/lib/fog/brightbox/requests/compute/destroy_api_client.rb +1 -1
  233. data/lib/fog/brightbox/requests/compute/destroy_application.rb +1 -1
  234. data/lib/fog/brightbox/requests/compute/destroy_cloud_ip.rb +1 -1
  235. data/lib/fog/brightbox/requests/compute/destroy_firewall_policy.rb +1 -1
  236. data/lib/fog/brightbox/requests/compute/destroy_firewall_rule.rb +1 -1
  237. data/lib/fog/brightbox/requests/compute/destroy_image.rb +1 -1
  238. data/lib/fog/brightbox/requests/compute/destroy_load_balancer.rb +1 -1
  239. data/lib/fog/brightbox/requests/compute/destroy_server.rb +1 -1
  240. data/lib/fog/brightbox/requests/compute/destroy_server_group.rb +1 -1
  241. data/lib/fog/brightbox/requests/compute/get_account.rb +1 -1
  242. data/lib/fog/brightbox/requests/compute/get_api_client.rb +1 -1
  243. data/lib/fog/brightbox/requests/compute/get_application.rb +1 -1
  244. data/lib/fog/brightbox/requests/compute/get_authenticated_user.rb +1 -1
  245. data/lib/fog/brightbox/requests/compute/get_cloud_ip.rb +1 -1
  246. data/lib/fog/brightbox/requests/compute/get_firewall_policy.rb +1 -1
  247. data/lib/fog/brightbox/requests/compute/get_firewall_rule.rb +1 -1
  248. data/lib/fog/brightbox/requests/compute/get_image.rb +1 -1
  249. data/lib/fog/brightbox/requests/compute/get_interface.rb +1 -1
  250. data/lib/fog/brightbox/requests/compute/get_load_balancer.rb +1 -1
  251. data/lib/fog/brightbox/requests/compute/get_scoped_account.rb +1 -1
  252. data/lib/fog/brightbox/requests/compute/get_server.rb +1 -1
  253. data/lib/fog/brightbox/requests/compute/get_server_group.rb +1 -1
  254. data/lib/fog/brightbox/requests/compute/get_server_type.rb +1 -1
  255. data/lib/fog/brightbox/requests/compute/get_user.rb +1 -1
  256. data/lib/fog/brightbox/requests/compute/get_zone.rb +1 -1
  257. data/lib/fog/brightbox/requests/compute/list_accounts.rb +1 -1
  258. data/lib/fog/brightbox/requests/compute/list_api_clients.rb +1 -1
  259. data/lib/fog/brightbox/requests/compute/list_applications.rb +1 -1
  260. data/lib/fog/brightbox/requests/compute/list_cloud_ips.rb +1 -1
  261. data/lib/fog/brightbox/requests/compute/list_firewall_policies.rb +1 -1
  262. data/lib/fog/brightbox/requests/compute/list_images.rb +1 -1
  263. data/lib/fog/brightbox/requests/compute/list_load_balancers.rb +1 -1
  264. data/lib/fog/brightbox/requests/compute/list_server_groups.rb +1 -1
  265. data/lib/fog/brightbox/requests/compute/list_server_types.rb +1 -1
  266. data/lib/fog/brightbox/requests/compute/list_servers.rb +1 -1
  267. data/lib/fog/brightbox/requests/compute/list_users.rb +1 -1
  268. data/lib/fog/brightbox/requests/compute/list_zones.rb +1 -1
  269. data/lib/fog/brightbox/requests/compute/map_cloud_ip.rb +1 -1
  270. data/lib/fog/brightbox/requests/compute/move_servers_server_group.rb +1 -1
  271. data/lib/fog/brightbox/requests/compute/remove_firewall_policy.rb +1 -1
  272. data/lib/fog/brightbox/requests/compute/remove_listeners_load_balancer.rb +1 -1
  273. data/lib/fog/brightbox/requests/compute/remove_nodes_load_balancer.rb +1 -1
  274. data/lib/fog/brightbox/requests/compute/remove_servers_server_group.rb +1 -1
  275. data/lib/fog/brightbox/requests/compute/reset_ftp_password_account.rb +1 -1
  276. data/lib/fog/brightbox/requests/compute/reset_ftp_password_scoped_account.rb +1 -1
  277. data/lib/fog/brightbox/requests/compute/reset_secret_api_client.rb +1 -1
  278. data/lib/fog/brightbox/requests/compute/reset_secret_application.rb +1 -1
  279. data/lib/fog/brightbox/requests/compute/shutdown_server.rb +1 -1
  280. data/lib/fog/brightbox/requests/compute/snapshot_server.rb +1 -1
  281. data/lib/fog/brightbox/requests/compute/start_server.rb +1 -1
  282. data/lib/fog/brightbox/requests/compute/stop_server.rb +1 -1
  283. data/lib/fog/brightbox/requests/compute/unmap_cloud_ip.rb +1 -1
  284. data/lib/fog/brightbox/requests/compute/update_account.rb +1 -1
  285. data/lib/fog/brightbox/requests/compute/update_api_client.rb +1 -1
  286. data/lib/fog/brightbox/requests/compute/update_application.rb +1 -1
  287. data/lib/fog/brightbox/requests/compute/update_cloud_ip.rb +1 -1
  288. data/lib/fog/brightbox/requests/compute/update_firewall_rule.rb +1 -1
  289. data/lib/fog/brightbox/requests/compute/update_image.rb +1 -1
  290. data/lib/fog/brightbox/requests/compute/update_load_balancer.rb +1 -1
  291. data/lib/fog/brightbox/requests/compute/update_scoped_account.rb +1 -1
  292. data/lib/fog/brightbox/requests/compute/update_server.rb +1 -1
  293. data/lib/fog/brightbox/requests/compute/update_server_group.rb +1 -1
  294. data/lib/fog/brightbox/requests/compute/update_user.rb +1 -1
  295. data/lib/fog/clodo/models/compute/images.rb +2 -2
  296. data/lib/fog/clodo/models/compute/server.rb +7 -7
  297. data/lib/fog/clodo/models/compute/servers.rb +2 -2
  298. data/lib/fog/cloudstack/models/compute/flavors.rb +2 -2
  299. data/lib/fog/cloudstack/models/compute/image.rb +2 -2
  300. data/lib/fog/cloudstack/models/compute/images.rb +2 -2
  301. data/lib/fog/cloudstack/models/compute/job.rb +2 -2
  302. data/lib/fog/cloudstack/models/compute/jobs.rb +2 -2
  303. data/lib/fog/cloudstack/models/compute/security_group.rb +3 -3
  304. data/lib/fog/cloudstack/models/compute/security_group_rule.rb +5 -5
  305. data/lib/fog/cloudstack/models/compute/security_group_rules.rb +1 -1
  306. data/lib/fog/cloudstack/models/compute/security_groups.rb +2 -2
  307. data/lib/fog/cloudstack/models/compute/server.rb +11 -11
  308. data/lib/fog/cloudstack/models/compute/servers.rb +2 -2
  309. data/lib/fog/cloudstack/models/compute/volume.rb +8 -8
  310. data/lib/fog/cloudstack/models/compute/volumes.rb +2 -2
  311. data/lib/fog/cloudstack/models/compute/zone.rb +1 -1
  312. data/lib/fog/cloudstack/models/compute/zones.rb +2 -2
  313. data/lib/fog/compute.rb +2 -1
  314. data/lib/fog/core/attributes.rb +20 -3
  315. data/lib/fog/core/collection.rb +17 -6
  316. data/lib/fog/core/deprecated_connection_accessors.rb +41 -0
  317. data/lib/fog/core/errors.rb +2 -0
  318. data/lib/fog/core/json.rb +4 -16
  319. data/lib/fog/core/logger.rb +2 -0
  320. data/lib/fog/core/model.rb +11 -1
  321. data/lib/fog/core/parser.rb +13 -0
  322. data/lib/fog/core/service.rb +1 -1
  323. data/lib/fog/core/wait_for.rb +1 -1
  324. data/lib/fog/dnsimple/models/dns/record.rb +4 -4
  325. data/lib/fog/dnsimple/models/dns/records.rb +2 -2
  326. data/lib/fog/dnsimple/models/dns/zone.rb +3 -3
  327. data/lib/fog/dnsimple/models/dns/zones.rb +2 -2
  328. data/lib/fog/dnsmadeeasy/models/dns/record.rb +5 -5
  329. data/lib/fog/dnsmadeeasy/models/dns/records.rb +2 -2
  330. data/lib/fog/dnsmadeeasy/models/dns/zone.rb +3 -3
  331. data/lib/fog/dnsmadeeasy/models/dns/zones.rb +2 -2
  332. data/lib/fog/dynect/models/dns/record.rb +3 -3
  333. data/lib/fog/dynect/models/dns/records.rb +2 -2
  334. data/lib/fog/dynect/models/dns/zone.rb +4 -4
  335. data/lib/fog/dynect/models/dns/zones.rb +2 -2
  336. data/lib/fog/ecloud.rb +19 -5
  337. data/lib/fog/ecloud/compute.rb +663 -351
  338. data/lib/fog/ecloud/generate_collection.rb +3 -3
  339. data/lib/fog/ecloud/models/compute/admin_organization.rb +14 -10
  340. data/lib/fog/ecloud/models/compute/admin_organizations.rb +1 -6
  341. data/lib/fog/ecloud/models/compute/api_keys.rb +2 -2
  342. data/lib/fog/ecloud/models/compute/association.rb +3 -3
  343. data/lib/fog/ecloud/models/compute/associations.rb +2 -2
  344. data/lib/fog/ecloud/models/compute/authentication_levels.rb +2 -2
  345. data/lib/fog/ecloud/models/compute/backup_internet_service.rb +7 -7
  346. data/lib/fog/ecloud/models/compute/backup_internet_services.rb +3 -3
  347. data/lib/fog/ecloud/models/compute/catalog.rb +2 -2
  348. data/lib/fog/ecloud/models/compute/catalog_configurations.rb +2 -2
  349. data/lib/fog/ecloud/models/compute/catalog_item.rb +1 -1
  350. data/lib/fog/ecloud/models/compute/compute_pool.rb +27 -15
  351. data/lib/fog/ecloud/models/compute/compute_pools.rb +2 -2
  352. data/lib/fog/ecloud/models/compute/cpu_usage_detail_summary.rb +2 -2
  353. data/lib/fog/ecloud/models/compute/detached_disk.rb +27 -0
  354. data/lib/fog/ecloud/models/compute/detached_disks.rb +31 -0
  355. data/lib/fog/ecloud/models/compute/environment.rb +27 -20
  356. data/lib/fog/ecloud/models/compute/environments.rb +2 -2
  357. data/lib/fog/ecloud/models/compute/firewall_acl.rb +1 -1
  358. data/lib/fog/ecloud/models/compute/firewall_acls.rb +2 -2
  359. data/lib/fog/ecloud/models/compute/group.rb +8 -6
  360. data/lib/fog/ecloud/models/compute/groups.rb +17 -6
  361. data/lib/fog/ecloud/models/compute/guest_processes.rb +2 -2
  362. data/lib/fog/ecloud/models/compute/hardware_configuration.rb +4 -4
  363. data/lib/fog/ecloud/models/compute/hardware_configurations.rb +2 -2
  364. data/lib/fog/ecloud/models/compute/internet_service.rb +35 -29
  365. data/lib/fog/ecloud/models/compute/internet_services.rb +11 -8
  366. data/lib/fog/ecloud/models/compute/ip_address.rb +17 -3
  367. data/lib/fog/ecloud/models/compute/ip_addresses.rb +7 -2
  368. data/lib/fog/ecloud/models/compute/layout.rb +1 -1
  369. data/lib/fog/ecloud/models/compute/layouts.rb +2 -2
  370. data/lib/fog/ecloud/models/compute/location.rb +1 -1
  371. data/lib/fog/ecloud/models/compute/locations.rb +2 -2
  372. data/lib/fog/ecloud/models/compute/login_banners.rb +2 -2
  373. data/lib/fog/ecloud/models/compute/memory_usage_detail_summary.rb +2 -2
  374. data/lib/fog/ecloud/models/compute/monitor.rb +4 -4
  375. data/lib/fog/ecloud/models/compute/monitors.rb +2 -2
  376. data/lib/fog/ecloud/models/compute/network.rb +22 -12
  377. data/lib/fog/ecloud/models/compute/networks.rb +9 -5
  378. data/lib/fog/ecloud/models/compute/node.rb +12 -6
  379. data/lib/fog/ecloud/models/compute/nodes.rb +7 -4
  380. data/lib/fog/ecloud/models/compute/operating_system_families.rb +2 -2
  381. data/lib/fog/ecloud/models/compute/operating_system_family.rb +1 -1
  382. data/lib/fog/ecloud/models/compute/operating_systems.rb +1 -1
  383. data/lib/fog/ecloud/models/compute/organization.rb +17 -17
  384. data/lib/fog/ecloud/models/compute/organizations.rb +3 -3
  385. data/lib/fog/ecloud/models/compute/password_complexity_rules.rb +2 -2
  386. data/lib/fog/ecloud/models/compute/physical_devices.rb +2 -2
  387. data/lib/fog/ecloud/models/compute/public_ip.rb +2 -2
  388. data/lib/fog/ecloud/models/compute/public_ips.rb +8 -5
  389. data/lib/fog/ecloud/models/compute/rnat.rb +2 -2
  390. data/lib/fog/ecloud/models/compute/rnats.rb +2 -2
  391. data/lib/fog/ecloud/models/compute/roles.rb +2 -2
  392. data/lib/fog/ecloud/models/compute/row.rb +10 -7
  393. data/lib/fog/ecloud/models/compute/rows.rb +9 -6
  394. data/lib/fog/ecloud/models/compute/server.rb +139 -93
  395. data/lib/fog/ecloud/models/compute/server_configuration_options.rb +2 -2
  396. data/lib/fog/ecloud/models/compute/servers.rb +18 -15
  397. data/lib/fog/ecloud/models/compute/ssh_key.rb +1 -1
  398. data/lib/fog/ecloud/models/compute/ssh_keys.rb +2 -2
  399. data/lib/fog/ecloud/models/compute/storage_usage_detail_summary.rb +2 -2
  400. data/lib/fog/ecloud/models/compute/support_tickets.rb +2 -2
  401. data/lib/fog/ecloud/models/compute/tags.rb +2 -2
  402. data/lib/fog/ecloud/models/compute/task.rb +3 -0
  403. data/lib/fog/ecloud/models/compute/tasks.rb +3 -3
  404. data/lib/fog/ecloud/models/compute/template.rb +8 -9
  405. data/lib/fog/ecloud/models/compute/templates.rb +2 -2
  406. data/lib/fog/ecloud/models/compute/trusted_network_group.rb +5 -5
  407. data/lib/fog/ecloud/models/compute/trusted_network_groups.rb +2 -2
  408. data/lib/fog/ecloud/models/compute/user.rb +2 -2
  409. data/lib/fog/ecloud/models/compute/users.rb +2 -2
  410. data/lib/fog/ecloud/models/compute/virtual_machine_assigned_ip.rb +32 -0
  411. data/lib/fog/ecloud/models/compute/virtual_machine_assigned_ips.rb +27 -0
  412. data/lib/fog/ecloud/requests/compute/admin_edit_authentication_levels.rb +1 -2
  413. data/lib/fog/ecloud/requests/compute/get_admin_organization.rb +14 -0
  414. data/lib/fog/ecloud/requests/compute/get_compute_pool.rb +11 -0
  415. data/lib/fog/ecloud/requests/compute/get_compute_pools.rb +21 -0
  416. data/lib/fog/ecloud/requests/compute/get_detached_disk.rb +21 -0
  417. data/lib/fog/ecloud/requests/compute/get_detached_disks.rb +33 -0
  418. data/lib/fog/ecloud/requests/compute/get_environment.rb +21 -0
  419. data/lib/fog/ecloud/requests/compute/get_group.rb +8 -1
  420. data/lib/fog/ecloud/requests/compute/get_groups.rb +8 -1
  421. data/lib/fog/ecloud/requests/compute/get_hardware_configuration.rb +19 -0
  422. data/lib/fog/ecloud/requests/compute/get_hardware_configurations.rb +4 -0
  423. data/lib/fog/ecloud/requests/compute/get_internet_service.rb +12 -0
  424. data/lib/fog/ecloud/requests/compute/get_internet_services.rb +8 -0
  425. data/lib/fog/ecloud/requests/compute/get_ip_address.rb +11 -0
  426. data/lib/fog/ecloud/requests/compute/get_layout.rb +8 -1
  427. data/lib/fog/ecloud/requests/compute/get_layouts.rb +8 -1
  428. data/lib/fog/ecloud/requests/compute/get_network.rb +11 -0
  429. data/lib/fog/ecloud/requests/compute/get_networks.rb +20 -0
  430. data/lib/fog/ecloud/requests/compute/get_node.rb +11 -0
  431. data/lib/fog/ecloud/requests/compute/get_nodes.rb +9 -0
  432. data/lib/fog/ecloud/requests/compute/get_operating_system.rb +14 -0
  433. data/lib/fog/ecloud/requests/compute/get_operating_system_families.rb +20 -0
  434. data/lib/fog/ecloud/requests/compute/get_organization.rb +14 -0
  435. data/lib/fog/ecloud/requests/compute/get_organizations.rb +14 -2
  436. data/lib/fog/ecloud/requests/compute/get_public_ip.rb +11 -1
  437. data/lib/fog/ecloud/requests/compute/get_public_ips.rb +22 -0
  438. data/lib/fog/ecloud/requests/compute/get_row.rb +8 -1
  439. data/lib/fog/ecloud/requests/compute/get_rows.rb +2 -1
  440. data/lib/fog/ecloud/requests/compute/get_server.rb +11 -0
  441. data/lib/fog/ecloud/requests/compute/get_servers.rb +32 -1
  442. data/lib/fog/ecloud/requests/compute/get_ssh_key.rb +11 -0
  443. data/lib/fog/ecloud/requests/compute/get_ssh_keys.rb +20 -0
  444. data/lib/fog/ecloud/requests/compute/get_task.rb +4 -2
  445. data/lib/fog/ecloud/requests/compute/get_template.rb +11 -0
  446. data/lib/fog/ecloud/requests/compute/get_templates.rb +38 -0
  447. data/lib/fog/ecloud/requests/compute/get_virtual_machine_assigned_ips.rb +44 -0
  448. data/lib/fog/ecloud/requests/compute/groups_delete.rb +16 -1
  449. data/lib/fog/ecloud/requests/compute/internet_service_create.rb +36 -1
  450. data/lib/fog/ecloud/requests/compute/internet_service_delete.rb +23 -0
  451. data/lib/fog/ecloud/requests/compute/node_service_create.rb +49 -1
  452. data/lib/fog/ecloud/requests/compute/node_service_delete.rb +24 -0
  453. data/lib/fog/ecloud/requests/compute/rows_delete.rb +11 -1
  454. data/lib/fog/ecloud/requests/compute/virtual_machine_attach_disk.rb +62 -0
  455. data/lib/fog/ecloud/requests/compute/virtual_machine_create_from_template.rb +136 -16
  456. data/lib/fog/ecloud/requests/compute/virtual_machine_delete.rb +36 -1
  457. data/lib/fog/ecloud/requests/compute/virtual_machine_detach_disk.rb +71 -0
  458. data/lib/fog/ecloud/requests/compute/virtual_machine_edit_assigned_ips.rb +82 -0
  459. data/lib/fog/ecloud/requests/compute/virtual_machine_edit_hardware_configuration.rb +27 -3
  460. data/lib/fog/ecloud/requests/compute/virtual_machine_import.rb +120 -6
  461. data/lib/fog/glesys/models/compute/ip.rb +7 -7
  462. data/lib/fog/glesys/models/compute/ips.rb +7 -7
  463. data/lib/fog/glesys/models/compute/server.rb +6 -6
  464. data/lib/fog/glesys/models/compute/servers.rb +4 -4
  465. data/lib/fog/glesys/models/compute/template.rb +1 -1
  466. data/lib/fog/glesys/models/compute/templates.rb +2 -2
  467. data/lib/fog/go_grid/models/compute/image.rb +3 -3
  468. data/lib/fog/go_grid/models/compute/images.rb +2 -2
  469. data/lib/fog/go_grid/models/compute/password.rb +5 -5
  470. data/lib/fog/go_grid/models/compute/passwords.rb +3 -3
  471. data/lib/fog/go_grid/models/compute/server.rb +4 -4
  472. data/lib/fog/go_grid/models/compute/servers.rb +2 -2
  473. data/lib/fog/google/models/storage/directories.rb +2 -2
  474. data/lib/fog/google/models/storage/directory.rb +4 -4
  475. data/lib/fog/google/models/storage/file.rb +5 -5
  476. data/lib/fog/google/models/storage/files.rb +4 -4
  477. data/lib/fog/hp.rb +6 -3
  478. data/lib/fog/hp/models/compute/address.rb +8 -8
  479. data/lib/fog/hp/models/compute/addresses.rb +2 -2
  480. data/lib/fog/hp/models/compute/flavors.rb +2 -2
  481. data/lib/fog/hp/models/compute/image.rb +2 -2
  482. data/lib/fog/hp/models/compute/images.rb +2 -2
  483. data/lib/fog/hp/models/compute/key_pair.rb +3 -3
  484. data/lib/fog/hp/models/compute/key_pairs.rb +2 -2
  485. data/lib/fog/hp/models/compute/security_group.rb +4 -4
  486. data/lib/fog/hp/models/compute/security_groups.rb +3 -3
  487. data/lib/fog/hp/models/compute/server.rb +15 -15
  488. data/lib/fog/hp/models/compute/servers.rb +2 -2
  489. data/lib/fog/hp/models/storage/directories.rb +3 -3
  490. data/lib/fog/hp/models/storage/directory.rb +18 -18
  491. data/lib/fog/hp/models/storage/file.rb +4 -4
  492. data/lib/fog/hp/models/storage/files.rb +2 -2
  493. data/lib/fog/ibm/models/compute/address.rb +2 -2
  494. data/lib/fog/ibm/models/compute/addresses.rb +2 -2
  495. data/lib/fog/ibm/models/compute/image.rb +3 -3
  496. data/lib/fog/ibm/models/compute/images.rb +2 -2
  497. data/lib/fog/ibm/models/compute/key.rb +2 -2
  498. data/lib/fog/ibm/models/compute/keys.rb +3 -3
  499. data/lib/fog/ibm/models/compute/locations.rb +2 -2
  500. data/lib/fog/ibm/models/compute/server.rb +12 -12
  501. data/lib/fog/ibm/models/compute/servers.rb +2 -2
  502. data/lib/fog/ibm/models/compute/vlans.rb +2 -2
  503. data/lib/fog/ibm/models/storage/offerings.rb +1 -1
  504. data/lib/fog/ibm/models/storage/volume.rb +5 -5
  505. data/lib/fog/ibm/models/storage/volumes.rb +2 -2
  506. data/lib/fog/identity.rb +3 -0
  507. data/lib/fog/joyent/models/compute/flavors.rb +2 -2
  508. data/lib/fog/joyent/models/compute/images.rb +2 -2
  509. data/lib/fog/joyent/models/compute/key.rb +1 -1
  510. data/lib/fog/joyent/models/compute/keys.rb +3 -3
  511. data/lib/fog/joyent/models/compute/server.rb +13 -13
  512. data/lib/fog/joyent/models/compute/servers.rb +3 -3
  513. data/lib/fog/joyent/models/compute/snapshot.rb +4 -4
  514. data/lib/fog/joyent/models/compute/snapshots.rb +3 -3
  515. data/lib/fog/libvirt/compute.rb +6 -1
  516. data/lib/fog/libvirt/models/compute/interface.rb +1 -1
  517. data/lib/fog/libvirt/models/compute/interfaces.rb +1 -1
  518. data/lib/fog/libvirt/models/compute/network.rb +1 -1
  519. data/lib/fog/libvirt/models/compute/networks.rb +1 -1
  520. data/lib/fog/libvirt/models/compute/nic.rb +2 -2
  521. data/lib/fog/libvirt/models/compute/nodes.rb +1 -1
  522. data/lib/fog/libvirt/models/compute/pool.rb +7 -7
  523. data/lib/fog/libvirt/models/compute/pools.rb +1 -1
  524. data/lib/fog/libvirt/models/compute/server.rb +28 -28
  525. data/lib/fog/libvirt/models/compute/servers.rb +2 -2
  526. data/lib/fog/libvirt/models/compute/volume.rb +5 -5
  527. data/lib/fog/libvirt/models/compute/volumes.rb +1 -1
  528. data/lib/fog/linode/models/compute/data_centers.rb +2 -2
  529. data/lib/fog/linode/models/compute/disk.rb +7 -7
  530. data/lib/fog/linode/models/compute/disks.rb +2 -2
  531. data/lib/fog/linode/models/compute/flavors.rb +2 -2
  532. data/lib/fog/linode/models/compute/images.rb +2 -2
  533. data/lib/fog/linode/models/compute/ip.rb +3 -3
  534. data/lib/fog/linode/models/compute/ips.rb +2 -2
  535. data/lib/fog/linode/models/compute/kernels.rb +2 -2
  536. data/lib/fog/linode/models/compute/server.rb +13 -13
  537. data/lib/fog/linode/models/compute/servers.rb +2 -2
  538. data/lib/fog/linode/models/compute/stack_scripts.rb +3 -3
  539. data/lib/fog/linode/models/dns/record.rb +6 -6
  540. data/lib/fog/linode/models/dns/records.rb +2 -2
  541. data/lib/fog/linode/models/dns/zone.rb +6 -6
  542. data/lib/fog/linode/models/dns/zones.rb +2 -2
  543. data/lib/fog/local/models/storage/directories.rb +3 -3
  544. data/lib/fog/local/models/storage/directory.rb +2 -2
  545. data/lib/fog/local/models/storage/file.rb +6 -6
  546. data/lib/fog/local/models/storage/files.rb +2 -2
  547. data/lib/fog/ninefold/models/compute/address.rb +5 -5
  548. data/lib/fog/ninefold/models/compute/addresses.rb +2 -2
  549. data/lib/fog/ninefold/models/compute/flavors.rb +2 -2
  550. data/lib/fog/ninefold/models/compute/images.rb +2 -2
  551. data/lib/fog/ninefold/models/compute/ip_forwarding_rule.rb +3 -3
  552. data/lib/fog/ninefold/models/compute/ip_forwarding_rules.rb +2 -2
  553. data/lib/fog/ninefold/models/compute/server.rb +9 -9
  554. data/lib/fog/ninefold/models/compute/servers.rb +2 -2
  555. data/lib/fog/openstack.rb +40 -14
  556. data/lib/fog/openstack/README.identity.md +69 -0
  557. data/lib/fog/openstack/compute.rb +49 -18
  558. data/lib/fog/openstack/identity.rb +33 -20
  559. data/lib/fog/openstack/image.rb +10 -4
  560. data/lib/fog/openstack/models/compute/address.rb +8 -8
  561. data/lib/fog/openstack/models/compute/addresses.rb +3 -3
  562. data/lib/fog/openstack/models/compute/flavor.rb +4 -3
  563. data/lib/fog/openstack/models/compute/flavors.rb +2 -2
  564. data/lib/fog/openstack/models/compute/host.rb +3 -2
  565. data/lib/fog/openstack/models/compute/hosts.rb +2 -2
  566. data/lib/fog/openstack/models/compute/image.rb +4 -3
  567. data/lib/fog/openstack/models/compute/images.rb +2 -2
  568. data/lib/fog/openstack/models/compute/key_pair.rb +3 -3
  569. data/lib/fog/openstack/models/compute/key_pairs.rb +1 -1
  570. data/lib/fog/openstack/models/compute/metadata.rb +4 -4
  571. data/lib/fog/openstack/models/compute/metadatum.rb +2 -2
  572. data/lib/fog/openstack/models/compute/security_group.rb +4 -4
  573. data/lib/fog/openstack/models/compute/security_groups.rb +2 -2
  574. data/lib/fog/openstack/models/compute/server.rb +33 -20
  575. data/lib/fog/openstack/models/compute/servers.rb +2 -2
  576. data/lib/fog/openstack/models/compute/snapshot.rb +4 -3
  577. data/lib/fog/openstack/models/compute/snapshots.rb +2 -2
  578. data/lib/fog/openstack/models/compute/tenant.rb +1 -1
  579. data/lib/fog/openstack/models/compute/tenants.rb +7 -3
  580. data/lib/fog/openstack/models/compute/volume.rb +6 -5
  581. data/lib/fog/openstack/models/compute/volumes.rb +2 -2
  582. data/lib/fog/openstack/models/identity/ec2_credential.rb +44 -0
  583. data/lib/fog/openstack/models/identity/ec2_credentials.rb +53 -0
  584. data/lib/fog/openstack/models/identity/role.rb +4 -4
  585. data/lib/fog/openstack/models/identity/roles.rb +2 -2
  586. data/lib/fog/openstack/models/identity/tenant.rb +7 -7
  587. data/lib/fog/openstack/models/identity/tenants.rb +3 -3
  588. data/lib/fog/openstack/models/identity/user.rb +12 -6
  589. data/lib/fog/openstack/models/identity/users.rb +3 -3
  590. data/lib/fog/openstack/models/image/image.rb +10 -9
  591. data/lib/fog/openstack/models/image/images.rb +6 -6
  592. data/lib/fog/openstack/models/network/floating_ip.rb +52 -0
  593. data/lib/fog/openstack/models/network/floating_ips.rb +34 -0
  594. data/lib/fog/openstack/models/network/network.rb +6 -5
  595. data/lib/fog/openstack/models/network/networks.rb +3 -3
  596. data/lib/fog/openstack/models/network/port.rb +6 -5
  597. data/lib/fog/openstack/models/network/ports.rb +3 -3
  598. data/lib/fog/openstack/models/network/subnet.rb +6 -5
  599. data/lib/fog/openstack/models/network/subnets.rb +3 -3
  600. data/lib/fog/openstack/models/volume/volume.rb +4 -3
  601. data/lib/fog/openstack/models/volume/volumes.rb +2 -2
  602. data/lib/fog/openstack/network.rb +16 -3
  603. data/lib/fog/openstack/requests/compute/create_security_group.rb +2 -1
  604. data/lib/fog/openstack/requests/compute/create_security_group_rule.rb +1 -0
  605. data/lib/fog/openstack/requests/compute/create_server.rb +54 -7
  606. data/lib/fog/openstack/requests/compute/delete_security_group.rb +2 -0
  607. data/lib/fog/openstack/requests/compute/list_security_groups.rb +17 -41
  608. data/lib/fog/openstack/requests/identity/add_user_to_tenant.rb +7 -2
  609. data/lib/fog/openstack/requests/identity/create_ec2_credential.rb +58 -0
  610. data/lib/fog/openstack/requests/identity/create_role.rb +1 -1
  611. data/lib/fog/openstack/requests/identity/create_tenant.rb +1 -3
  612. data/lib/fog/openstack/requests/identity/delete_ec2_credential.rb +44 -0
  613. data/lib/fog/openstack/requests/identity/get_ec2_credential.rb +49 -0
  614. data/lib/fog/openstack/requests/identity/get_user_by_name.rb +8 -0
  615. data/lib/fog/openstack/requests/identity/list_ec2_credentials.rb +44 -0
  616. data/lib/fog/openstack/requests/identity/list_roles_for_user_on_tenant.rb +7 -1
  617. data/lib/fog/openstack/requests/identity/list_users.rb +10 -1
  618. data/lib/fog/openstack/requests/identity/update_tenant.rb +1 -3
  619. data/lib/fog/openstack/requests/image/create_image.rb +3 -1
  620. data/lib/fog/openstack/requests/network/associate_floating_ip.rb +49 -0
  621. data/lib/fog/openstack/requests/network/create_floating_ip.rb +50 -0
  622. data/lib/fog/openstack/requests/network/delete_floating_ip.rb +30 -0
  623. data/lib/fog/openstack/requests/network/disassociate_floating_ip.rb +49 -0
  624. data/lib/fog/openstack/requests/network/get_floating_ip.rb +42 -0
  625. data/lib/fog/openstack/requests/network/list_floating_ips.rb +27 -0
  626. data/lib/fog/openstack/volume.rb +4 -2
  627. data/lib/fog/ovirt/models/compute/cluster.rb +1 -1
  628. data/lib/fog/ovirt/models/compute/clusters.rb +2 -2
  629. data/lib/fog/ovirt/models/compute/interfaces.rb +3 -3
  630. data/lib/fog/ovirt/models/compute/server.rb +15 -15
  631. data/lib/fog/ovirt/models/compute/servers.rb +2 -2
  632. data/lib/fog/ovirt/models/compute/template.rb +5 -5
  633. data/lib/fog/ovirt/models/compute/templates.rb +2 -2
  634. data/lib/fog/ovirt/models/compute/volumes.rb +3 -3
  635. data/lib/fog/rackspace.rb +22 -11
  636. data/lib/fog/rackspace/block_storage.rb +19 -0
  637. data/lib/fog/rackspace/compute_v2.rb +29 -0
  638. data/lib/fog/rackspace/docs/cloud_servers.md +65 -0
  639. data/lib/fog/rackspace/docs/getting_started.md +76 -0
  640. data/lib/fog/rackspace/load_balancers.rb +2 -0
  641. data/lib/fog/rackspace/mock_data.rb +144 -0
  642. data/lib/fog/rackspace/models/block_storage/snapshot.rb +3 -2
  643. data/lib/fog/rackspace/models/block_storage/snapshots.rb +2 -2
  644. data/lib/fog/rackspace/models/block_storage/volume.rb +9 -3
  645. data/lib/fog/rackspace/models/block_storage/volume_types.rb +3 -3
  646. data/lib/fog/rackspace/models/block_storage/volumes.rb +2 -2
  647. data/lib/fog/rackspace/models/compute/flavors.rb +2 -2
  648. data/lib/fog/rackspace/models/compute/image.rb +3 -3
  649. data/lib/fog/rackspace/models/compute/images.rb +2 -2
  650. data/lib/fog/rackspace/models/compute/server.rb +7 -7
  651. data/lib/fog/rackspace/models/compute/servers.rb +2 -2
  652. data/lib/fog/rackspace/models/compute_v2/attachment.rb +13 -9
  653. data/lib/fog/rackspace/models/compute_v2/attachments.rb +2 -2
  654. data/lib/fog/rackspace/models/compute_v2/flavors.rb +2 -2
  655. data/lib/fog/rackspace/models/compute_v2/image.rb +36 -1
  656. data/lib/fog/rackspace/models/compute_v2/images.rb +2 -2
  657. data/lib/fog/rackspace/models/compute_v2/meta_parent.rb +33 -0
  658. data/lib/fog/rackspace/models/compute_v2/metadata.rb +77 -0
  659. data/lib/fog/rackspace/models/compute_v2/metadatum.rb +29 -0
  660. data/lib/fog/rackspace/models/compute_v2/server.rb +75 -21
  661. data/lib/fog/rackspace/models/compute_v2/servers.rb +2 -2
  662. data/lib/fog/rackspace/models/databases/database.rb +2 -2
  663. data/lib/fog/rackspace/models/databases/databases.rb +1 -1
  664. data/lib/fog/rackspace/models/databases/flavors.rb +2 -2
  665. data/lib/fog/rackspace/models/databases/instance.rb +10 -10
  666. data/lib/fog/rackspace/models/databases/instances.rb +2 -2
  667. data/lib/fog/rackspace/models/databases/user.rb +2 -2
  668. data/lib/fog/rackspace/models/databases/users.rb +1 -1
  669. data/lib/fog/rackspace/models/dns/callback.rb +1 -1
  670. data/lib/fog/rackspace/models/dns/record.rb +13 -8
  671. data/lib/fog/rackspace/models/dns/records.rb +2 -2
  672. data/lib/fog/rackspace/models/dns/zone.rb +5 -5
  673. data/lib/fog/rackspace/models/dns/zones.rb +2 -2
  674. data/lib/fog/rackspace/models/identity/credentials.rb +1 -1
  675. data/lib/fog/rackspace/models/identity/roles.rb +1 -1
  676. data/lib/fog/rackspace/models/identity/tenants.rb +1 -1
  677. data/lib/fog/rackspace/models/identity/user.rb +6 -6
  678. data/lib/fog/rackspace/models/identity/users.rb +3 -3
  679. data/lib/fog/rackspace/models/load_balancers/access_rule.rb +4 -4
  680. data/lib/fog/rackspace/models/load_balancers/access_rules.rb +1 -1
  681. data/lib/fog/rackspace/models/load_balancers/load_balancer.rb +45 -27
  682. data/lib/fog/rackspace/models/load_balancers/load_balancers.rb +2 -2
  683. data/lib/fog/rackspace/models/load_balancers/node.rb +4 -4
  684. data/lib/fog/rackspace/models/load_balancers/nodes.rb +2 -2
  685. data/lib/fog/rackspace/models/load_balancers/virtual_ip.rb +3 -3
  686. data/lib/fog/rackspace/models/load_balancers/virtual_ips.rb +1 -1
  687. data/lib/fog/rackspace/models/storage/directories.rb +2 -2
  688. data/lib/fog/rackspace/models/storage/directory.rb +12 -12
  689. data/lib/fog/rackspace/models/storage/file.rb +6 -6
  690. data/lib/fog/rackspace/models/storage/files.rb +2 -2
  691. data/lib/fog/rackspace/requests/block_storage/create_snapshot.rb +28 -0
  692. data/lib/fog/rackspace/requests/block_storage/create_volume.rb +37 -0
  693. data/lib/fog/rackspace/requests/block_storage/delete_snapshot.rb +7 -0
  694. data/lib/fog/rackspace/requests/block_storage/delete_volume.rb +17 -0
  695. data/lib/fog/rackspace/requests/block_storage/get_snapshot.rb +11 -0
  696. data/lib/fog/rackspace/requests/block_storage/get_volume.rb +17 -0
  697. data/lib/fog/rackspace/requests/block_storage/get_volume_type.rb +13 -0
  698. data/lib/fog/rackspace/requests/block_storage/list_snapshots.rb +8 -0
  699. data/lib/fog/rackspace/requests/block_storage/list_volume_types.rb +7 -0
  700. data/lib/fog/rackspace/requests/block_storage/list_volumes.rb +7 -0
  701. data/lib/fog/rackspace/requests/compute_v2/attach_volume.rb +41 -2
  702. data/lib/fog/rackspace/requests/compute_v2/change_server_password.rb +6 -0
  703. data/lib/fog/rackspace/requests/compute_v2/confirm_resize_server.rb +8 -0
  704. data/lib/fog/rackspace/requests/compute_v2/create_image.rb +89 -0
  705. data/lib/fog/rackspace/requests/compute_v2/create_server.rb +102 -0
  706. data/lib/fog/rackspace/requests/compute_v2/delete_attachment.rb +15 -0
  707. data/lib/fog/rackspace/requests/compute_v2/delete_image.rb +31 -0
  708. data/lib/fog/rackspace/requests/compute_v2/delete_metadata_item.rb +26 -0
  709. data/lib/fog/rackspace/requests/compute_v2/delete_server.rb +12 -0
  710. data/lib/fog/rackspace/requests/compute_v2/get_attachment.rb +8 -0
  711. data/lib/fog/rackspace/requests/compute_v2/get_flavor.rb +11 -0
  712. data/lib/fog/rackspace/requests/compute_v2/get_image.rb +11 -0
  713. data/lib/fog/rackspace/requests/compute_v2/get_metadata_item.rb +26 -0
  714. data/lib/fog/rackspace/requests/compute_v2/get_server.rb +13 -0
  715. data/lib/fog/rackspace/requests/compute_v2/list_addresses.rb +34 -0
  716. data/lib/fog/rackspace/requests/compute_v2/list_addresses_by_network.rb +36 -0
  717. data/lib/fog/rackspace/requests/compute_v2/list_attachments.rb +7 -0
  718. data/lib/fog/rackspace/requests/compute_v2/list_flavors.rb +7 -0
  719. data/lib/fog/rackspace/requests/compute_v2/list_images.rb +7 -0
  720. data/lib/fog/rackspace/requests/compute_v2/list_metadata.rb +26 -0
  721. data/lib/fog/rackspace/requests/compute_v2/list_servers.rb +7 -0
  722. data/lib/fog/rackspace/requests/compute_v2/reboot_server.rb +14 -0
  723. data/lib/fog/rackspace/requests/compute_v2/rebuild_server.rb +13 -4
  724. data/lib/fog/rackspace/requests/compute_v2/resize_server.rb +8 -0
  725. data/lib/fog/rackspace/requests/compute_v2/revert_resize_server.rb +8 -0
  726. data/lib/fog/rackspace/requests/compute_v2/set_metadata.rb +28 -0
  727. data/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb +27 -0
  728. data/lib/fog/rackspace/requests/compute_v2/update_metadata.rb +27 -0
  729. data/lib/fog/rackspace/requests/compute_v2/update_server.rb +17 -7
  730. data/lib/fog/rackspace/requests/dns/add_records.rb +5 -1
  731. data/lib/fog/rackspace/requests/load_balancers/get_content_caching.rb +15 -0
  732. data/lib/fog/rackspace/requests/load_balancers/set_content_caching.rb +21 -0
  733. data/lib/fog/rackspace/requests/load_balancers/set_ssl_termination.rb +3 -3
  734. data/lib/fog/rackspace/requests/storage/post_set_meta_temp_url_key.rb +1 -1
  735. data/lib/fog/serverlove/models/compute/image.rb +11 -11
  736. data/lib/fog/serverlove/models/compute/images.rb +2 -2
  737. data/lib/fog/serverlove/models/compute/server.rb +10 -10
  738. data/lib/fog/serverlove/models/compute/servers.rb +2 -2
  739. data/lib/fog/storm_on_demand/models/compute/balancer.rb +7 -7
  740. data/lib/fog/storm_on_demand/models/compute/balancers.rb +1 -1
  741. data/lib/fog/storm_on_demand/models/compute/configs.rb +1 -1
  742. data/lib/fog/storm_on_demand/models/compute/images.rb +1 -1
  743. data/lib/fog/storm_on_demand/models/compute/private_ips.rb +2 -2
  744. data/lib/fog/storm_on_demand/models/compute/server.rb +5 -5
  745. data/lib/fog/storm_on_demand/models/compute/servers.rb +2 -2
  746. data/lib/fog/storm_on_demand/models/compute/stats.rb +1 -1
  747. data/lib/fog/storm_on_demand/models/compute/templates.rb +1 -1
  748. data/lib/fog/terremark/models/shared/address.rb +1 -1
  749. data/lib/fog/terremark/models/shared/addresses.rb +5 -5
  750. data/lib/fog/terremark/models/shared/images.rb +5 -5
  751. data/lib/fog/terremark/models/shared/internetservice.rb +6 -6
  752. data/lib/fog/terremark/models/shared/internetservices.rb +5 -5
  753. data/lib/fog/terremark/models/shared/network.rb +1 -1
  754. data/lib/fog/terremark/models/shared/networks.rb +6 -6
  755. data/lib/fog/terremark/models/shared/nodeservice.rb +3 -3
  756. data/lib/fog/terremark/models/shared/nodeservices.rb +4 -4
  757. data/lib/fog/terremark/models/shared/server.rb +17 -17
  758. data/lib/fog/terremark/models/shared/servers.rb +6 -6
  759. data/lib/fog/terremark/models/shared/task.rb +4 -4
  760. data/lib/fog/terremark/models/shared/tasks.rb +5 -5
  761. data/lib/fog/terremark/models/shared/vdc.rb +4 -4
  762. data/lib/fog/terremark/models/shared/vdcs.rb +5 -5
  763. data/lib/fog/terremark/parser.rb +1 -1
  764. data/lib/fog/terremark/shared.rb +1 -1
  765. data/lib/fog/vcloud/compute.rb +4 -4
  766. data/lib/fog/vcloud/models/compute/catalog.rb +1 -1
  767. data/lib/fog/vcloud/models/compute/catalog_item.rb +1 -1
  768. data/lib/fog/vcloud/models/compute/catalog_items.rb +4 -4
  769. data/lib/fog/vcloud/models/compute/catalogs.rb +3 -3
  770. data/lib/fog/vcloud/models/compute/ip.rb +1 -1
  771. data/lib/fog/vcloud/models/compute/ips.rb +3 -3
  772. data/lib/fog/vcloud/models/compute/network.rb +1 -1
  773. data/lib/fog/vcloud/models/compute/networks.rb +6 -6
  774. data/lib/fog/vcloud/models/compute/organization.rb +4 -4
  775. data/lib/fog/vcloud/models/compute/organizations.rb +4 -4
  776. data/lib/fog/vcloud/models/compute/server.rb +13 -13
  777. data/lib/fog/vcloud/models/compute/servers.rb +4 -4
  778. data/lib/fog/vcloud/models/compute/tasks.rb +3 -3
  779. data/lib/fog/vcloud/models/compute/vapp.rb +2 -2
  780. data/lib/fog/vcloud/models/compute/vapps.rb +2 -2
  781. data/lib/fog/vcloud/models/compute/vdc.rb +2 -2
  782. data/lib/fog/vcloud/models/compute/vdcs.rb +3 -3
  783. data/lib/fog/version.rb +1 -3
  784. data/lib/fog/virtual_box/compute.rb +11 -5
  785. data/lib/fog/virtual_box/models/compute/medium.rb +2 -2
  786. data/lib/fog/virtual_box/models/compute/mediums.rb +4 -4
  787. data/lib/fog/virtual_box/models/compute/nat_engine.rb +2 -2
  788. data/lib/fog/virtual_box/models/compute/network_adapter.rb +1 -1
  789. data/lib/fog/virtual_box/models/compute/network_adapters.rb +1 -1
  790. data/lib/fog/virtual_box/models/compute/server.rb +5 -5
  791. data/lib/fog/virtual_box/models/compute/servers.rb +2 -2
  792. data/lib/fog/vmfusion/compute.rb +6 -1
  793. data/lib/fog/vmfusion/models/compute/server.rb +1 -1
  794. data/lib/fog/voxel/models/compute/images.rb +2 -2
  795. data/lib/fog/voxel/models/compute/server.rb +6 -6
  796. data/lib/fog/voxel/models/compute/servers.rb +2 -2
  797. data/lib/fog/vsphere/compute.rb +4 -1
  798. data/lib/fog/vsphere/models/compute/cluster.rb +2 -2
  799. data/lib/fog/vsphere/models/compute/clusters.rb +2 -2
  800. data/lib/fog/vsphere/models/compute/datacenter.rb +8 -4
  801. data/lib/fog/vsphere/models/compute/datacenters.rb +3 -3
  802. data/lib/fog/vsphere/models/compute/datastores.rb +2 -2
  803. data/lib/fog/vsphere/models/compute/folder.rb +1 -1
  804. data/lib/fog/vsphere/models/compute/folders.rb +2 -2
  805. data/lib/fog/vsphere/models/compute/interfaces.rb +3 -3
  806. data/lib/fog/vsphere/models/compute/networks.rb +2 -2
  807. data/lib/fog/vsphere/models/compute/resource_pools.rb +3 -3
  808. data/lib/fog/vsphere/models/compute/server.rb +37 -26
  809. data/lib/fog/vsphere/models/compute/servers.rb +2 -2
  810. data/lib/fog/vsphere/models/compute/templates.rb +2 -2
  811. data/lib/fog/vsphere/models/compute/volumes.rb +3 -3
  812. data/lib/fog/vsphere/requests/compute/create_folder.rb +22 -0
  813. data/lib/fog/vsphere/requests/compute/create_vm.rb +2 -2
  814. data/lib/fog/vsphere/requests/compute/get_folder.rb +1 -1
  815. data/lib/fog/vsphere/requests/compute/get_network.rb +6 -1
  816. data/lib/fog/vsphere/requests/compute/get_virtual_machine.rb +1 -1
  817. data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +9 -3
  818. data/lib/fog/vsphere/requests/compute/vm_clone.rb +148 -64
  819. data/lib/fog/xenserver.rb +26 -2
  820. data/lib/fog/xenserver/CHANGELOG.md +71 -0
  821. data/lib/fog/xenserver/compute.rb +9 -0
  822. data/lib/fog/xenserver/examples/README.md +11 -0
  823. data/lib/fog/xenserver/examples/chage_default_storage_repository.md +99 -0
  824. data/lib/fog/xenserver/examples/creating_servers.md +168 -0
  825. data/lib/fog/xenserver/examples/getting_started.md +163 -0
  826. data/lib/fog/xenserver/examples/storage_repositories.md +94 -0
  827. data/lib/fog/xenserver/models/compute/host.rb +87 -7
  828. data/lib/fog/xenserver/models/compute/host_cpu.rb +37 -0
  829. data/lib/fog/xenserver/models/compute/host_metrics.rb +29 -0
  830. data/lib/fog/xenserver/models/compute/hosts.rb +8 -8
  831. data/lib/fog/xenserver/models/compute/network.rb +11 -11
  832. data/lib/fog/xenserver/models/compute/networks.rb +3 -3
  833. data/lib/fog/xenserver/models/compute/pbd.rb +11 -6
  834. data/lib/fog/xenserver/models/compute/pbds.rb +3 -3
  835. data/lib/fog/xenserver/models/compute/pif.rb +9 -9
  836. data/lib/fog/xenserver/models/compute/pifs.rb +3 -3
  837. data/lib/fog/xenserver/models/compute/pool.rb +30 -8
  838. data/lib/fog/xenserver/models/compute/pools.rb +3 -3
  839. data/lib/fog/xenserver/models/compute/server.rb +29 -29
  840. data/lib/fog/xenserver/models/compute/servers.rb +8 -8
  841. data/lib/fog/xenserver/models/compute/storage_repositories.rb +2 -2
  842. data/lib/fog/xenserver/models/compute/storage_repository.rb +52 -9
  843. data/lib/fog/xenserver/models/compute/vbd.rb +16 -16
  844. data/lib/fog/xenserver/models/compute/vbds.rb +3 -3
  845. data/lib/fog/xenserver/models/compute/vdi.rb +17 -17
  846. data/lib/fog/xenserver/models/compute/vdis.rb +3 -3
  847. data/lib/fog/xenserver/models/compute/vif.rb +10 -10
  848. data/lib/fog/xenserver/models/compute/vifs.rb +3 -3
  849. data/lib/fog/xenserver/requests/compute/create_sr.rb +72 -0
  850. data/lib/fog/xenserver/requests/compute/destroy_sr.rb +30 -0
  851. data/lib/fog/xenserver/requests/compute/disable_host.rb +29 -0
  852. data/lib/fog/xenserver/requests/compute/enable_host.rb +28 -0
  853. data/lib/fog/xenserver/requests/compute/reboot_host.rb +23 -0
  854. data/lib/fog/xenserver/requests/compute/shutdown_host.rb +23 -0
  855. data/lib/fog/xenserver/requests/compute/unplug_pbd.rb +25 -0
  856. data/lib/fog/zerigo/models/dns/record.rb +4 -4
  857. data/lib/fog/zerigo/models/dns/records.rb +2 -2
  858. data/lib/fog/zerigo/models/dns/zone.rb +6 -6
  859. data/lib/fog/zerigo/models/dns/zones.rb +2 -2
  860. data/lib/tasks/changelog_task.rb +1 -0
  861. data/lib/tasks/test_task.rb +1 -1
  862. data/tests/aws/models/cloud_watch/metrics_tests.rb +16 -1
  863. data/tests/aws/requests/auto_scaling/model_tests.rb +1 -3
  864. data/tests/aws/requests/compute/snapshot_tests.rb +19 -0
  865. data/tests/aws/requests/compute/spot_instance_tests.rb +4 -2
  866. data/tests/aws/requests/elasticache/describe_reserved_cache_nodes.rb +17 -0
  867. data/tests/aws/requests/elasticache/helper.rb +17 -0
  868. data/tests/aws/requests/glacier/vault_tests.rb +1 -1
  869. data/tests/aws/requests/storage/bucket_tests.rb +37 -3
  870. data/tests/aws/requests/storage/cors_utils_tests.rb +108 -0
  871. data/tests/brightbox/models/compute/account_tests.rb +2 -0
  872. data/tests/brightbox/models/compute/server_tests.rb +21 -0
  873. data/tests/brightbox/requests/compute/firewall_policy_tests.rb +33 -0
  874. data/tests/brightbox/requests/compute/firewall_rule_tests.rb +43 -0
  875. data/tests/brightbox/requests/compute/helper.rb +33 -30
  876. data/tests/compute/helper.rb +28 -6
  877. data/tests/compute/models/flavors_tests.rb +4 -2
  878. data/tests/compute/models/server_tests.rb +5 -1
  879. data/tests/compute/models/servers_tests.rb +5 -2
  880. data/tests/core/parser_tests.rb +32 -6
  881. data/tests/core/wait_for_tests.rb +13 -0
  882. data/tests/ecloud/compute/models/admin_organization_tests.rb +16 -0
  883. data/tests/ecloud/compute/models/compute_pool_tests.rb +17 -0
  884. data/tests/ecloud/compute/models/detached_disk_tests.rb +26 -0
  885. data/tests/ecloud/compute/models/environment_tests.rb +23 -0
  886. data/tests/ecloud/compute/models/internet_service_tests.rb +28 -0
  887. data/tests/ecloud/compute/models/ip_address_tests.rb +19 -0
  888. data/tests/ecloud/compute/models/network_tests.rb +17 -0
  889. data/tests/ecloud/compute/models/operating_system_families_tests.rb +13 -0
  890. data/tests/ecloud/compute/models/operating_system_tests.rb +22 -0
  891. data/tests/ecloud/compute/models/organization_tests.rb +21 -0
  892. data/tests/ecloud/compute/models/public_ip_tests.rb +19 -0
  893. data/tests/ecloud/compute/models/server_tests.rb +151 -0
  894. data/tests/ecloud/compute/models/ssh_key_tests.rb +19 -0
  895. data/tests/ecloud/compute/models/template_tests.rb +20 -0
  896. data/tests/openstack/authenticate_tests.rb +142 -0
  897. data/tests/openstack/models/compute/server_tests.rb +45 -0
  898. data/tests/openstack/models/identity/ec2_credential_tests.rb +41 -0
  899. data/tests/openstack/models/identity/ec2_credentials_tests.rb +58 -0
  900. data/tests/openstack/models/identity/tenant_tests.rb +6 -0
  901. data/tests/openstack/models/network/floating_ip_tests.rb +30 -0
  902. data/tests/openstack/models/network/floating_ips_tests.rb +27 -0
  903. data/tests/openstack/requests/compute/address_tests.rb +1 -3
  904. data/tests/openstack/requests/compute/helper.rb +20 -0
  905. data/tests/openstack/requests/compute/quota_tests.rb +2 -0
  906. data/tests/openstack/requests/compute/security_group_tests.rb +10 -2
  907. data/tests/openstack/requests/compute/server_tests.rb +29 -14
  908. data/tests/openstack/requests/identity/ec2_credentials_tests.rb +41 -0
  909. data/tests/openstack/requests/identity/role_tests.rb +0 -1
  910. data/tests/openstack/requests/identity/user_tests.rb +8 -0
  911. data/tests/rackspace/helper.rb +17 -1
  912. data/tests/rackspace/models/block_storage/snapshot_tests.rb +18 -13
  913. data/tests/rackspace/models/block_storage/snapshots_tests.rb +1 -3
  914. data/tests/rackspace/models/block_storage/volume_tests.rb +14 -10
  915. data/tests/rackspace/models/block_storage/volume_types_tests.rb +1 -3
  916. data/tests/rackspace/models/block_storage/volumes_tests.rb +1 -3
  917. data/tests/rackspace/models/compute_v2/flavors_tests.rb +1 -4
  918. data/tests/rackspace/models/compute_v2/image_tests.rb +26 -0
  919. data/tests/rackspace/models/compute_v2/images_tests.rb +1 -3
  920. data/tests/rackspace/models/compute_v2/metadata_tests.rb +42 -0
  921. data/tests/rackspace/models/compute_v2/server_tests.rb +89 -15
  922. data/tests/rackspace/models/compute_v2/servers_tests.rb +12 -8
  923. data/tests/rackspace/models/load_balancers/load_balancer_tests.rb +17 -0
  924. data/tests/rackspace/models/storage/file_tests.rb +6 -0
  925. data/tests/rackspace/requests/block_storage/snapshot_tests.rb +15 -15
  926. data/tests/rackspace/requests/block_storage/volume_tests.rb +9 -11
  927. data/tests/rackspace/requests/block_storage/volume_type_tests.rb +8 -11
  928. data/tests/rackspace/requests/compute/address_tests.rb +11 -9
  929. data/tests/rackspace/requests/compute/flavor_tests.rb +6 -5
  930. data/tests/rackspace/requests/compute/image_tests.rb +12 -10
  931. data/tests/rackspace/requests/compute/resize_tests.rb +8 -6
  932. data/tests/rackspace/requests/compute/server_tests.rb +19 -17
  933. data/tests/rackspace/requests/compute_v2/address_tests.rb +43 -0
  934. data/tests/rackspace/requests/compute_v2/attachment_tests.rb +17 -17
  935. data/tests/rackspace/requests/compute_v2/flavor_tests.rb +7 -9
  936. data/tests/rackspace/requests/compute_v2/image_tests.rb +42 -16
  937. data/tests/rackspace/requests/compute_v2/metadata_tests.rb +104 -0
  938. data/tests/rackspace/requests/compute_v2/server_tests.rb +44 -60
  939. data/tests/rackspace/requests/dns/records_tests.rb +2 -2
  940. data/tests/rackspace/requests/load_balancers/content_caching_tests.rb +25 -0
  941. data/tests/rackspace/requests/load_balancers/helper.rb +5 -1
  942. data/tests/vsphere/requests/compute/vm_clone_tests.rb +6 -4
  943. data/tests/xenserver/models/compute/host_cpu_tests.rb +58 -0
  944. data/tests/xenserver/models/compute/host_metrics_tests.rb +48 -0
  945. data/tests/xenserver/models/compute/host_tests.rb +33 -2
  946. data/tests/xenserver/models/compute/pbd_tests.rb +33 -1
  947. data/tests/xenserver/models/compute/pool_tests.rb +7 -1
  948. data/tests/xenserver/models/compute/storage_repository_tests.rb +52 -1
  949. data/tests/xenserver/requests/compute/create_sr_tests.rb +54 -0
  950. data/tests/xenserver/requests/compute/destroy_sr_tests.rb +46 -0
  951. data/tests/xenserver/requests/compute/disable_host_tests.rb +16 -0
  952. data/tests/xenserver/requests/compute/enable_host_tests.rb +16 -0
  953. data/tests/xenserver/requests/compute/unplug_pbd_tests.rb +48 -0
  954. metadata +153 -42
  955. data/docs/_config.yml +0 -39
  956. data/docs/_layouts/default.html +0 -111
  957. data/docs/about/contributing.markdown +0 -229
  958. data/docs/about/getting_started.markdown +0 -108
  959. data/docs/about/press.markdown +0 -52
  960. data/docs/about/structure.markdown +0 -78
  961. data/docs/about/users.markdown +0 -34
  962. data/docs/cdn/index.markdown +0 -148
  963. data/docs/compute/index.markdown +0 -122
  964. data/docs/dns/index.markdown +0 -79
  965. data/docs/index.markdown +0 -93
  966. data/docs/public/crossdomain.xml +0 -25
  967. data/docs/public/css/fog.css +0 -142
  968. data/docs/public/css/handheld.css +0 -8
  969. data/docs/public/css/style.css +0 -129
  970. data/docs/public/images/.gitignore +0 -3
  971. data/docs/public/js/libs/dd_belatedpng.js +0 -289
  972. data/docs/public/js/libs/dd_belatedpng.min.js +0 -13
  973. data/docs/public/js/libs/jquery-1.4.2.js +0 -6240
  974. data/docs/public/js/libs/jquery-1.4.2.min.js +0 -154
  975. data/docs/public/js/libs/modernizr-1.6.js +0 -892
  976. data/docs/public/js/libs/modernizr-1.6.min.js +0 -30
  977. data/docs/public/js/mylibs/.gitignore +0 -3
  978. data/docs/public/js/plugins.js +0 -34
  979. data/docs/public/js/profiling/config.js +0 -59
  980. data/docs/public/js/profiling/yahoo-profiling.css +0 -7
  981. data/docs/public/js/profiling/yahoo-profiling.js +0 -1028
  982. data/docs/public/js/profiling/yahoo-profiling.min.js +0 -39
  983. data/docs/public/js/script.js +0 -26
  984. data/docs/public/robots.txt +0 -5
  985. data/docs/storage/index.markdown +0 -204
  986. data/lib/fog/ecloud/requests/compute/get_admin_organizations.rb +0 -11
  987. data/lib/fog/ecloud/requests/compute/get_ip_addresses.rb +0 -11
  988. data/lib/fog/ecloud/requests/compute/get_operating_system_family.rb +0 -11
  989. data/lib/fog/ecloud/requests/compute/virtual_machine_add_ip.rb +0 -40
  990. data/lib/tasks/documentation_task.rb +0 -155
@@ -17,6 +17,8 @@ module Fog
17
17
  class NotFound < Fog::Errors::Error; end
18
18
 
19
19
  class LoadError < LoadError; end
20
+
21
+ class TimeoutError< Fog::Errors::Error; end
20
22
 
21
23
  # @return [String] The error message that will be raised, if credentials cannot be found
22
24
  def self.missing_credentials
@@ -21,24 +21,12 @@ module Fog
21
21
  # Do the MultiJson introspection at this level so we can define our encode/decode methods and perform
22
22
  # the introspection only once rather than once per call.
23
23
 
24
- if MultiJson.respond_to?(:dump)
25
- def self.encode(obj)
26
- MultiJson.dump(obj)
27
- end
28
- else
29
- def self.encode(obj)
30
- MultiJson.encode(obj)
31
- end
24
+ def self.encode(obj)
25
+ MultiJson.encode(obj)
32
26
  end
33
27
 
34
- if MultiJson.respond_to?(:load)
35
- def self.decode(obj)
36
- MultiJson.load(obj)
37
- end
38
- else
39
- def self.decode(obj)
40
- MultiJson.decode(obj)
41
- end
28
+ def self.decode(obj)
29
+ MultiJson.decode(obj)
42
30
  end
43
31
 
44
32
 
@@ -5,6 +5,8 @@ module Fog
5
5
  :deprecation => ::STDOUT,
6
6
  :warning => ::STDOUT
7
7
  }
8
+
9
+ @channels[:debug] = ::STDOUT if ENV['DEBUG']
8
10
 
9
11
  def self.[](channel)
10
12
  @channels[channel]
@@ -1,12 +1,22 @@
1
+ require "fog/core/deprecated_connection_accessors"
2
+
1
3
  module Fog
2
4
  class Model
3
5
 
4
6
  extend Fog::Attributes::ClassMethods
5
7
  include Fog::Attributes::InstanceMethods
8
+ include Fog::Core::DeprecatedConnectionAccessors
6
9
 
7
- attr_accessor :collection, :connection
10
+ attr_accessor :collection
11
+ attr_reader :service
8
12
 
9
13
  def initialize(new_attributes = {})
14
+ # TODO Remove compatibility with old connection option
15
+ @service = new_attributes.delete(:service)
16
+ if @service.nil? && new_attributes[:connection]
17
+ Fog::Logger.deprecation("Passing :connection option is deprecated, use :service instead [light_black](#{caller.first})[/]")
18
+ @service = new_attributes[:connection]
19
+ end
10
20
  merge_attributes(new_attributes)
11
21
  end
12
22
 
@@ -23,6 +23,19 @@ module Fog
23
23
  @value << string
24
24
  end
25
25
 
26
+ # ###############################################################################
27
+ # This is a workaround. Original implementation from Nokogiri is overwritten with
28
+ # one that does not join namespace prefix with local name.
29
+ def start_element_namespace name, attrs = [], prefix = nil, uri = nil, ns = []
30
+ start_element name, attrs
31
+ end
32
+
33
+ def end_element_namespace name, prefix = nil, uri = nil
34
+ end_element name
35
+ end
36
+
37
+ # ###############################################################################
38
+
26
39
  def start_element(name, attrs = [])
27
40
  @value = nil
28
41
  end
@@ -91,7 +91,7 @@ module Fog
91
91
  constant = collection.to_s.split('_').map {|characters| characters[0...1].upcase << characters[1..-1]}.join('')
92
92
  service::Collections.module_eval <<-EOS, __FILE__, __LINE__
93
93
  def #{collection}(attributes = {})
94
- #{service}::#{constant}.new({:connection => self}.merge(attributes))
94
+ #{service}::#{constant}.new({:service => self}.merge(attributes))
95
95
  end
96
96
  EOS
97
97
  end
@@ -7,7 +7,7 @@ module Fog
7
7
  duration = Time.now - start
8
8
  end
9
9
  if duration > timeout
10
- false
10
+ raise Errors::TimeoutError.new("The specified wait_for timeout (#{timeout} seconds) was exceeded")
11
11
  else
12
12
  { :duration => duration }
13
13
  end
@@ -26,7 +26,7 @@ module Fog
26
26
  end
27
27
 
28
28
  def destroy
29
- connection.delete_record(zone.domain, identity)
29
+ service.delete_record(zone.domain, identity)
30
30
  true
31
31
  end
32
32
 
@@ -42,14 +42,14 @@ module Fog
42
42
 
43
43
  # decide whether its a new record or update of an existing
44
44
  if id.nil?
45
- data = connection.create_record(zone.domain, name, type, value, options)
45
+ data = service.create_record(zone.domain, name, type, value, options)
46
46
  else
47
47
  options[:name] = name if name
48
48
  options[:content] = value if value
49
49
  options[:type] = type if type
50
- data = connection.update_record(zone.domain, id, options)
50
+ data = service.update_record(zone.domain, id, options)
51
51
  end
52
-
52
+
53
53
  merge_attributes(data.body["record"])
54
54
  true
55
55
  end
@@ -14,13 +14,13 @@ module Fog
14
14
  def all
15
15
  requires :zone
16
16
  clear
17
- data = connection.list_records(zone.id).body.map {|record| record['record']}
17
+ data = service.list_records(zone.id).body.map {|record| record['record']}
18
18
  load(data)
19
19
  end
20
20
 
21
21
  def get(record_id)
22
22
  requires :zone
23
- data = connection.get_record(zone.id, record_id).body["record"]
23
+ data = service.get_record(zone.id, record_id).body["record"]
24
24
  new(data)
25
25
  rescue Excon::Errors::NotFound
26
26
  nil
@@ -14,7 +14,7 @@ module Fog
14
14
  attribute :updated_at
15
15
 
16
16
  def destroy
17
- connection.delete_domain(identity)
17
+ service.delete_domain(identity)
18
18
  true
19
19
  end
20
20
 
@@ -22,7 +22,7 @@ module Fog
22
22
  @records ||= begin
23
23
  Fog::DNS::DNSimple::Records.new(
24
24
  :zone => self,
25
- :connection => connection
25
+ :service => service
26
26
  )
27
27
  end
28
28
  end
@@ -38,7 +38,7 @@ module Fog
38
38
 
39
39
  def save
40
40
  requires :domain
41
- data = connection.create_domain(domain).body["domain"]
41
+ data = service.create_domain(domain).body["domain"]
42
42
  merge_attributes(data)
43
43
  true
44
44
  end
@@ -11,12 +11,12 @@ module Fog
11
11
 
12
12
  def all
13
13
  clear
14
- data = connection.list_domains.body.map {|zone| zone['domain']}
14
+ data = service.list_domains.body.map {|zone| zone['domain']}
15
15
  load(data)
16
16
  end
17
17
 
18
18
  def get(zone_id)
19
- data = connection.get_domain(zone_id).body['domain']
19
+ data = service.get_domain(zone_id).body['domain']
20
20
  new(data)
21
21
  rescue Excon::Errors::NotFound
22
22
  nil
@@ -8,7 +8,7 @@ module Fog
8
8
  extend Fog::Deprecation
9
9
  deprecate :ip, :value
10
10
  deprecate :ip=, :value=
11
-
11
+
12
12
  identity :id
13
13
 
14
14
  attribute :name
@@ -23,14 +23,14 @@ module Fog
23
23
  attribute :hard_link, :aliases => "hardLink"
24
24
 
25
25
  attribute :value, :aliases => "data"
26
-
26
+
27
27
  def initialize(attributes={})
28
28
  self.ttl ||= 1800
29
29
  super
30
30
  end
31
31
 
32
32
  def destroy
33
- connection.delete_record(zone.domain, identity)
33
+ service.delete_record(zone.domain, identity)
34
34
  true
35
35
  end
36
36
 
@@ -57,11 +57,11 @@ module Fog
57
57
  end
58
58
 
59
59
  if id.nil?
60
- data = connection.create_record(zone.domain, name, type, value, options).body
60
+ data = service.create_record(zone.domain, name, type, value, options).body
61
61
  merge_attributes(data)
62
62
  else
63
63
  options.merge!(:name => name, :type => type, :data => value)
64
- connection.update_record(zone.domain, id, options).body
64
+ service.update_record(zone.domain, id, options).body
65
65
  end
66
66
 
67
67
  true
@@ -13,12 +13,12 @@ module Fog
13
13
 
14
14
  def all
15
15
  requires :zone
16
- data = connection.list_records(zone.identity).body
16
+ data = service.list_records(zone.identity).body
17
17
  load(data)
18
18
  end
19
19
 
20
20
  def get(record_id)
21
- data = connection.get_record(zone.identity, record_id).body
21
+ data = service.get_record(zone.identity, record_id).body
22
22
  new(data)
23
23
  rescue Fog::Service::NotFound
24
24
  nil
@@ -14,7 +14,7 @@ module Fog
14
14
 
15
15
  def destroy
16
16
  requires :identity
17
- connection.delete_domain(identity)
17
+ service.delete_domain(identity)
18
18
  true
19
19
  end
20
20
 
@@ -22,14 +22,14 @@ module Fog
22
22
  @records ||= begin
23
23
  Fog::DNS::DNSMadeEasy::Records.new(
24
24
  :zone => self,
25
- :connection => connection
25
+ :service => service
26
26
  )
27
27
  end
28
28
  end
29
29
 
30
30
  def save
31
31
  requires :domain
32
- data = connection.create_domain(domain).body
32
+ data = service.create_domain(domain).body
33
33
  self.identity = data['name']
34
34
  merge_attributes(data)
35
35
  true
@@ -11,12 +11,12 @@ module Fog
11
11
 
12
12
  def all
13
13
  clear
14
- data = connection.list_domains.body['list'].collect{|domain| {:id => domain}}
14
+ data = service.list_domains.body['list'].collect{|domain| {:id => domain}}
15
15
  load(data)
16
16
  end
17
17
 
18
18
  def get(zone_id)
19
- data = connection.get_domain(zone_id).body
19
+ data = service.get_domain(zone_id).body
20
20
  data.merge!(:id => data['name'])
21
21
  new(data)
22
22
  rescue Fog::Service::NotFound
@@ -16,7 +16,7 @@ module Fog
16
16
 
17
17
  def destroy
18
18
  requires :identity, :name, :type, :zone
19
- connection.delete_record(type, zone.identity, name, identity)
19
+ service.delete_record(type, zone.identity, name, identity)
20
20
  true
21
21
  end
22
22
 
@@ -28,13 +28,13 @@ module Fog
28
28
  }
29
29
  options.delete_if {|key, value| value.nil?}
30
30
 
31
- data = connection.post_record(type, zone.identity, name, rdata, options).body['data']
31
+ data = service.post_record(type, zone.identity, name, rdata, options).body['data']
32
32
  # avoid overwriting zone object with zone string
33
33
  data = data.reject {|key, value| key == 'zone'}
34
34
  merge_attributes(data)
35
35
 
36
36
  zone.publish
37
- records = connection.get_record(type, zone.identity, name).body['data']
37
+ records = service.get_record(type, zone.identity, name).body['data']
38
38
  # data in format ['/REST/xRecord/domain/fqdn/identity]
39
39
  records.map! do |record|
40
40
  tokens = record.split('/')
@@ -14,8 +14,8 @@ module Fog
14
14
  def all(options = {})
15
15
  requires :zone
16
16
  data = []
17
- connection.get_node_list(zone.domain, options).body['data'].each do |fqdn|
18
- records = connection.get_record('ANY', zone.domain, fqdn).body['data']
17
+ service.get_node_list(zone.domain, options).body['data'].each do |fqdn|
18
+ records = service.get_record('ANY', zone.domain, fqdn).body['data']
19
19
 
20
20
  # data in format ['/REST/xRecord/domain/fqdn/identity]
21
21
  records.map! do |record|
@@ -23,7 +23,7 @@ module Fog
23
23
 
24
24
  def destroy
25
25
  requires :domain
26
- connection.delete_zone(domain)
26
+ service.delete_zone(domain)
27
27
  true
28
28
  end
29
29
 
@@ -34,12 +34,12 @@ module Fog
34
34
 
35
35
  def publish
36
36
  requires :identity
37
- data = connection.put_zone(identity, 'publish' => true)
37
+ data = service.put_zone(identity, 'publish' => true)
38
38
  true
39
39
  end
40
40
 
41
41
  def records
42
- @records ||= Fog::DNS::Dynect::Records.new(:zone => self, :connection => connection)
42
+ @records ||= Fog::DNS::Dynect::Records.new(:zone => self, :service => service)
43
43
  end
44
44
 
45
45
  def nameservers
@@ -48,7 +48,7 @@ module Fog
48
48
 
49
49
  def save
50
50
  requires :domain, :email, :ttl
51
- data = connection.post_zone(email, ttl, domain).body['data']
51
+ data = service.post_zone(email, ttl, domain).body['data']
52
52
  merge_attributes(data)
53
53
  true
54
54
  end
@@ -10,14 +10,14 @@ module Fog
10
10
  model Fog::DNS::Dynect::Zone
11
11
 
12
12
  def all
13
- data = connection.get_zone.body['data'].map do |zone|
13
+ data = service.get_zone.body['data'].map do |zone|
14
14
  { :domain => zone }
15
15
  end
16
16
  load(data)
17
17
  end
18
18
 
19
19
  def get(zone_id)
20
- new(connection.get_zone('zone' => zone_id).body['data'])
20
+ new(service.get_zone('zone' => zone_id).body['data'])
21
21
  rescue Excon::Errors::NotFound
22
22
  nil
23
23
  end
@@ -2,16 +2,30 @@ require(File.expand_path(File.join(File.dirname(__FILE__), 'core')))
2
2
 
3
3
  module Fog
4
4
  module Ecloud
5
+ ECLOUD_OPTIONS = [:ecloud_authentication_method]
5
6
 
6
7
  extend Fog::Provider
7
8
 
8
9
  service(:compute, 'ecloud/compute', 'Compute')
9
10
 
10
- end
11
- end
11
+ def self.keep(hash, *keys)
12
+ {}.tap do |kept|
13
+ keys.each{|k| kept[k]= hash[k] if hash.key?(k)}
14
+ end
15
+ end
12
16
 
13
- module Fog
14
- module Ecloud
15
- ECLOUD_OPTIONS = [:ecloud_authentication_method]
17
+ def self.slice(hash, *keys)
18
+ hash.dup.tap do |sliced|
19
+ keys.each{|k| sliced.delete(k)}
20
+ end
21
+ end
22
+
23
+ def self.ip_address
24
+ 4.times.map{ Fog::Mock.random_numbers(3) }.join(".")
25
+ end
26
+
27
+ def self.mac_address
28
+ 6.times.map{ Fog::Mock.random_numbers(2) }.join(":")
29
+ end
16
30
  end
17
31
  end
@@ -1,33 +1,12 @@
1
1
  require 'fog/ecloud/collection'
2
- module Fog
3
- module Ecloud
4
- class Model < Fog::Model
5
-
6
- attr_accessor :loaded
7
- alias_method :loaded?, :loaded
8
-
9
- def reload
10
- instance = super
11
- @loaded = true
12
- instance
13
- end
14
-
15
- def load_unless_loaded!
16
- unless @loaded
17
- reload
18
- end
19
- end
2
+ require 'fog/ecloud/model'
3
+ require 'builder'
20
4
 
21
- end
22
- end
23
- end
24
5
  module Fog
25
6
  module Compute
26
-
27
-
28
7
  class Ecloud < Fog::Service
29
-
30
8
  API_URL = "https://services.enterprisecloud.terremark.com"
9
+
31
10
  attr_reader :authentication_method, :version
32
11
 
33
12
  #### Credentials
@@ -38,346 +17,271 @@ module Fog
38
17
  model_path 'fog/ecloud/models/compute'
39
18
  model :organization
40
19
  collection :organizations
41
- model :location
42
- collection :locations
43
- model :catalog_item
44
- collection :catalog
45
- model :catalog_configuration
46
- collection :catalog_configurations
47
- model :environment
48
- collection :environments
49
- model :task
50
- collection :tasks
51
- model :compute_pool
52
- collection :compute_pools
53
- model :server
54
- collection :servers
55
- model :hardware_configuration
56
- collection :hardware_configurations
57
- model :server_configuration_option
58
- collection :server_configuration_options
59
- model :guest_process
60
- collection :guest_processes
61
- model :layout
62
- collection :layouts
63
- model :row
64
- collection :rows
65
- model :group
66
- collection :groups
67
- model :internet_service
68
- collection :internet_services
69
- model :node
70
- collection :nodes
71
- model :monitor
72
- collection :monitors
73
- model :cpu_usage_detail
74
- collection :cpu_usage_detail_summary
75
- model :memory_usage_detail
76
- collection :memory_usage_detail_summary
77
- model :storage_usage_detail
78
- collection :storage_usage_detail_summary
79
- model :operating_system_family
80
- collection :operating_system_families
81
- model :operating_system
82
- collection :operating_systems
83
- model :template
84
- collection :templates
85
- model :firewall_acl
86
- collection :firewall_acls
87
- model :network
88
- collection :networks
89
- model :ip_address
90
- collection :ip_addresses
91
- model :physical_device
92
- collection :physical_devices
93
- model :public_ip
94
- collection :public_ips
95
- model :trusted_network_group
96
- collection :trusted_network_groups
97
- model :backup_internet_service
98
- collection :backup_internet_services
99
- model :rnat
100
- collection :rnats
101
- model :association
102
- collection :associations
103
- model :tag
104
- collection :tags
105
- model :admin_organization
106
- collection :admin_organizations
107
- model :ssh_key
108
- collection :ssh_keys
109
- model :password_complexity_rule
110
- collection :password_complexity_rules
111
- model :authentication_level
112
- collection :authentication_levels
113
- model :login_banner
114
- collection :login_banners
115
- model :user
116
- collection :users
117
- model :role
118
- collection :roles
119
- model :ssh_key
120
- collection :ssh_keys
121
- model :support_ticket
122
- collection :support_tickets
20
+ model :location
21
+ collection :locations
22
+ model :catalog_item
23
+ collection :catalog
24
+ model :catalog_configuration
25
+ collection :catalog_configurations
26
+ model :environment
27
+ collection :environments
28
+ model :task
29
+ collection :tasks
30
+ model :compute_pool
31
+ collection :compute_pools
32
+ model :server
33
+ collection :servers
34
+ model :virtual_machine_assigned_ip
35
+ collection :virtual_machine_assigned_ips
36
+ model :hardware_configuration
37
+ collection :hardware_configurations
38
+ model :server_configuration_option
39
+ collection :server_configuration_options
40
+ model :guest_process
41
+ collection :guest_processes
42
+ model :layout
43
+ collection :layouts
44
+ model :row
45
+ collection :rows
46
+ model :group
47
+ collection :groups
48
+ model :internet_service
49
+ collection :internet_services
50
+ model :node
51
+ collection :nodes
52
+ model :monitor
53
+ collection :monitors
54
+ model :cpu_usage_detail
55
+ collection :cpu_usage_detail_summary
56
+ model :memory_usage_detail
57
+ collection :memory_usage_detail_summary
58
+ model :storage_usage_detail
59
+ collection :storage_usage_detail_summary
60
+ model :operating_system_family
61
+ collection :operating_system_families
62
+ model :operating_system
63
+ collection :operating_systems
64
+ model :template
65
+ collection :templates
66
+ model :firewall_acl
67
+ collection :firewall_acls
68
+ model :network
69
+ collection :networks
70
+ model :ip_address
71
+ collection :ip_addresses
72
+ model :physical_device
73
+ collection :physical_devices
74
+ model :public_ip
75
+ collection :public_ips
76
+ model :trusted_network_group
77
+ collection :trusted_network_groups
78
+ model :backup_internet_service
79
+ collection :backup_internet_services
80
+ model :rnat
81
+ collection :rnats
82
+ model :association
83
+ collection :associations
84
+ model :tag
85
+ collection :tags
86
+ model :admin_organization
87
+ collection :admin_organizations
88
+ model :ssh_key
89
+ collection :ssh_keys
90
+ model :password_complexity_rule
91
+ collection :password_complexity_rules
92
+ model :authentication_level
93
+ collection :authentication_levels
94
+ model :login_banner
95
+ collection :login_banners
96
+ model :user
97
+ collection :users
98
+ model :role
99
+ collection :roles
100
+ model :ssh_key
101
+ collection :ssh_keys
102
+ model :support_ticket
103
+ collection :support_tickets
104
+ model :detached_disk
105
+ collection :detached_disks
123
106
 
124
107
  #### Requests
125
108
  request_path 'fog/ecloud/requests/compute'
126
- request :get_organization
127
- request :get_organizations
128
- request :get_location
129
- request :get_locations
130
- request :get_environment
131
- request :get_task
132
- request :get_tasks
109
+ request :backup_internet_service_create
110
+ request :backup_internet_service_delete
111
+ request :backup_internet_service_edit
112
+ request :compute_pool_edit
113
+ request :firewall_acls_create
114
+ request :firewall_acls_delete
115
+ request :get_admin_organization
116
+ request :get_api_key
117
+ request :get_api_keys
118
+ request :get_association
119
+ request :get_associations
120
+ request :get_authentication_level
121
+ request :get_authentication_levels
122
+ request :get_backup_internet_service
123
+ request :get_backup_internet_services
124
+ request :get_catalog
125
+ request :get_catalog_configuration
126
+ request :get_catalog_configurations
127
+ request :get_catalog_item
133
128
  request :get_compute_pool
134
129
  request :get_compute_pools
135
- request :get_server
136
- request :get_servers
137
- request :get_network
138
- request :get_networks
139
- request :get_physical_device
140
- request :get_physical_devices
141
- request :get_layout
142
- request :get_layouts
143
- request :get_row
144
- request :get_rows
145
- request :get_group
146
- request :get_groups
147
- request :get_public_ip
148
- request :get_public_ips
149
- request :get_network_summary
150
- request :get_internet_service
151
- request :get_internet_services
152
- request :get_node
153
- request :get_nodes
130
+ request :get_cpu_usage_detail
131
+ request :get_cpu_usage_detail_summary
132
+ request :get_environment
154
133
  request :get_firewall_acl
155
134
  request :get_firewall_acls
156
- request :get_trusted_network_group
157
- request :get_trusted_network_groups
158
- request :get_catalog
159
- request :get_catalog_item
160
- request :get_tag
161
- request :get_tags
162
- request :get_hardware_configuration
163
- request :get_hardware_configurations
164
- request :get_server_configuration_option
165
- request :get_server_configuration_options
135
+ request :get_group
136
+ request :get_groups
166
137
  request :get_guest_process
167
138
  request :get_guest_processes
168
- request :get_cpu_usage_detail
169
- request :get_cpu_usage_detail_summary
139
+ request :get_hardware_configuration
140
+ request :get_internet_service
141
+ request :get_internet_services
142
+ request :get_ip_address
143
+ request :get_layout
144
+ request :get_layouts
145
+ request :get_location
146
+ request :get_locations
147
+ request :get_login_banner
148
+ request :get_login_banners
170
149
  request :get_memory_usage_detail
171
150
  request :get_memory_usage_detail_summary
172
- request :get_storage_usage_detail
173
- request :get_storage_usage_detail_summary
174
- request :get_operating_system_family
175
- request :get_operating_system_families
176
- request :get_operating_system
177
- request :get_template
178
- request :get_templates
179
151
  request :get_monitor
180
152
  request :get_monitors
181
- request :get_backup_internet_service
182
- request :get_backup_internet_services
183
- request :get_rnat
184
- request :get_rnats
185
- request :get_association
186
- request :get_associations
187
- request :get_admin_organization
188
- request :get_admin_organizations
189
- request :get_ssh_key
190
- request :get_ssh_keys
153
+ request :get_network
154
+ request :get_network_summary
155
+ request :get_networks
156
+ request :get_node
157
+ request :get_nodes
158
+ request :get_operating_system
159
+ request :get_operating_system_families
160
+ request :get_organization
161
+ request :get_organizations
191
162
  request :get_password_complexity_rule
192
163
  request :get_password_complexity_rules
193
- request :get_authentication_level
194
- request :get_authentication_levels
195
- request :get_login_banner
196
- request :get_login_banners
197
- request :get_user
198
- request :get_users
164
+ request :get_physical_device
165
+ request :get_physical_devices
166
+ request :get_public_ip
167
+ request :get_public_ips
168
+ request :get_rnat
169
+ request :get_rnats
199
170
  request :get_role
200
171
  request :get_roles
201
- request :get_api_key
202
- request :get_api_keys
172
+ request :get_row
173
+ request :get_rows
174
+ request :get_server
175
+ request :get_server_configuration_option
176
+ request :get_server_configuration_options
177
+ request :get_servers
178
+ request :get_ssh_key
179
+ request :get_ssh_keys
180
+ request :get_storage_usage_detail
181
+ request :get_storage_usage_detail_summary
203
182
  request :get_support_ticket
204
183
  request :get_support_tickets
205
- request :get_ip_address
206
- request :get_ip_addresses
207
- request :get_catalog_configuration
208
- request :get_catalog_configurations
209
- request :compute_pool_edit
210
- request :virtual_machine_create_from_template
211
- request :virtual_machine_import
212
- request :virtual_machine_copy
213
- request :virtual_machine_copy_identical
214
- request :virtual_machine_edit
215
- request :virtual_machine_add_ip
216
- request :virtual_machine_edit_hardware_configuration
217
- request :virtual_machine_delete
218
- request :virtual_machine_upload_file
184
+ request :get_tag
185
+ request :get_tags
186
+ request :get_task
187
+ request :get_tasks
188
+ request :get_template
189
+ request :get_templates
190
+ request :get_trusted_network_group
191
+ request :get_trusted_network_groups
192
+ request :get_user
193
+ request :get_users
194
+ request :get_virtual_machine_assigned_ips
195
+ request :get_detached_disks
196
+ request :get_detached_disk
197
+ request :groups_create
198
+ request :groups_delete
199
+ request :groups_edit
200
+ request :groups_movedown
201
+ request :groups_moveup
219
202
  request :internet_service_create
220
- request :internet_service_edit
221
203
  request :internet_service_delete
222
- request :backup_internet_service_create
223
- request :backup_internet_service_edit
224
- request :backup_internet_service_delete
225
- request :node_service_create
226
- request :node_service_delete
227
- request :node_service_edit
204
+ request :internet_service_edit
228
205
  request :monitors_create_default
229
- request :monitors_create_ping
230
- request :monitors_create_http
231
206
  request :monitors_create_ecv
207
+ request :monitors_create_http
232
208
  request :monitors_create_loopback
233
- request :monitors_edit_ping
234
- request :monitors_edit_http
209
+ request :monitors_create_ping
210
+ request :monitors_disable
235
211
  request :monitors_edit_ecv
212
+ request :monitors_edit_http
213
+ request :monitors_edit_ping
236
214
  request :monitors_enable
237
- request :monitors_disable
238
- request :rnat_associations_edit_network
215
+ request :node_service_create
216
+ request :node_service_delete
217
+ request :node_service_edit
218
+ request :power_off
219
+ request :power_on
220
+ request :power_reset
221
+ request :power_shutdown
222
+ request :public_ip_activate
239
223
  request :rnat_associations_create_device
240
224
  request :rnat_associations_delete
225
+ request :rnat_associations_edit_network
241
226
  request :rows_create
227
+ request :rows_delete
242
228
  request :rows_edit
243
- request :rows_moveup
244
229
  request :rows_movedown
245
- request :rows_delete
246
- request :groups_create
247
- request :groups_edit
248
- request :groups_moveup
249
- request :groups_movedown
250
- request :groups_delete
230
+ request :rows_moveup
251
231
  request :trusted_network_groups_create
252
- request :trusted_network_groups_edit
253
232
  request :trusted_network_groups_delete
254
- request :firewall_acls_create
255
- request :firewall_acls_delete
256
- request :public_ip_activate
257
- request :power_on
258
- request :power_off
259
- request :power_reset
260
- request :power_shutdown
233
+ request :trusted_network_groups_edit
234
+ request :virtual_machine_edit_assigned_ips
235
+ request :virtual_machine_copy
236
+ request :virtual_machine_copy_identical
237
+ request :virtual_machine_create_from_template
238
+ request :virtual_machine_delete
239
+ request :virtual_machine_edit
240
+ request :virtual_machine_edit_hardware_configuration
241
+ request :virtual_machine_import
242
+ request :virtual_machine_upload_file
243
+ request :virtual_machine_detach_disk
244
+ request :virtual_machine_attach_disk
261
245
 
262
246
  module Shared
263
247
 
264
248
  attr_reader :versions_uri
265
249
 
266
- def default_organization_uri
267
- @default_organization_uri ||= begin
268
- unless @login_results
269
- do_login
270
- end
271
- case @login_results.body[:Org]
272
- when Array
273
- @login_results.body[:Org].first[:href]
274
- when Hash
275
- @login_results.body[:Org][:href]
276
- else
277
- nil
278
- end
279
- end
280
- end
281
-
282
- # login handles the auth, but we just need the Set-Cookie
283
- # header from that call.
284
- def do_login
285
- @login_results = get_organizations
286
- end
287
-
288
- def ecloud_xmlns
289
- {
290
- "xmlns" => "urn:tmrk:eCloudExtensions-2.8",
291
- "xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance"
292
- }
293
- end
294
-
295
- def ensure_unparsed(uri)
296
- if uri.is_a?(String)
297
- uri
298
- else
299
- uri.to_s
300
- end
301
- end
302
-
303
- def supported_versions
304
- @supported_versions ||= get_versions(@versions_uri).body[:VersionInfo]
305
- end
306
-
307
- def xmlns
308
- { "xmlns" => "http://www.vmware.com/vcloud/v0.8",
309
- "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
310
- "xmlns:xsd" => "http://www.w3.org/2001/XMLSchema" }
311
- end
312
-
313
250
  def validate_data(required_opts = [], options = {})
314
251
  unless required_opts.all? { |opt| options.has_key?(opt) }
315
252
  raise ArgumentError.new("Required data missing: #{(required_opts - options.keys).map(&:inspect).join(", ")}")
316
253
  end
317
254
  end
318
255
 
319
- end
320
-
321
- class Mock
322
- def self.data
323
- @data ||= Hash.new do |hash, key|
324
- hash[key] = {}
325
- end
326
- end
327
-
328
- def self.reset
329
- @data = nil
330
- end
331
-
332
- def initialize(options={})
333
- @ecloud_api_key = options[:ecloud]
334
- end
335
-
336
- def data
337
- self.class.data[@ecloud_api_key]
256
+ def id_from_uri(uri)
257
+ uri.match(/(\d+)$/)[1].to_i
338
258
  end
339
259
 
340
- def reset_data
341
- self.class.data.delete(@ecloud_api_key)
260
+ def default_organization_uri
261
+ "/cloudapi/ecloud/organizations/"
342
262
  end
343
263
  end
344
264
 
345
-
346
265
  class Real
347
266
  include Shared
348
267
 
349
268
  class << self
350
- def basic_request(*args)
351
- self.class_eval <<-EOS, __FILE__,__LINE__
352
- def #{args[0]}(uri)
353
- request({
354
- :expects => #{args[1] || 200},
355
- :method => '#{args[2] || 'GET'}',
356
- :headers => #{args[3] ? args[3].inspect : '{}'},
357
- :body => '#{args[4] ? args[4] : ''}',
358
- :parse => true,
359
- :uri => uri })
360
- end
361
- EOS
362
- end
363
-
364
- def unauthenticated_basic_request(*args)
365
- self.class_eval <<-EOS, __FILE__,__LINE__
366
- def #{args[0]}(uri)
367
- unauthenticated_request({
368
- :expects => #{args[1] || 200},
369
- :method => '#{args[2] || 'GET'}',
370
- :headers => #{args[3] ? args[3].inspect : '{}'},
371
- :parse => true,
372
- :uri => uri })
373
- end
374
- EOS
269
+ def basic_request(name, expects=[200], method=:get, headers={}, body='')
270
+ define_method(name) do |uri|
271
+ request({
272
+ :expects => expects,
273
+ :method => method,
274
+ :headers => headers,
275
+ :body => body,
276
+ :parse => true,
277
+ :uri => uri
278
+ })
279
+ end
375
280
  end
376
281
  end
377
282
 
378
283
 
379
284
  def initialize(options = {})
380
- require 'builder'
381
285
  require 'fog/core/parser'
382
286
  @connections = {}
383
287
  @connection_options = options[:connection_options] || {}
@@ -392,26 +296,14 @@ module Fog
392
296
  @username = options[:ecloud_username]
393
297
  @password = options[:ecloud_password]
394
298
  if @username.nil? || @password.nil?
395
- raise RuntimeError, "No credentials (cloud auth, or basic auth) passed!"
299
+ raise ArgumentError, "No credentials (cloud auth, or basic auth) passed!"
396
300
  end
397
301
  else
398
- @hmac = Fog::HMAC.new("sha256", @private_key)
302
+ @hmac = Fog::HMAC.new("sha256", @private_key)
399
303
  end
400
304
  end
401
305
 
402
- def default_organization_uri
403
- "/cloudapi/ecloud/organizations/"
404
- end
405
-
406
306
  def request(params)
407
- begin
408
- do_request(params)
409
- rescue Excon::Errors::Unauthorized => e
410
- raise RuntimeError, "Invalid authentication data: #{e}"
411
- end
412
- end
413
-
414
- def do_request(params)
415
307
  # Convert the uri to a URI if it's a string.
416
308
  if params[:uri].is_a?(String)
417
309
  params[:uri] = URI.parse(@host + params[:uri])
@@ -426,13 +318,16 @@ module Fog
426
318
  headers = set_extra_headers_for(params) || set_extra_headers_for({})
427
319
 
428
320
  # Make the request
429
- options = {:expects => params[:expects] || 200, :method => params[:method] || 'GET', :path => params[:uri].path + "#{"?#{params[:uri].query}" if params[:uri].query}", :headers => headers}
430
- unless params[:body].empty?
321
+ options = {
322
+ :expects => (params[:expects] || 200),
323
+ :method => params[:method] || 'GET',
324
+ :path => params[:uri].path + "#{"?#{params[:uri].query}" if params[:uri].query}",
325
+ :headers => headers
326
+ }
327
+ unless params[:body].nil? || params[:body].empty?
431
328
  options.merge!({:body => params[:body]})
432
329
  end
433
- #puts options[:body].inspect
434
330
  response = @connections[host_url].request(options)
435
-
436
331
  # Parse the response body into a hash
437
332
  unless response.body.empty?
438
333
  if params[:parse]
@@ -444,6 +339,7 @@ module Fog
444
339
  response.body = document.body
445
340
  end
446
341
  end
342
+
447
343
  response
448
344
  end
449
345
 
@@ -451,27 +347,27 @@ module Fog
451
347
 
452
348
  # if Authorization and x-tmrk-authorization are used, the x-tmrk-authorization takes precendence.
453
349
  def set_extra_headers_for(params)
454
- maor_headers = {
455
- 'x-tmrk-version' => @version,
456
- 'Date' => Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S GMT"),
457
- }
458
- params[:headers].merge!(maor_headers)
459
- if params[:method]=="POST" || params[:method]=="PUT"
460
- params[:headers].merge!({"Content-Type" => 'application/xml'}) unless params[:headers]['Content-Type']
461
- params[:headers].merge!({"Accept" => 'application/xml'})
462
- end
463
- unless params[:body].empty?
350
+ params[:headers] = {
351
+ 'x-tmrk-version' => @version,
352
+ 'Date' => Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S GMT"),
353
+ }.merge(params[:headers] || {})
354
+ if params[:method]=="POST" || params[:method]=="PUT"
355
+ params[:headers].merge!({"Content-Type" => 'application/xml'}) unless params[:headers]['Content-Type']
356
+ params[:headers].merge!({"Accept" => 'application/xml'})
357
+ end
358
+ unless params[:body].nil? || params[:body].empty?
464
359
  params[:headers].merge!({"x-tmrk-contenthash" => "Sha256 #{Base64.encode64(Digest::SHA2.digest(params[:body].to_s)).chomp}"})
465
- end
466
- if @authentication_method == :basic_auth
467
- params[:headers].merge!({'Authorization' => "Basic #{Base64.encode64(@username+":"+@password).delete("\r\n")}"})
468
- elsif @authentication_method == :cloud_api_auth
469
- signature = cloud_api_signature(params)
470
- params[:headers].merge!({
471
- "x-tmrk-authorization" => %{CloudApi AccessKey="#{@access_key}" SignatureType="HmacSha256" Signature="#{signature}"}
472
- })
473
- end
474
- params[:headers]
360
+ end
361
+ if @authentication_method == :basic_auth
362
+ params[:headers].merge!({'Authorization' => "Basic #{Base64.encode64(@username+":"+@password).delete("\r\n")}"})
363
+ elsif @authentication_method == :cloud_api_auth
364
+ signature = cloud_api_signature(params)
365
+ params[:headers].merge!({
366
+ "x-tmrk-authorization" => %{CloudApi AccessKey="#{@access_key}" SignatureType="HmacSha256" Signature="#{signature}"},
367
+ "Authorization" => %{CloudApi AccessKey="#{@access_key}" SignatureType="HmacSha256" Signature="#{signature}"}
368
+ })
369
+ end
370
+ params[:headers]
475
371
  end
476
372
 
477
373
  def cloud_api_signature(params)
@@ -480,13 +376,14 @@ module Fog
480
376
  path = params[:uri].path
481
377
  canonicalized_headers = canonicalize_headers(headers)
482
378
  canonicalized_resource = canonicalize_resource(path)
483
- string = [ verb,
484
- headers['Content-Length'].to_s,
485
- headers['Content-Type'].to_s,
486
- headers['Date'].to_s,
487
- canonicalized_headers,
488
- canonicalized_resource + "\n"
489
- ].join("\n")
379
+ string = [
380
+ verb,
381
+ headers['Content-Length'].to_s,
382
+ headers['Content-Type'].to_s,
383
+ headers['Date'].to_s,
384
+ canonicalized_headers,
385
+ canonicalized_resource + "\n"
386
+ ].join("\n")
490
387
  Base64.encode64(@hmac.sign(string)).chomp
491
388
  end
492
389
 
@@ -510,6 +407,421 @@ module Fog
510
407
  end
511
408
 
512
409
 
410
+ class Mock
411
+ include Shared
412
+
413
+ def self.data
414
+ @data ||= Hash.new do |hash, key|
415
+ hash[key] = begin
416
+ compute_pool_id = Fog.credentials[:ecloud_compute_pool_id] || Fog::Mock.random_numbers(3).to_i
417
+ environment_id = Fog.credentials[:ecloud_environment_id] || Fog::Mock.random_numbers(3).to_i
418
+ public_ip_id = Fog.credentials[:ecloud_public_ip_id] || Fog::Mock.random_numbers(6).to_i
419
+ internet_service_id = Fog::Mock.random_numbers(6).to_i
420
+ node_service_id = Fog::Mock.random_numbers(6).to_i
421
+ environment_name = Fog.credentials[:ecloud_environment_name] || Fog::Mock.random_letters(12)
422
+ location_id = Fog::Mock.random_numbers(4).to_i
423
+ network_id = Fog.credentials[:ecloud_network_id] || Fog::Mock.random_numbers(6).to_i
424
+ network_ip = Fog::Ecloud.ip_address
425
+ public_ip = Fog.credentials[:ecloud_public_ip_name] || Fog::Ecloud.ip_address
426
+ ip_address_id = Fog::Ecloud.ip_address
427
+ ip_address2_id = Fog::Ecloud.ip_address
428
+ operating_system_id = Fog::Mock.random_numbers(7).to_i
429
+ operating_system_family_id = Fog::Mock.random_numbers(7).to_i
430
+ organization_id = Fog::Mock.random_numbers(7).to_i
431
+ organization_name = Fog::Mock.random_letters(7)
432
+ template_id = Fog.credentials[:ecloud_template_id] || Fog::Mock.random_numbers(7).to_i
433
+ ssh_key_id = Fog.credentials[:ecloud_ssh_key_id] || Fog::Mock.random_numbers(4).to_i
434
+ ssh_key_name = Fog.credentials[:ecloud_ssh_key_name] || "root"
435
+
436
+ environment = {
437
+ :id => environment_id,
438
+ :href => "/cloudapi/ecloud/environments/#{environment_id}",
439
+ :name => environment_name,
440
+ :type => "application/vnd.tmrk.cloud.environment"
441
+ }
442
+
443
+ organization = {
444
+ :href => "/cloudapi/ecloud/organizations/#{organization_id}",
445
+ :type => "application/vnd.tmrk.cloud.organization",
446
+ :name => organization_name,
447
+ :Links => {
448
+ :Link => [
449
+ Fog::Ecloud.keep(environment, :href, :name, :type),
450
+ {
451
+ :href => "/cloudapi/ecloud/admin/organizations/#{organization_id}",
452
+ :name => organization_name,
453
+ :type => "application/vnd.tmrk.cloud.admin.organization",
454
+ :rel => "alternate",
455
+ },
456
+ {
457
+ :href => "/cloudapi/ecloud/devicetags/organizations/#{organization_id}",
458
+ :type => "application/vnd.tmrk.cloud.deviceTag; type=collection",
459
+ :rel => "down",
460
+ },
461
+ {
462
+ :href => "/cloudapi/ecloud/alerts/organizations/#{organization_id}",
463
+ :type => "application/vnd.tmrk.cloud.alertLog",
464
+ :rel => "down",
465
+ },
466
+ ],
467
+ },
468
+ :Locations => {
469
+ :Location => [
470
+ {
471
+ :href => "/cloudapi/ecloud/locations/#{location_id}",
472
+ :name => organization_name,
473
+ :Catalog => {
474
+ :href => "/cloudapi/ecloud/admin/catalog/organizations/#{organization_id}/locations/#{location_id}",
475
+ :type => "application/vnd.tmrk.cloud.admin.catalogEntry; type=collection"
476
+ },
477
+ :Environments => { :Environment => [environment] }
478
+ }
479
+ ]
480
+ }
481
+ }
482
+ environment.merge!(
483
+ :Links => {
484
+ :Link => [ Fog::Ecloud.keep(organization, :href, :name, :type), ]
485
+ }
486
+ )
487
+
488
+ admin_organization = {
489
+ :id => organization_id,
490
+ :href => "/cloudapi/ecloud/admin/organizations/#{organization_id}",
491
+ :type => "application/vnd.tmrk.cloud.admin.organization",
492
+ :name => organization_name,
493
+ :Links => {
494
+ :Link => [
495
+ Fog::Ecloud.keep(organization, :href, :type, :name)
496
+ ],
497
+ },
498
+ :organization_id => organization_id,
499
+ }
500
+
501
+ compute_pool = {
502
+ :id => compute_pool_id,
503
+ :href => "/cloudapi/ecloud/computepools/#{compute_pool_id}",
504
+ :name => Fog::Mock.random_letters(12),
505
+ :type => "application/vnd.tmrk.cloud.computePool",
506
+ :environment_id => environment_id,
507
+ :Links => {
508
+ :Link => [
509
+ Fog::Ecloud.keep(organization, :href, :name, :type),
510
+ Fog::Ecloud.keep(environment, :href, :name, :type),
511
+ ]
512
+ }
513
+ }
514
+
515
+
516
+ public_ip = {
517
+ :id => public_ip_id,
518
+ :href => "/cloudapi/ecloud/publicips/#{public_ip_id}",
519
+ :name => public_ip,
520
+ :type => "application/vnd.tmrk.cloud.publicIp",
521
+ :IpType => "none",
522
+ :environment_id => environment_id,
523
+ :Links => {
524
+ :Link => [
525
+ Fog::Ecloud.keep(environment, :href, :name, :type),
526
+ ],
527
+ },
528
+ :InternetServices => {
529
+ :InternetService => [
530
+ ],
531
+ },
532
+ }
533
+
534
+ internet_service = {
535
+ :id => internet_service_id,
536
+ :href => "/cloudapi/ecloud/internetservices/#{internet_service_id}",
537
+ :name => Fog::Mock.random_letters(6),
538
+ :type => "application/vnd.tmrk.cloud.internetService",
539
+ :public_ip_id => public_ip_id,
540
+ :Links => {
541
+ :Link => [
542
+ Fog::Ecloud.keep(public_ip, :href, :name, :type),
543
+ ],
544
+ },
545
+ :NodeServices => {
546
+ :NodeService => [
547
+ ]
548
+ },
549
+ }
550
+
551
+ node_service = {
552
+ :id => node_service_id,
553
+ :href => "/cloudapi/ecloud/nodeservices/#{node_service_id}",
554
+ :name => Fog::Mock.random_letters(6),
555
+ :type => "application/vnd.tmrk.cloud.nodeService",
556
+ :internet_service_id => internet_service_id,
557
+ :Links => {
558
+ :Link => [
559
+ Fog::Ecloud.keep(internet_service, :href, :name, :type)
560
+ ],
561
+ },
562
+ }
563
+
564
+ internet_service[:NodeServices][:NodeService].push(node_service)
565
+ public_ip[:InternetServices][:InternetService].push(internet_service)
566
+
567
+ network = {
568
+ :id => network_id,
569
+ :href => "/cloudapi/ecloud/networks/#{network_id}",
570
+ :name => "#{network_ip}/#{Fog::Mock.random_numbers(2)}",
571
+ :type => "application/vnd.tmrk.cloud.network",
572
+ :Address => network_ip,
573
+ :NetworkType => "Dmz",
574
+ :BroadcastAddress => network_ip,
575
+ :GatewayAddress => network_ip,
576
+ :environment_id => environment_id,
577
+ :Links => {
578
+ :Link => [
579
+ Fog::Ecloud.keep(environment, :href, :name, :type),
580
+ ]
581
+ },
582
+ :IpAddresses => {
583
+ :IpAddress => [],
584
+ },
585
+ }
586
+
587
+ ip_address = {
588
+ :id => ip_address_id,
589
+ :href => "/cloudapi/ecloud/ipaddresses/networks/#{network_id}/#{ip_address_id}",
590
+ :name => ip_address_id,
591
+ :type => "application/vnd.tmrk.cloud.ipAddress",
592
+ :network_id => network_id,
593
+ :Links => {
594
+ :Link => [ Fog::Ecloud.keep(network, :href, :name, :type), ],
595
+ },
596
+ :Reserved => "false",
597
+ :Host => nil,
598
+ :DetectedOn => nil,
599
+ }
600
+
601
+ ip_address2 = ip_address.dup.merge(:id => ip_address2_id, :href => "/cloudapi/ecloud/ipaddresses/networks/#{network_id}/#{ip_address2_id}", :name => ip_address2_id)
602
+
603
+ network[:IpAddresses][:IpAddress].push(ip_address).push(ip_address2)
604
+
605
+
606
+ short_name = "solaris10_64guest"
607
+ operating_system = {
608
+ :short_name => short_name,
609
+ :compute_pool_id => compute_pool_id,
610
+ :href => "/cloudapi/ecloud/operatingsystems/#{short_name}/computepools/#{compute_pool_id}",
611
+ :name => "Sun Solaris 10 (64-bit)",
612
+ :type => "application/vnd.tmrk.cloud.operatingSystem",
613
+ :FamilyName => "Solaris",
614
+ :Links => {
615
+ :Link => Fog::Ecloud.keep(compute_pool, :href, :name, :type),
616
+ },
617
+ :ConfigurationOptions => {
618
+ :Processor => {
619
+ :Minimum => "1",
620
+ :Maximum => "8",
621
+ :StepFactor => "1"
622
+ },
623
+ :Memory => {
624
+ :MinimumSize => {
625
+ :Unit => "MB",
626
+ :Value => "800"
627
+ },
628
+ :MaximumSize => {
629
+ :Unit => "MB",
630
+ :Value => "16384"
631
+ },
632
+ :StepFactor => {
633
+ :Unit => "MB",
634
+ :Value => "4"
635
+ }
636
+ },
637
+ :Disk => {
638
+ :Minimum => "1",
639
+ :Maximum => "15",
640
+ :SystemDisk => {
641
+ :ResourceCapacityRange => {
642
+ :MinimumSize => {
643
+ :Unit => "GB",
644
+ :Value => "1"
645
+ },
646
+ :MaximumSize => {
647
+ :Unit => "GB",
648
+ :Value => "512"
649
+ },
650
+ :StepFactor => {
651
+ :Unit => "GB",
652
+ :Value => "1"}
653
+ },
654
+ :MonthlyCost => "0"
655
+ },
656
+ :DataDisk => {
657
+ :ResourceCapacityRange => {
658
+ :MinimumSize => {
659
+ :Unit => "GB",
660
+ :Value => "1"
661
+ },
662
+ :MaximumSize => {
663
+ :Unit => "GB",
664
+ :Value => "512"
665
+ },
666
+ :StepFactor => {
667
+ :Unit => "GB",
668
+ :Value => "1"
669
+ }
670
+ },
671
+ :MonthlyCost => "0"
672
+ }
673
+ },
674
+ :NetworkAdapter=> {
675
+ :Minimum => "1",
676
+ :Maximum => "4",
677
+ :StepFactor => "1"
678
+ }
679
+ }
680
+ }
681
+
682
+
683
+ template = {
684
+ :id => template_id,
685
+ :href => "/cloudapi/ecloud/templates/#{template_id}/computepools/#{compute_pool_id}",
686
+ :type => "application/vnd.tmrk.cloud.template",
687
+ :name => "Sun Solaris 10 (x64)",
688
+ :compute_pool_id => compute_pool_id,
689
+ :OperatingSystem => Fog::Ecloud.keep(operating_system, :href, :name, :type),
690
+ :Memory => {
691
+ :MinimumSize => {
692
+ :Unit => "MB",
693
+ :Value => "800"
694
+ },
695
+ :MaximumSize => {
696
+ :Unit => "MB",
697
+ :Value => "16384"
698
+ },
699
+ :StepFactor => {
700
+ :Unit => "MB",
701
+ :Value => "4"
702
+ }
703
+ },
704
+ :Storage => {
705
+ :Size => {
706
+ :Unit => "GB",
707
+ :Value => "7"
708
+ }
709
+ },
710
+ :NetworkAdapters => "1",
711
+ :Links => {
712
+ :Link => [
713
+ Fog::Ecloud.keep(compute_pool, :href, :name, :type),
714
+ ]
715
+ }
716
+ }
717
+
718
+ operating_system_family = {
719
+ :id => operating_system_family_id,
720
+ :compute_pool_id => compute_pool_id,
721
+ :OperatingSystemFamily => {
722
+ :Name => "Linux",
723
+ :OperatingSystems => {
724
+ :OperatingSystem => [Fog::Ecloud.keep(operating_system, :href, :name, :type)],
725
+ }
726
+ },
727
+ :Links => {
728
+ :Link => [
729
+ Fog::Ecloud.keep(compute_pool, :href, :name, :type),
730
+ ]
731
+ }
732
+ }
733
+
734
+ ssh_key = {
735
+ :id => ssh_key_id,
736
+ :href => "/cloudapi/ecloud/admin/sshKeys/#{ssh_key_id}",
737
+ :name => ssh_key_name,
738
+ :admin_organization_id => organization_id,
739
+ :Links => {
740
+ :Link => [
741
+ Fog::Ecloud.keep(admin_organization, :href, :name, :type),
742
+ Fog::Ecloud.keep(organization, :href, :name, :type),
743
+ ]
744
+ },
745
+ :Default => "true",
746
+ :FingerPrint => Fog::Ecloud.mac_address
747
+ }
748
+
749
+ layout = {
750
+ :id => environment_id,
751
+ :href => "/cloudapi/ecloud/layout/environments/#{environment_id}",
752
+ :type => "application/vnd.tmrk.cloud.deviceLayout",
753
+ :Links => {
754
+ :Link => [
755
+ Fog::Ecloud.keep(environment, :name, :href, :type),
756
+ ],
757
+ },
758
+ :Rows => {
759
+ :Row => [
760
+ ],
761
+ },
762
+ :environment_id => environment_id
763
+ }
764
+
765
+
766
+ {
767
+ :compute_pools => {compute_pool_id => compute_pool},
768
+ :environments => {environment_id => environment},
769
+ :public_ips => {public_ip_id => public_ip},
770
+ :internet_services => {internet_service_id => internet_service},
771
+ :node_services => {node_service_id => node_service},
772
+ :networks => {network_id => network},
773
+ :organizations => {organization_id => organization},
774
+ :admin_organizations => {organization_id => admin_organization},
775
+ :operating_systems => {operating_system_id => operating_system},
776
+ :operating_system_families => {operating_system_family_id => operating_system_family},
777
+ :servers => {},
778
+ :tasks => {},
779
+ :templates => {template_id => template},
780
+ :ssh_keys => {ssh_key_id => ssh_key},
781
+ :detached_disks => {},
782
+ :template_href => (Fog.credentials[:ecloud_template_href] || "/cloudapi/ecloud/templates/#{template_id}/computepools/#{compute_pool_id}"),
783
+ :rows => {},
784
+ :groups => {},
785
+ :layouts => {environment_id => layout},
786
+ }
787
+ end
788
+ end
789
+ end
790
+
791
+ def self.reset
792
+ @data = nil
793
+ end
794
+
795
+ def initialize(options={})
796
+ @ecloud_api_key = options[:ecloud]
797
+ end
798
+
799
+ def data
800
+ self.class.data[@ecloud_api_key]
801
+ end
802
+
803
+ def reset_data
804
+ self.class.data.delete(@ecloud_api_key)
805
+ end
806
+
807
+ def response(params={})
808
+ body = params[:body]
809
+ headers = {
810
+ "Content-Type" => "application/xml"
811
+ }.merge(params[:headers] || {})
812
+ status = params[:status] || 200
813
+
814
+ response = Excon::Response.new(:body => body, :headers => headers, :status => status)
815
+ if params.has_key?(:expects) && ![*params[:expects]].include?(response.status)
816
+ raise(Excon::Errors.status_error(params, response))
817
+ else response
818
+ end
819
+ end
820
+
821
+ def deep_copy(o)
822
+ Marshal.load(Marshal.dump(o))
823
+ end
824
+ end
513
825
  end
514
826
  end
515
827
  end