gapinc-fog 1.12.1.2.1 → 1.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (292) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +16 -1
  3. data/Gemfile.1.8.7 +10 -0
  4. data/README.md +23 -2
  5. data/Rakefile +2 -2
  6. data/changelog.txt +276 -0
  7. data/fog.gemspec +4 -6
  8. data/lib/fog/atmos/models/storage/file.rb +2 -2
  9. data/lib/fog/aws/elb.rb +3 -0
  10. data/lib/fog/aws/elb/policy_types.rb +441 -430
  11. data/lib/fog/aws/models/auto_scaling/activities.rb +11 -3
  12. data/lib/fog/aws/models/auto_scaling/groups.rb +6 -3
  13. data/lib/fog/aws/models/auto_scaling/policies.rb +7 -3
  14. data/lib/fog/aws/models/compute/volume.rb +1 -1
  15. data/lib/fog/aws/models/elb/backend_server_description.rb +11 -0
  16. data/lib/fog/aws/models/elb/backend_server_descriptions.rb +22 -0
  17. data/lib/fog/aws/models/elb/load_balancer.rb +15 -2
  18. data/lib/fog/aws/models/elb/policies.rb +28 -13
  19. data/lib/fog/aws/models/elb/policy.rb +20 -10
  20. data/lib/fog/aws/models/rds/instance_option.rb +21 -0
  21. data/lib/fog/aws/models/rds/instance_options.rb +30 -0
  22. data/lib/fog/aws/models/rds/log_file.rb +26 -0
  23. data/lib/fog/aws/models/rds/log_files.rb +50 -0
  24. data/lib/fog/aws/models/rds/server.rb +1 -0
  25. data/lib/fog/aws/models/rds/snapshots.rb +20 -13
  26. data/lib/fog/aws/parsers/auto_scaling/describe_policies.rb +5 -5
  27. data/lib/fog/aws/parsers/elb/describe_load_balancers.rb +44 -13
  28. data/lib/fog/aws/parsers/rds/db_parser.rb +28 -6
  29. data/lib/fog/aws/parsers/rds/describe_db_log_files.rb +44 -0
  30. data/lib/fog/aws/parsers/rds/describe_orderable_db_instance_options.rb +47 -0
  31. data/lib/fog/aws/parsers/rds/download_db_logfile_portion.rb +26 -0
  32. data/lib/fog/aws/parsers/storage/complete_multipart_upload.rb +1 -1
  33. data/lib/fog/aws/parsers/sts/assume_role.rb +30 -0
  34. data/lib/fog/aws/rds.rb +13 -0
  35. data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_groups.rb +9 -1
  36. data/lib/fog/aws/requests/auto_scaling/describe_policies.rb +15 -1
  37. data/lib/fog/aws/requests/elb/create_app_cookie_stickiness_policy.rb +0 -2
  38. data/lib/fog/aws/requests/elb/create_lb_cookie_stickiness_policy.rb +0 -2
  39. data/lib/fog/aws/requests/elb/create_load_balancer.rb +7 -0
  40. data/lib/fog/aws/requests/elb/create_load_balancer_policy.rb +11 -8
  41. data/lib/fog/aws/requests/elb/describe_load_balancers.rb +21 -1
  42. data/lib/fog/aws/requests/elb/set_load_balancer_policies_for_backend_server.rb +67 -0
  43. data/lib/fog/aws/requests/rds/describe_db_log_files.rb +67 -0
  44. data/lib/fog/aws/requests/rds/describe_orderable_db_instance_options.rb +76 -0
  45. data/lib/fog/aws/requests/rds/download_db_logfile_portion.rb +63 -0
  46. data/lib/fog/aws/requests/ses/send_raw_email.rb +1 -1
  47. data/lib/fog/aws/requests/ses/verify_domain_identity.rb +1 -1
  48. data/lib/fog/aws/requests/storage/complete_multipart_upload.rb +6 -2
  49. data/lib/fog/aws/requests/storage/get_object.rb +1 -1
  50. data/lib/fog/aws/requests/sts/assume_role.rb +46 -0
  51. data/lib/fog/aws/ses.rb +25 -9
  52. data/lib/fog/aws/sts.rb +22 -6
  53. data/lib/fog/bin/openstack.rb +5 -0
  54. data/lib/fog/bin/rackspace.rb +4 -0
  55. data/lib/fog/brightbox/models/compute/collaboration.rb +10 -2
  56. data/lib/fog/brightbox/models/compute/collaborations.rb +26 -2
  57. data/lib/fog/brightbox/models/compute/user_collaboration.rb +16 -1
  58. data/lib/fog/brightbox/models/compute/user_collaborations.rb +10 -2
  59. data/lib/fog/cloudstack/models/compute/servers.rb +1 -1
  60. data/lib/fog/compute/models/server.rb +16 -10
  61. data/lib/fog/core.rb +1 -0
  62. data/lib/fog/core/collection.rb +18 -0
  63. data/lib/fog/core/mock.rb +16 -0
  64. data/lib/fog/digitalocean/compute.rb +32 -3
  65. data/lib/fog/digitalocean/models/compute/server.rb +43 -14
  66. data/lib/fog/digitalocean/models/compute/servers.rb +27 -4
  67. data/lib/fog/digitalocean/models/compute/ssh_keys.rb +2 -3
  68. data/lib/fog/digitalocean/requests/compute/create_server.rb +9 -7
  69. data/lib/fog/digitalocean/requests/compute/destroy_server.rb +3 -0
  70. data/lib/fog/digitalocean/requests/compute/list_images.rb +6 -6
  71. data/lib/fog/dnsimple/dns.rb +4 -1
  72. data/lib/fog/dnsimple/models/dns/record.rb +3 -3
  73. data/lib/fog/dnsimple/requests/dns/create_domain.rb +36 -0
  74. data/lib/fog/dnsimple/requests/dns/create_record.rb +27 -0
  75. data/lib/fog/dnsimple/requests/dns/delete_domain.rb +12 -0
  76. data/lib/fog/dnsimple/requests/dns/delete_record.rb +12 -0
  77. data/lib/fog/dnsimple/requests/dns/get_domain.rb +12 -0
  78. data/lib/fog/dnsimple/requests/dns/get_record.rb +24 -0
  79. data/lib/fog/dnsimple/requests/dns/list_domains.rb +12 -0
  80. data/lib/fog/dnsimple/requests/dns/list_records.rb +12 -0
  81. data/lib/fog/dnsimple/requests/dns/update_record.rb +20 -0
  82. data/lib/fog/glesys/models/compute/server.rb +6 -0
  83. data/lib/fog/google/README.md +28 -0
  84. data/lib/fog/google/Rakefile +17 -0
  85. data/lib/fog/google/examples/bootstrap.rb +9 -0
  86. data/lib/fog/google/examples/create.rb +37 -0
  87. data/lib/fog/google/examples/eric-fail.rb +19 -0
  88. data/lib/fog/google/examples/get_list_images.rb +27 -0
  89. data/lib/fog/google/examples/launch_micro_instance.rb +21 -0
  90. data/lib/fog/google/examples/metadata.rb +18 -0
  91. data/lib/fog/google/models/compute/disks.rb +16 -6
  92. data/lib/fog/google/models/compute/flavors.rb +2 -1
  93. data/lib/fog/google/models/compute/image.rb +16 -17
  94. data/lib/fog/google/models/compute/images.rb +38 -5
  95. data/lib/fog/google/models/compute/server.rb +2 -2
  96. data/lib/fog/google/models/compute/servers.rb +8 -5
  97. data/lib/fog/google/models/storage/file.rb +7 -1
  98. data/lib/fog/google/parsers/storage/access_control_list.rb +2 -2
  99. data/lib/fog/google/requests/compute/insert_server.rb +1 -2
  100. data/lib/fog/google/requests/compute/list_images.rb +3 -2
  101. data/lib/fog/google/requests/storage/get_object.rb +1 -1
  102. data/lib/fog/hp/requests/storage/get_object.rb +1 -1
  103. data/lib/fog/ibm/requests/compute/create_instance.rb +20 -15
  104. data/lib/fog/internet_archive/requests/storage/get_object.rb +1 -1
  105. data/lib/fog/metering.rb +25 -0
  106. data/lib/fog/openstack.rb +2 -1
  107. data/lib/fog/openstack/metering.rb +215 -0
  108. data/lib/fog/openstack/models/compute/server.rb +5 -2
  109. data/lib/fog/openstack/models/metering/resource.rb +24 -0
  110. data/lib/fog/openstack/models/metering/resources.rb +25 -0
  111. data/lib/fog/openstack/models/volume/volume.rb +3 -1
  112. data/lib/fog/openstack/models/volume/volumes.rb +2 -1
  113. data/lib/fog/openstack/network.rb +24 -1
  114. data/lib/fog/openstack/requests/compute/create_server.rb +19 -1
  115. data/lib/fog/openstack/requests/compute/get_host_details.rb +2 -1
  116. data/lib/fog/openstack/requests/metering/get_resource.rb +32 -0
  117. data/lib/fog/openstack/requests/metering/get_samples.rb +55 -0
  118. data/lib/fog/openstack/requests/metering/get_statistics.rb +56 -0
  119. data/lib/fog/openstack/requests/metering/list_meters.rb +50 -0
  120. data/lib/fog/openstack/requests/metering/list_resources.rb +32 -0
  121. data/lib/fog/openstack/requests/network/delete_quota.rb +26 -0
  122. data/lib/fog/openstack/requests/network/get_quota.rb +31 -0
  123. data/lib/fog/openstack/requests/network/get_quotas.rb +31 -0
  124. data/lib/fog/openstack/requests/network/update_quota.rb +33 -0
  125. data/lib/fog/openstack/requests/storage/put_object.rb +8 -5
  126. data/lib/fog/openstack/requests/volume/create_volume.rb +4 -2
  127. data/lib/fog/rackspace.rb +24 -4
  128. data/lib/fog/rackspace/block_storage.rb +8 -4
  129. data/lib/fog/rackspace/cdn.rb +21 -4
  130. data/lib/fog/rackspace/compute_v2.rb +15 -4
  131. data/lib/fog/rackspace/errors.rb +12 -5
  132. data/lib/fog/rackspace/mock_data.rb +18 -7
  133. data/lib/fog/rackspace/models/compute_v2/key_pair.rb +56 -0
  134. data/lib/fog/rackspace/models/compute_v2/key_pairs.rb +43 -0
  135. data/lib/fog/rackspace/models/compute_v2/server.rb +7 -2
  136. data/lib/fog/rackspace/models/compute_v2/servers.rb +2 -1
  137. data/lib/fog/rackspace/models/identity/service_catalog.rb +34 -16
  138. data/lib/fog/rackspace/models/monitoring/agent_token.rb +40 -0
  139. data/lib/fog/rackspace/models/monitoring/agent_tokens.rb +28 -0
  140. data/lib/fog/rackspace/models/monitoring/alarm.rb +51 -0
  141. data/lib/fog/rackspace/models/monitoring/alarm_example.rb +26 -0
  142. data/lib/fog/rackspace/models/monitoring/alarm_examples.rb +31 -0
  143. data/lib/fog/rackspace/models/monitoring/alarms.rb +40 -0
  144. data/lib/fog/rackspace/models/monitoring/base.rb +36 -0
  145. data/lib/fog/rackspace/models/monitoring/check.rb +75 -0
  146. data/lib/fog/rackspace/models/monitoring/check_type.rb +15 -0
  147. data/lib/fog/rackspace/models/monitoring/check_types.rb +23 -0
  148. data/lib/fog/rackspace/models/monitoring/checks.rb +40 -0
  149. data/lib/fog/rackspace/models/monitoring/data_point.rb +18 -0
  150. data/lib/fog/rackspace/models/monitoring/data_points.rb +49 -0
  151. data/lib/fog/rackspace/models/monitoring/entities.rb +48 -0
  152. data/lib/fog/rackspace/models/monitoring/entity.rb +64 -0
  153. data/lib/fog/rackspace/models/monitoring/metric.rb +25 -0
  154. data/lib/fog/rackspace/models/monitoring/metrics.rb +27 -0
  155. data/lib/fog/rackspace/monitoring.rb +149 -0
  156. data/lib/fog/rackspace/requests/compute_v2/create_keypair.rb +53 -0
  157. data/lib/fog/rackspace/requests/compute_v2/create_server.rb +10 -8
  158. data/lib/fog/rackspace/requests/compute_v2/delete_keypair.rb +36 -0
  159. data/lib/fog/rackspace/requests/compute_v2/get_keypair.rb +41 -0
  160. data/lib/fog/rackspace/requests/compute_v2/list_keypairs.rb +37 -0
  161. data/lib/fog/rackspace/requests/monitoring/create_agent_token.rb +19 -0
  162. data/lib/fog/rackspace/requests/monitoring/create_alarm.rb +19 -0
  163. data/lib/fog/rackspace/requests/monitoring/create_check.rb +19 -0
  164. data/lib/fog/rackspace/requests/monitoring/create_entity.rb +19 -0
  165. data/lib/fog/rackspace/requests/monitoring/delete_agent_token.rb +17 -0
  166. data/lib/fog/rackspace/requests/monitoring/delete_alarm.rb +18 -0
  167. data/lib/fog/rackspace/requests/monitoring/delete_check.rb +17 -0
  168. data/lib/fog/rackspace/requests/monitoring/delete_entity.rb +17 -0
  169. data/lib/fog/rackspace/requests/monitoring/evaluate_alarm_example.rb +21 -0
  170. data/lib/fog/rackspace/requests/monitoring/get_agent_token.rb +19 -0
  171. data/lib/fog/rackspace/requests/monitoring/get_alarm.rb +19 -0
  172. data/lib/fog/rackspace/requests/monitoring/get_alarm_example.rb +19 -0
  173. data/lib/fog/rackspace/requests/monitoring/get_check.rb +19 -0
  174. data/lib/fog/rackspace/requests/monitoring/get_entity.rb +19 -0
  175. data/lib/fog/rackspace/requests/monitoring/list_agent_tokens.rb +19 -0
  176. data/lib/fog/rackspace/requests/monitoring/list_alarm_examples.rb +18 -0
  177. data/lib/fog/rackspace/requests/monitoring/list_alarms.rb +18 -0
  178. data/lib/fog/rackspace/requests/monitoring/list_check_types.rb +17 -0
  179. data/lib/fog/rackspace/requests/monitoring/list_checks.rb +18 -0
  180. data/lib/fog/rackspace/requests/monitoring/list_data_points.rb +18 -0
  181. data/lib/fog/rackspace/requests/monitoring/list_entities.rb +19 -0
  182. data/lib/fog/rackspace/requests/monitoring/list_metrics.rb +18 -0
  183. data/lib/fog/rackspace/requests/monitoring/list_notification_plans.rb +18 -0
  184. data/lib/fog/rackspace/requests/monitoring/list_overview.rb +19 -0
  185. data/lib/fog/rackspace/requests/monitoring/update_alarm.rb +18 -0
  186. data/lib/fog/rackspace/requests/monitoring/update_check.rb +18 -0
  187. data/lib/fog/rackspace/requests/monitoring/update_entity.rb +18 -0
  188. data/lib/fog/rackspace/requests/storage/delete_multiple_objects.rb +75 -0
  189. data/lib/fog/rackspace/requests/storage/delete_static_large_object.rb +50 -0
  190. data/lib/fog/rackspace/requests/storage/put_dynamic_obj_manifest.rb +44 -0
  191. data/lib/fog/rackspace/requests/storage/put_object.rb +1 -1
  192. data/lib/fog/rackspace/requests/storage/put_object_manifest.rb +3 -30
  193. data/lib/fog/rackspace/requests/storage/put_static_obj_manifest.rb +60 -0
  194. data/lib/fog/rackspace/storage.rb +24 -16
  195. data/lib/fog/riakcs/provisioning.rb +2 -1
  196. data/lib/fog/riakcs/usage.rb +2 -1
  197. data/lib/fog/vcloud/compute.rb +1 -1
  198. data/lib/fog/vcloud/requests/compute/configure_vm.rb +2 -2
  199. data/lib/fog/version.rb +1 -1
  200. data/lib/fog/vsphere/compute.rb +131 -0
  201. data/lib/fog/vsphere/models/compute/server.rb +5 -1
  202. data/lib/fog/vsphere/requests/compute/get_datacenter.rb +3 -1
  203. data/lib/fog/vsphere/requests/compute/get_virtual_machine.rb +20 -38
  204. data/lib/fog/vsphere/requests/compute/list_datacenters.rb +1 -0
  205. data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +8 -114
  206. data/lib/fog/vsphere/requests/compute/vm_clone.rb +18 -9
  207. data/lib/fog/vsphere/requests/compute/vm_power_off.rb +2 -0
  208. data/lib/fog/xenserver/compute.rb +14 -12
  209. data/lib/fog/xenserver/models/compute/console.rb +27 -0
  210. data/lib/fog/xenserver/models/compute/consoles.rb +25 -0
  211. data/lib/fog/xenserver/models/compute/server.rb +6 -2
  212. data/lib/fog/xenserver/models/compute/servers.rb +5 -0
  213. data/lib/fog/xenserver/requests/compute/create_server.rb +4 -0
  214. data/lib/fog/xml/sax_parser_connection.rb +3 -0
  215. data/lib/tasks/changelog_task.rb +2 -0
  216. data/tests/aws/models/compute/volume_tests.rb +1 -1
  217. data/tests/aws/models/elb/model_tests.rb +28 -1
  218. data/tests/aws/models/rds/instance_option_tests.rb +14 -0
  219. data/tests/aws/parsers/elb/describe_load_balancers.rb +65 -0
  220. data/tests/aws/requests/elb/helper.rb +2 -1
  221. data/tests/aws/requests/elb/listener_tests.rb +1 -1
  222. data/tests/aws/requests/elb/load_balancer_tests.rb +5 -1
  223. data/tests/aws/requests/elb/policy_tests.rb +85 -6
  224. data/tests/aws/requests/iam/helper.rb +4 -1
  225. data/tests/aws/requests/iam/server_certificate_tests.rb +2 -2
  226. data/tests/aws/requests/rds/helper.rb +35 -0
  227. data/tests/aws/requests/rds/instance_option_tests.rb +21 -0
  228. data/tests/aws/requests/rds/log_file_tests.rb +19 -0
  229. data/tests/aws/requests/sts/assume_role_tests.rb +19 -0
  230. data/tests/core/mocking_tests.rb +15 -0
  231. data/tests/digitalocean/helper.rb +23 -16
  232. data/tests/digitalocean/models/compute/flavor_tests.rb +2 -2
  233. data/tests/digitalocean/models/compute/image_tests.rb +2 -2
  234. data/tests/digitalocean/models/compute/region_tests.rb +2 -2
  235. data/tests/digitalocean/models/compute/server_tests.rb +11 -3
  236. data/tests/digitalocean/models/compute/servers_tests.rb +14 -28
  237. data/tests/digitalocean/models/compute/ssh_key_tests.rb +7 -3
  238. data/tests/digitalocean/models/compute/ssh_keys_tests.rb +5 -1
  239. data/tests/digitalocean/requests/compute/create_server_tests.rb +3 -6
  240. data/tests/digitalocean/requests/compute/destroy_server_tests.rb +1 -2
  241. data/tests/digitalocean/requests/compute/get_server_details_tests.rb +1 -1
  242. data/tests/digitalocean/requests/compute/get_ssh_key_tests.rb +4 -1
  243. data/tests/digitalocean/requests/compute/list_ssh_keys_tests.rb +5 -2
  244. data/tests/dnsimple/requests/dns/dns_tests.rb +30 -26
  245. data/tests/helper.rb +2 -2
  246. data/tests/helpers/collection_helper.rb +4 -4
  247. data/tests/helpers/mock_helper.rb +2 -0
  248. data/tests/openstack/requests/metering/meter_tests.rb +52 -0
  249. data/tests/openstack/requests/metering/resource_tests.rb +19 -0
  250. data/tests/openstack/requests/network/quota_tests.rb +65 -0
  251. data/tests/openstack/requests/storage/object_tests.rb +27 -2
  252. data/tests/rackspace/block_storage_tests.rb +2 -1
  253. data/tests/rackspace/cdn_tests.rb +9 -0
  254. data/tests/rackspace/compute_v2_tests.rb +16 -15
  255. data/tests/rackspace/databases_tests.rb +1 -1
  256. data/tests/rackspace/load_balancer_tests.rb +1 -1
  257. data/tests/rackspace/models/compute_v2/keypairs_tests.rb +47 -0
  258. data/tests/rackspace/models/identity/service_catalog_tests.rb +54 -29
  259. data/tests/rackspace/models/monitoring/agent_token_tests.rb +9 -0
  260. data/tests/rackspace/models/monitoring/agent_tokens_tests.rb +9 -0
  261. data/tests/rackspace/models/monitoring/alarm_example_tests.rb +18 -0
  262. data/tests/rackspace/models/monitoring/alarm_examples_tests.rb +19 -0
  263. data/tests/rackspace/models/monitoring/alarm_tests.rb +56 -0
  264. data/tests/rackspace/models/monitoring/alarms_tests.rb +25 -0
  265. data/tests/rackspace/models/monitoring/check_tests.rb +50 -0
  266. data/tests/rackspace/models/monitoring/check_types_tests.rb +14 -0
  267. data/tests/rackspace/models/monitoring/checks_tests.rb +16 -0
  268. data/tests/rackspace/models/monitoring/data_points_tests.rb +19 -0
  269. data/tests/rackspace/models/monitoring/entities_tests.rb +14 -0
  270. data/tests/rackspace/models/monitoring/entity_tests.rb +26 -0
  271. data/tests/rackspace/models/monitoring/metric_tests.rb +19 -0
  272. data/tests/rackspace/models/monitoring/metrics_tests.rb +17 -0
  273. data/tests/rackspace/monitoring_tests.rb +72 -0
  274. data/tests/rackspace/requests/compute_v2/keypair_tests.rb +55 -0
  275. data/tests/rackspace/requests/monitoring/agent_tests.rb +34 -0
  276. data/tests/rackspace/requests/monitoring/alarm_example_tests.rb +30 -0
  277. data/tests/rackspace/requests/monitoring/alarm_tests.rb +56 -0
  278. data/tests/rackspace/requests/monitoring/check_tests.rb +40 -0
  279. data/tests/rackspace/requests/monitoring/entity_tests.rb +37 -0
  280. data/tests/rackspace/requests/monitoring/helper.rb +78 -0
  281. data/tests/rackspace/requests/monitoring/list_tests.rb +60 -0
  282. data/tests/rackspace/requests/storage/large_object_tests.rb +303 -59
  283. data/tests/rackspace/requests/storage/object_tests.rb +73 -18
  284. data/tests/vsphere/models/compute/server_tests.rb +1 -1
  285. data/tests/vsphere/requests/compute/list_virtual_machines_tests.rb +2 -2
  286. data/tests/vsphere/requests/compute/vm_clone_tests.rb +14 -8
  287. data/tests/xenserver/compute_tests.rb +5 -5
  288. data/tests/xenserver/models/compute/console_test.rb +35 -0
  289. data/tests/xenserver/models/compute/consoles_test.rb +19 -0
  290. data/tests/xenserver/models/compute/server_tests.rb +25 -18
  291. data/tests/xenserver/models/compute/servers_tests.rb +1 -0
  292. metadata +177 -14
@@ -16,6 +16,18 @@ module Fog
16
16
  end
17
17
 
18
18
  end
19
+
20
+ class Mock
21
+
22
+ def delete_record(domain, record_id)
23
+ self.data[:records][domain].reject! { |record| record["record"]["id"] == record_id }
24
+ response = Excon::Response.new
25
+ response.status = 200
26
+ response
27
+ end
28
+
29
+ end
30
+
19
31
  end
20
32
  end
21
33
  end
@@ -32,6 +32,18 @@ module Fog
32
32
  end
33
33
 
34
34
  end
35
+
36
+ class Mock
37
+
38
+ def get_domain(id)
39
+ domain = self.data[:domains].detect { |domain| domain["domain"]["id"] == id }
40
+ response = Excon::Response.new
41
+ response.status = 200
42
+ response.body = domain
43
+ response
44
+ end
45
+
46
+ end
35
47
  end
36
48
  end
37
49
  end
@@ -29,6 +29,30 @@ module Fog
29
29
  end
30
30
 
31
31
  end
32
+
33
+ class Mock
34
+
35
+ def get_record(domain, record_id)
36
+ response = Excon::Response.new
37
+ if self.data[:records].has_key? domain
38
+ response.status = 200
39
+ response.body = self.data[:records][domain].detect { |record| record["record"]["id"] == record_id }
40
+
41
+ if response.body.nil?
42
+ response.status = 404
43
+ response.body = {
44
+ "error" => "Couldn't find Record with id = #{record_id}"
45
+ }
46
+ end
47
+ else
48
+ response.status = 404
49
+ response.body = {
50
+ "error" => "Couldn't find Domain with name = #{domain}"
51
+ }
52
+ end
53
+ response
54
+ end
55
+ end
32
56
  end
33
57
  end
34
58
  end
@@ -30,6 +30,18 @@ module Fog
30
30
  end
31
31
 
32
32
  end
33
+
34
+ class Mock
35
+
36
+ def list_domains
37
+ response = Excon::Response.new
38
+ response.status = 200
39
+ response.body = self.data[:domains]
40
+ response
41
+ end
42
+
43
+ end
44
+
33
45
  end
34
46
  end
35
47
  end
@@ -27,6 +27,18 @@ module Fog
27
27
  end
28
28
 
29
29
  end
30
+
31
+ class Mock
32
+
33
+ def list_records(domain)
34
+ response = Excon::Response.new
35
+ response.status = 200
36
+ response.body = self.data[:records][domain] || []
37
+ response
38
+ end
39
+
40
+ end
41
+
30
42
  end
31
43
  end
32
44
  end
@@ -37,6 +37,26 @@ module Fog
37
37
  end
38
38
 
39
39
  end
40
+
41
+ class Mock
42
+
43
+ def update_record(domain, record_id, options)
44
+ record = self.data[:records][domain].detect { |record| record["record"]["id"] == record_id }
45
+ response = Excon::Response.new
46
+
47
+ if record.nil?
48
+ response.status = 400
49
+ else
50
+ response.status = 200
51
+ record["record"].merge!(options)
52
+ record["record"]["updated_at"] = Time.now.iso8601
53
+ response.body = record
54
+ end
55
+
56
+ response
57
+ end
58
+
59
+ end
40
60
  end
41
61
  end
42
62
  end
@@ -67,6 +67,12 @@ module Fog
67
67
  :rootpassword => rootpassword,
68
68
  :transfer => transfer || "500",
69
69
  }
70
+
71
+ # optional options when creating a server:
72
+ [:ip, :ipv6, :description].each do |k|
73
+ options[k] = attributes[k] if attributes[k]
74
+ end
75
+
70
76
  data = service.create(options)
71
77
  merge_attributes(data.body['response']['server'])
72
78
  data.status == 200 ? true : false
@@ -0,0 +1,28 @@
1
+ # Fog with Google
2
+
3
+ Fog currently supports two Google Cloud services: [Google Compute Engine](https://developers.google.com/compute/) and [Google Cloud Storage](https://developers.google.com/storage/). The main maintainer for the Google sections is @icco.
4
+
5
+ ## Storage
6
+
7
+ Google Cloud Storage originally was very similar to Amazon's S3. Because of this, Fog implements the [XML GCS API](https://developers.google.com/storage/docs/xml-api-overview). We eventually want to move to the new [JSON API](https://developers.google.com/storage/docs/json_api/), once it has similar performance characteristics to the XML API. If this migration interests you, send us a pull request!
8
+
9
+ ## Compute
10
+
11
+ Google Compute Engine is a Virtual Machine hosting service. Currently it is built on version [v1beta15](https://developers.google.com/compute/docs/reference/v1beta15/) of the GCE API.
12
+
13
+ Our implementation of the API currently supports
14
+
15
+ * Server creation, deletion and bootstrapping
16
+ * All server "flavors" (micro and normal)
17
+ * Persistent Disk creation and deletion
18
+ * Image lookup
19
+
20
+ Features we are looking forward to implementing in the future:
21
+
22
+ * Network and Firewall configuration
23
+ * Global Metadata support
24
+ * Image creation
25
+
26
+ v1beta15 is still in beta, so we can imagine lots of changes to the API. If you are using Fog to interact with GCE, please keep Fog up to date and [file issues](https://github.com/fog/fog/issues?labels=google) for any anomalies you see.
27
+
28
+ Thanks!
@@ -0,0 +1,17 @@
1
+ namespace :google do
2
+ namespace :smoke do
3
+
4
+ desc "Smoke tests for Google Compute Engine."
5
+ task :compute do
6
+ require 'fog'
7
+
8
+ puts "These smoke tests assume you have a file at ~/.fog which has your credentials for connecting to GCE."
9
+
10
+ Dir.glob("./examples/*.rb").each do |file|
11
+ puts "Running #{file}:"
12
+ require file
13
+ test()
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ def test
2
+ connection = Fog::Compute.new({ :provider => "Google" })
3
+
4
+ server = connection.servers.bootstrap
5
+ server.wait_for { sshable? }
6
+
7
+ raise "Could not bootstrap sshable server." unless server.ssh("whoami")
8
+ raise "Cloud note delete server." unless server.destroy
9
+ end
@@ -0,0 +1,37 @@
1
+ def test
2
+ connection = Fog::Compute.new({ :provider => "Google" })
3
+
4
+ server = connection.servers.create(defaults = {
5
+ :name => "fog-smoke-test-#{Time.now.to_i}",
6
+ :image_name => "debian-7-wheezy-v20130522",
7
+ :machine_type => "n1-standard-1",
8
+ :zone_name => "us-central1-a",
9
+ :private_key_path => File.expand_path("~/.ssh/id_rsa"),
10
+ :public_key_path => File.expand_path("~/.ssh/id_rsa.pub"),
11
+ :user => ENV['USER'],
12
+ })
13
+
14
+ # My own wait_for because it hides errors
15
+ duration = 0
16
+ interval = 5
17
+ timeout = 600
18
+ start = Time.now
19
+ until server.sshable? || duration > timeout
20
+ # puts duration
21
+ # puts " ----- "
22
+
23
+ server.reload
24
+
25
+ # p "ready?: #{server.ready?}"
26
+ # p "public_ip_address: #{server.public_ip_address.inspect}"
27
+ # p "public_key: #{server.public_key.inspect}"
28
+ # p "metadata: #{server.metadata.inspect}"
29
+ # p "sshable?: #{server.sshable?}"
30
+
31
+ sleep(interval.to_f)
32
+ duration = Time.now - start
33
+ end
34
+
35
+ raise "Could not bootstrap sshable server." unless server.ssh("whoami")
36
+ raise "Cloud note delete server." unless server.destroy
37
+ end
@@ -0,0 +1,19 @@
1
+ def test
2
+ connection = Fog::Compute.new({ :provider => "Google" })
3
+
4
+ server = connection.servers.create(defaults = {
5
+ :name => "fog-smoke-test-#{Time.now.to_i}",
6
+ :image_name => "debian-7-wheezy-v20130617",
7
+ :machine_type => "n1-standard-1",
8
+ :zone_name => "us-central1-a",
9
+ :private_key_path => File.expand_path("~/.ssh/id_rsa"),
10
+ :public_key_path => File.expand_path("~/.ssh/id_rsa.pub"),
11
+ :username => 'root',
12
+ :metadata => {'foo' => 'bar'}
13
+ })
14
+ sleep(30)
15
+
16
+ raise "Could not reload created server." unless server.reload
17
+ raise "Could not create sshable server." unless server.ssh("whoami")
18
+ raise "Cloud note delete server." unless server.destroy
19
+ end
@@ -0,0 +1,27 @@
1
+ def test
2
+ connection = Fog::Compute.new({ :provider => "Google" })
3
+
4
+ # puts 'Listing images in all projects...'
5
+ # puts '---------------------------------'
6
+ images = connection.images.all
7
+ raise 'Could not LIST the images' unless images
8
+ # puts images.inspect
9
+
10
+ # puts 'Fetching a single image from a global project...'
11
+ # puts '------------------------------------------------'
12
+ img = connection.images.get('debian-6-squeeze-v20130515')
13
+ raise 'Could not GET the image' unless img
14
+ # puts img.inspect
15
+
16
+ # First, get the name of an image that is in the users 'project' (not global)
17
+ custom_img_name = images.detect { |img| img.project == img.service.project }
18
+ # Run the next test only if there is a custom image available
19
+ if custom_img_name
20
+ # puts 'Fetching a single image from the custom project'
21
+ # puts '----------------------------------------------'
22
+ img = connection.images.get(custom_img_name)
23
+ raise 'Could not GET the (custom) image' unless img
24
+ # puts img.inspect
25
+ end
26
+
27
+ end
@@ -0,0 +1,21 @@
1
+ def test
2
+ connection = Fog::Compute.new({ :provider => "Google" })
3
+ time = Time.now.utc.to_i
4
+ disk = connection.disks.create({:name => 'foggydisk', :size_gb => 10, :zone_name => 'us-central1-a', :image_name => 'centos-6-v20130522'})
5
+
6
+ disk.wait_for { disk.ready? }
7
+ params = {
8
+ :name => "fog-smoke-test-#{Time.now.to_i}",
9
+ :machine_type => "f1-micro",
10
+ :zone_name => "us-central1-a",
11
+ :disks => [ disk.get_as_boot_disk(true) ],
12
+ :kernel => 'gce-v20130522',
13
+ :user => ENV['USER']
14
+ }
15
+
16
+ server = connection.servers.bootstrap params
17
+
18
+ raise "Could not bootstrap sshable server." unless server.ssh("whoami")
19
+ raise "Could not delete server." unless server.destroy
20
+ raise "Could not delete disk." unless disk.destroy
21
+ end
@@ -0,0 +1,18 @@
1
+ def test
2
+ connection = Fog::Compute.new({ :provider => "Google" })
3
+ server = connection.servers.create(defaults = {
4
+ :name => "fog-#{Time.now.to_i}",
5
+ :image_name => "debian-7-wheezy-v20130522",
6
+ :machine_type => "n1-standard-1",
7
+ :zone_name => "us-central1-a",
8
+ :private_key_path => File.expand_path("~/.ssh/id_rsa"),
9
+ :public_key_path => File.expand_path("~/.ssh/id_rsa.pub"),
10
+ })
11
+
12
+ server.wait_for { ready? }
13
+
14
+ server.metadata["test"] = "foo"
15
+
16
+ raise "Metadata was not set." unless server.metadata["test"] == "foo"
17
+ raise "Could not delete server." unless server.destroy
18
+ end
@@ -10,15 +10,25 @@ module Fog
10
10
  model Fog::Compute::Google::Disk
11
11
 
12
12
  def all(zone)
13
- data = service.list_disks(zone).body["items"]
13
+ data = service.list_disks(zone).body["items"] || []
14
14
  load(data)
15
15
  end
16
16
 
17
- def get(identity, zone)
18
- data = service.get_disk(identity, zone).body
19
- new(data)
20
- rescue Excon::Errors::NotFound
21
- nil
17
+ def get(identity, zone=nil)
18
+ response = nil
19
+ if zone.nil?
20
+ service.list_zones.body['items'].each do |zone|
21
+ begin
22
+ response = service.get_disk(identity, zone['name'])
23
+ break if response.status == 200
24
+ rescue Fog::Errors::Error
25
+ end
26
+ end
27
+ else
28
+ response = service.get_disk(identity, zone)
29
+ end
30
+ return nil if response.nil?
31
+ new(response.body)
22
32
  end
23
33
 
24
34
  end
@@ -10,7 +10,8 @@ module Fog
10
10
  model Fog::Compute::Google::Flavor
11
11
 
12
12
  def all
13
- data = connection.list_machine_types.body["items"]
13
+ zone = service.list_zones.body['items'].first
14
+ data = connection.list_machine_types(zone['name']).body["items"]
14
15
  load(data)
15
16
  end
16
17
 
@@ -12,28 +12,27 @@ module Fog
12
12
  attribute :creation_timestamp, :aliases => 'creationTimestamp'
13
13
  attribute :description
14
14
  attribute :preferred_kernel, :aliases => 'preferredKernel'
15
+
16
+ # This attribute is not available in the representation of an
17
+ # 'image' returned by the GCE servser (see GCE API). However,
18
+ # images are a global resource and a user can query for images
19
+ # across projects. Therefore we try to remember which project
20
+ # the image belongs to by tracking it in this attribute.
15
21
  attribute :project
16
22
 
23
+ # A RawDisk, e.g. -
24
+ # {
25
+ # :source => url_to_gcs_file,
26
+ # :container_type => 'TAR',
27
+ # :sha1Checksum => ,
28
+ # }
29
+ attribute :raw_disk
30
+
31
+
17
32
  def reload
18
33
  requires :name
19
34
 
20
- data = {}
21
-
22
- # Try looking for the image in known projects
23
- [
24
- self.service.project,
25
- 'google',
26
- 'debian-cloud',
27
- 'centos-cloud',
28
- ].each do |owner|
29
- begin
30
- data = service.get_image(name, owner).body
31
- data[:project] = owner
32
- rescue
33
- end
34
- end
35
-
36
- raise ArgumentError, 'Specified image was not found' if data.empty?
35
+ data = service.get_image(name, self.project).body
37
36
 
38
37
  self.merge_attributes(data)
39
38
  self
@@ -9,20 +9,53 @@ module Fog
9
9
 
10
10
  model Fog::Compute::Google::Image
11
11
 
12
+ GLOBAL_PROJECTS = [ 'google',
13
+ 'debian-cloud',
14
+ 'centos-cloud',
15
+ ]
16
+
12
17
  def all
13
- data = connection.list_images.body["items"]
18
+ data = []
19
+ all_projects = GLOBAL_PROJECTS + [ self.service.project ]
20
+
21
+ all_projects.each do |project|
22
+ images = service.list_images(project).body["items"] || []
23
+
24
+ # Keep track of the project in which we found the image(s)
25
+ images.each { |img| img[:project] = project }
26
+ data += images
27
+ end
28
+
14
29
  load(data)
15
30
  end
16
31
 
17
32
  def get(identity)
18
- data = connection.get_image(identity).body
33
+ # Search own project before global projects
34
+ all_projects = [ self.service.project ] + GLOBAL_PROJECTS
35
+
36
+ data = nil
37
+ all_projects.each do |project|
38
+ begin
39
+ data = service.get_image(identity, project).body
40
+ data[:project] = project
41
+ rescue Fog::Errors::Error
42
+ next
43
+ else
44
+ break
45
+ end
46
+ end
47
+
48
+ # If it wasn't found in any project, raise
49
+ if data.nil?
50
+ raise Fog::Errors::Error.new('Unable to find the specified image '\
51
+ 'in the following projects: '\
52
+ "#{all_projects.join(', ')}")
53
+ end
54
+
19
55
  new(data)
20
- rescue Excon::Errors::NotFound
21
- nil
22
56
  end
23
57
 
24
58
  end
25
-
26
59
  end
27
60
  end
28
61
  end