fog 1.14.0 → 1.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (288) hide show
  1. data/.gitignore +1 -0
  2. data/Rakefile +2 -2
  3. data/changelog.txt +296 -0
  4. data/fog.gemspec +2 -2
  5. data/lib/fog/atmos/models/storage/file.rb +2 -2
  6. data/lib/fog/aws/compute.rb +42 -2
  7. data/lib/fog/aws/elb.rb +3 -0
  8. data/lib/fog/aws/elb/policy_types.rb +441 -430
  9. data/lib/fog/aws/models/auto_scaling/activities.rb +11 -3
  10. data/lib/fog/aws/models/auto_scaling/groups.rb +6 -3
  11. data/lib/fog/aws/models/auto_scaling/policies.rb +7 -3
  12. data/lib/fog/aws/models/compute/flavors.rb +19 -0
  13. data/lib/fog/aws/models/compute/volume.rb +1 -1
  14. data/lib/fog/aws/models/elb/backend_server_description.rb +11 -0
  15. data/lib/fog/aws/models/elb/backend_server_descriptions.rb +22 -0
  16. data/lib/fog/aws/models/elb/load_balancer.rb +15 -2
  17. data/lib/fog/aws/models/elb/policies.rb +28 -13
  18. data/lib/fog/aws/models/elb/policy.rb +20 -10
  19. data/lib/fog/aws/models/rds/instance_option.rb +21 -0
  20. data/lib/fog/aws/models/rds/instance_options.rb +30 -0
  21. data/lib/fog/aws/models/rds/server.rb +1 -0
  22. data/lib/fog/aws/parsers/auto_scaling/describe_policies.rb +5 -5
  23. data/lib/fog/aws/parsers/compute/describe_account_attributes.rb +42 -0
  24. data/lib/fog/aws/parsers/elb/describe_load_balancers.rb +44 -13
  25. data/lib/fog/aws/parsers/rds/db_parser.rb +28 -6
  26. data/lib/fog/aws/parsers/rds/describe_orderable_db_instance_options.rb +47 -0
  27. data/lib/fog/aws/rds.rb +5 -0
  28. data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_groups.rb +9 -1
  29. data/lib/fog/aws/requests/auto_scaling/describe_policies.rb +15 -1
  30. data/lib/fog/aws/requests/compute/describe_account_attributes.rb +49 -0
  31. data/lib/fog/aws/requests/elb/create_app_cookie_stickiness_policy.rb +0 -2
  32. data/lib/fog/aws/requests/elb/create_lb_cookie_stickiness_policy.rb +0 -2
  33. data/lib/fog/aws/requests/elb/create_load_balancer.rb +30 -9
  34. data/lib/fog/aws/requests/elb/create_load_balancer_policy.rb +11 -8
  35. data/lib/fog/aws/requests/elb/describe_load_balancers.rb +21 -1
  36. data/lib/fog/aws/requests/elb/set_load_balancer_policies_for_backend_server.rb +67 -0
  37. data/lib/fog/aws/requests/iam/upload_server_certificate.rb +1 -1
  38. data/lib/fog/aws/requests/rds/describe_orderable_db_instance_options.rb +76 -0
  39. data/lib/fog/aws/requests/ses/verify_domain_identity.rb +1 -1
  40. data/lib/fog/bin/rackspace.rb +4 -0
  41. data/lib/fog/brightbox/models/compute/collaboration.rb +10 -2
  42. data/lib/fog/brightbox/models/compute/collaborations.rb +26 -2
  43. data/lib/fog/brightbox/models/compute/user_collaboration.rb +16 -1
  44. data/lib/fog/brightbox/models/compute/user_collaborations.rb +10 -2
  45. data/lib/fog/cloudstack/models/compute/server.rb +4 -0
  46. data/lib/fog/cloudstack/models/compute/servers.rb +1 -1
  47. data/lib/fog/compute/models/server.rb +16 -10
  48. data/lib/fog/core.rb +1 -0
  49. data/lib/fog/core/collection.rb +18 -0
  50. data/lib/fog/core/credentials.rb +6 -1
  51. data/lib/fog/core/mock.rb +16 -0
  52. data/lib/fog/digitalocean/compute.rb +32 -3
  53. data/lib/fog/digitalocean/models/compute/server.rb +43 -14
  54. data/lib/fog/digitalocean/models/compute/servers.rb +27 -4
  55. data/lib/fog/digitalocean/models/compute/ssh_keys.rb +2 -3
  56. data/lib/fog/digitalocean/requests/compute/create_server.rb +9 -7
  57. data/lib/fog/digitalocean/requests/compute/destroy_server.rb +3 -0
  58. data/lib/fog/digitalocean/requests/compute/list_images.rb +6 -6
  59. data/lib/fog/dnsimple/dns.rb +4 -1
  60. data/lib/fog/dnsimple/models/dns/record.rb +3 -3
  61. data/lib/fog/dnsimple/requests/dns/create_domain.rb +36 -0
  62. data/lib/fog/dnsimple/requests/dns/create_record.rb +27 -0
  63. data/lib/fog/dnsimple/requests/dns/delete_domain.rb +12 -0
  64. data/lib/fog/dnsimple/requests/dns/delete_record.rb +12 -0
  65. data/lib/fog/dnsimple/requests/dns/get_domain.rb +12 -0
  66. data/lib/fog/dnsimple/requests/dns/get_record.rb +24 -0
  67. data/lib/fog/dnsimple/requests/dns/list_domains.rb +12 -0
  68. data/lib/fog/dnsimple/requests/dns/list_records.rb +12 -0
  69. data/lib/fog/dnsimple/requests/dns/update_record.rb +20 -0
  70. data/lib/fog/glesys/models/compute/server.rb +6 -0
  71. data/lib/fog/google/README.md +28 -0
  72. data/lib/fog/google/Rakefile +17 -0
  73. data/lib/fog/google/compute.rb +5 -0
  74. data/lib/fog/google/examples/bootstrap.rb +9 -0
  75. data/lib/fog/google/examples/create.rb +37 -0
  76. data/lib/fog/google/examples/eric-fail.rb +19 -0
  77. data/lib/fog/google/examples/get_list_images.rb +27 -0
  78. data/lib/fog/google/examples/get_list_snapshots.rb +20 -0
  79. data/lib/fog/google/examples/image_create.rb +18 -0
  80. data/lib/fog/google/examples/launch_micro_instance.rb +26 -0
  81. data/lib/fog/google/examples/metadata.rb +18 -0
  82. data/lib/fog/google/examples/network.rb +21 -0
  83. data/lib/fog/google/models/compute/disk.rb +16 -5
  84. data/lib/fog/google/models/compute/disks.rb +16 -6
  85. data/lib/fog/google/models/compute/flavors.rb +2 -1
  86. data/lib/fog/google/models/compute/image.rb +36 -18
  87. data/lib/fog/google/models/compute/images.rb +38 -5
  88. data/lib/fog/google/models/compute/server.rb +20 -6
  89. data/lib/fog/google/models/compute/servers.rb +8 -5
  90. data/lib/fog/google/models/compute/snapshot.rb +36 -0
  91. data/lib/fog/google/models/compute/snapshots.rb +28 -0
  92. data/lib/fog/google/models/storage/file.rb +7 -1
  93. data/lib/fog/google/parsers/storage/access_control_list.rb +2 -2
  94. data/lib/fog/google/requests/compute/delete_disk.rb +5 -1
  95. data/lib/fog/google/requests/compute/get_disk.rb +2 -1
  96. data/lib/fog/google/requests/compute/get_snapshot.rb +34 -0
  97. data/lib/fog/google/requests/compute/insert_disk.rb +23 -7
  98. data/lib/fog/google/requests/compute/insert_image.rb +16 -9
  99. data/lib/fog/google/requests/compute/insert_server.rb +22 -10
  100. data/lib/fog/google/requests/compute/list_disks.rb +1 -1
  101. data/lib/fog/google/requests/compute/list_images.rb +3 -2
  102. data/lib/fog/google/requests/compute/list_snapshots.rb +30 -0
  103. data/lib/fog/openstack.rb +11 -2
  104. data/lib/fog/openstack/network.rb +23 -0
  105. data/lib/fog/openstack/requests/compute/add_flavor_access.rb +1 -1
  106. data/lib/fog/openstack/requests/compute/create_volume.rb +8 -7
  107. data/lib/fog/openstack/requests/compute/list_tenants_with_flavor_access.rb +1 -1
  108. data/lib/fog/openstack/requests/compute/remove_flavor_access.rb +1 -1
  109. data/lib/fog/openstack/requests/image/create_image.rb +23 -23
  110. data/lib/fog/openstack/requests/image/update_image.rb +31 -33
  111. data/lib/fog/openstack/requests/network/delete_quota.rb +26 -0
  112. data/lib/fog/openstack/requests/network/get_quota.rb +31 -0
  113. data/lib/fog/openstack/requests/network/get_quotas.rb +31 -0
  114. data/lib/fog/openstack/requests/network/update_quota.rb +33 -0
  115. data/lib/fog/openstack/requests/storage/get_object_https_url.rb +3 -3
  116. data/lib/fog/openstack/requests/storage/post_set_meta_temp_url_key.rb +1 -1
  117. data/lib/fog/openstack/requests/storage/put_object.rb +8 -5
  118. data/lib/fog/openstack/storage.rb +10 -9
  119. data/lib/fog/rackspace.rb +15 -5
  120. data/lib/fog/rackspace/block_storage.rb +8 -4
  121. data/lib/fog/rackspace/cdn.rb +21 -4
  122. data/lib/fog/rackspace/compute.rb +4 -4
  123. data/lib/fog/rackspace/compute_v2.rb +15 -4
  124. data/lib/fog/rackspace/databases.rb +4 -4
  125. data/lib/fog/rackspace/dns.rb +6 -6
  126. data/lib/fog/rackspace/errors.rb +12 -5
  127. data/lib/fog/rackspace/load_balancers.rb +4 -4
  128. data/lib/fog/rackspace/mock_data.rb +18 -7
  129. data/lib/fog/rackspace/models/compute_v2/key_pair.rb +56 -0
  130. data/lib/fog/rackspace/models/compute_v2/key_pairs.rb +43 -0
  131. data/lib/fog/rackspace/models/compute_v2/server.rb +7 -2
  132. data/lib/fog/rackspace/models/compute_v2/servers.rb +2 -1
  133. data/lib/fog/rackspace/models/identity/service_catalog.rb +34 -16
  134. data/lib/fog/rackspace/models/monitoring/agent_token.rb +40 -0
  135. data/lib/fog/rackspace/models/monitoring/agent_tokens.rb +28 -0
  136. data/lib/fog/rackspace/models/monitoring/alarm.rb +59 -0
  137. data/lib/fog/rackspace/models/monitoring/alarm_example.rb +26 -0
  138. data/lib/fog/rackspace/models/monitoring/alarm_examples.rb +31 -0
  139. data/lib/fog/rackspace/models/monitoring/alarms.rb +40 -0
  140. data/lib/fog/rackspace/models/monitoring/base.rb +30 -0
  141. data/lib/fog/rackspace/models/monitoring/check.rb +75 -0
  142. data/lib/fog/rackspace/models/monitoring/check_type.rb +15 -0
  143. data/lib/fog/rackspace/models/monitoring/check_types.rb +23 -0
  144. data/lib/fog/rackspace/models/monitoring/checks.rb +40 -0
  145. data/lib/fog/rackspace/models/monitoring/data_point.rb +18 -0
  146. data/lib/fog/rackspace/models/monitoring/data_points.rb +49 -0
  147. data/lib/fog/rackspace/models/monitoring/entities.rb +48 -0
  148. data/lib/fog/rackspace/models/monitoring/entity.rb +64 -0
  149. data/lib/fog/rackspace/models/monitoring/metric.rb +25 -0
  150. data/lib/fog/rackspace/models/monitoring/metrics.rb +27 -0
  151. data/lib/fog/rackspace/monitoring.rb +153 -0
  152. data/lib/fog/rackspace/requests/compute_v2/create_keypair.rb +53 -0
  153. data/lib/fog/rackspace/requests/compute_v2/create_server.rb +10 -8
  154. data/lib/fog/rackspace/requests/compute_v2/delete_keypair.rb +36 -0
  155. data/lib/fog/rackspace/requests/compute_v2/get_keypair.rb +41 -0
  156. data/lib/fog/rackspace/requests/compute_v2/list_keypairs.rb +37 -0
  157. data/lib/fog/rackspace/requests/monitoring/create_agent_token.rb +19 -0
  158. data/lib/fog/rackspace/requests/monitoring/create_alarm.rb +19 -0
  159. data/lib/fog/rackspace/requests/monitoring/create_check.rb +19 -0
  160. data/lib/fog/rackspace/requests/monitoring/create_entity.rb +19 -0
  161. data/lib/fog/rackspace/requests/monitoring/delete_agent_token.rb +17 -0
  162. data/lib/fog/rackspace/requests/monitoring/delete_alarm.rb +18 -0
  163. data/lib/fog/rackspace/requests/monitoring/delete_check.rb +17 -0
  164. data/lib/fog/rackspace/requests/monitoring/delete_entity.rb +17 -0
  165. data/lib/fog/rackspace/requests/monitoring/evaluate_alarm_example.rb +21 -0
  166. data/lib/fog/rackspace/requests/monitoring/get_agent_token.rb +19 -0
  167. data/lib/fog/rackspace/requests/monitoring/get_alarm.rb +19 -0
  168. data/lib/fog/rackspace/requests/monitoring/get_alarm_example.rb +19 -0
  169. data/lib/fog/rackspace/requests/monitoring/get_check.rb +19 -0
  170. data/lib/fog/rackspace/requests/monitoring/get_entity.rb +19 -0
  171. data/lib/fog/rackspace/requests/monitoring/list_agent_tokens.rb +19 -0
  172. data/lib/fog/rackspace/requests/monitoring/list_alarm_examples.rb +18 -0
  173. data/lib/fog/rackspace/requests/monitoring/list_alarms.rb +18 -0
  174. data/lib/fog/rackspace/requests/monitoring/list_check_types.rb +17 -0
  175. data/lib/fog/rackspace/requests/monitoring/list_checks.rb +18 -0
  176. data/lib/fog/rackspace/requests/monitoring/list_data_points.rb +18 -0
  177. data/lib/fog/rackspace/requests/monitoring/list_entities.rb +19 -0
  178. data/lib/fog/rackspace/requests/monitoring/list_metrics.rb +18 -0
  179. data/lib/fog/rackspace/requests/monitoring/list_notification_plans.rb +18 -0
  180. data/lib/fog/rackspace/requests/monitoring/list_overview.rb +19 -0
  181. data/lib/fog/rackspace/requests/monitoring/update_alarm.rb +18 -0
  182. data/lib/fog/rackspace/requests/monitoring/update_check.rb +18 -0
  183. data/lib/fog/rackspace/requests/monitoring/update_entity.rb +18 -0
  184. data/lib/fog/rackspace/requests/storage/put_object.rb +1 -1
  185. data/lib/fog/rackspace/storage.rb +8 -4
  186. data/lib/fog/vcloud/compute.rb +1 -1
  187. data/lib/fog/vcloud/examples/README.md +54 -0
  188. data/lib/fog/vcloud/examples/creating_a_connection.md +20 -0
  189. data/lib/fog/vcloud/examples/creating_a_vapp.md +17 -0
  190. data/lib/fog/vcloud/examples/get_network_information.md +10 -0
  191. data/lib/fog/vcloud/examples/get_vapp_information.md +10 -0
  192. data/lib/fog/vcloud/examples/more_on_vapps.md +23 -0
  193. data/lib/fog/vcloud/requests/compute/configure_vm.rb +2 -2
  194. data/lib/fog/version.rb +1 -1
  195. data/lib/fog/vsphere/compute.rb +131 -0
  196. data/lib/fog/vsphere/models/compute/server.rb +5 -1
  197. data/lib/fog/vsphere/requests/compute/get_datacenter.rb +3 -1
  198. data/lib/fog/vsphere/requests/compute/get_virtual_machine.rb +21 -37
  199. data/lib/fog/vsphere/requests/compute/list_datacenters.rb +1 -0
  200. data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +8 -114
  201. data/lib/fog/vsphere/requests/compute/vm_clone.rb +18 -9
  202. data/lib/fog/vsphere/requests/compute/vm_power_off.rb +2 -0
  203. data/lib/fog/xenserver/compute.rb +14 -12
  204. data/lib/fog/xenserver/models/compute/console.rb +27 -0
  205. data/lib/fog/xenserver/models/compute/consoles.rb +25 -0
  206. data/lib/fog/xenserver/models/compute/server.rb +6 -2
  207. data/lib/fog/xenserver/models/compute/servers.rb +5 -0
  208. data/lib/fog/xenserver/requests/compute/create_server.rb +4 -0
  209. data/lib/fog/xml/sax_parser_connection.rb +3 -0
  210. data/lib/tasks/changelog_task.rb +1 -0
  211. data/tests/aws/models/compute/volume_tests.rb +1 -1
  212. data/tests/aws/models/elb/model_tests.rb +33 -1
  213. data/tests/aws/models/rds/instance_option_tests.rb +14 -0
  214. data/tests/aws/parsers/elb/describe_load_balancers.rb +65 -0
  215. data/tests/aws/requests/compute/client_tests.rb +25 -0
  216. data/tests/aws/requests/elb/helper.rb +2 -1
  217. data/tests/aws/requests/elb/listener_tests.rb +1 -1
  218. data/tests/aws/requests/elb/load_balancer_tests.rb +5 -1
  219. data/tests/aws/requests/elb/policy_tests.rb +85 -6
  220. data/tests/aws/requests/iam/helper.rb +4 -1
  221. data/tests/aws/requests/iam/server_certificate_tests.rb +2 -2
  222. data/tests/aws/requests/rds/helper.rb +22 -0
  223. data/tests/aws/requests/rds/instance_option_tests.rb +21 -0
  224. data/tests/core/credential_tests.rb +21 -0
  225. data/tests/core/mocking_tests.rb +15 -0
  226. data/tests/core/service_tests.rb +26 -0
  227. data/tests/digitalocean/helper.rb +23 -16
  228. data/tests/digitalocean/models/compute/flavor_tests.rb +2 -2
  229. data/tests/digitalocean/models/compute/image_tests.rb +2 -2
  230. data/tests/digitalocean/models/compute/region_tests.rb +2 -2
  231. data/tests/digitalocean/models/compute/server_tests.rb +11 -3
  232. data/tests/digitalocean/models/compute/servers_tests.rb +14 -28
  233. data/tests/digitalocean/models/compute/ssh_key_tests.rb +7 -3
  234. data/tests/digitalocean/models/compute/ssh_keys_tests.rb +5 -1
  235. data/tests/digitalocean/requests/compute/create_server_tests.rb +3 -6
  236. data/tests/digitalocean/requests/compute/destroy_server_tests.rb +1 -2
  237. data/tests/digitalocean/requests/compute/get_server_details_tests.rb +1 -1
  238. data/tests/digitalocean/requests/compute/get_ssh_key_tests.rb +4 -1
  239. data/tests/digitalocean/requests/compute/list_ssh_keys_tests.rb +5 -2
  240. data/tests/dnsimple/requests/dns/dns_tests.rb +30 -26
  241. data/tests/helper.rb +2 -2
  242. data/tests/helpers/collection_helper.rb +4 -4
  243. data/tests/helpers/mock_helper.rb +2 -0
  244. data/tests/openstack/authenticate_tests.rb +22 -0
  245. data/tests/openstack/requests/compute/flavor_tests.rb +27 -12
  246. data/tests/openstack/requests/compute/volume_tests.rb +10 -12
  247. data/tests/openstack/requests/image/image_tests.rb +30 -15
  248. data/tests/openstack/requests/network/quota_tests.rb +65 -0
  249. data/tests/openstack/requests/storage/object_tests.rb +27 -2
  250. data/tests/rackspace/block_storage_tests.rb +2 -1
  251. data/tests/rackspace/cdn_tests.rb +9 -0
  252. data/tests/rackspace/compute_v2_tests.rb +16 -15
  253. data/tests/rackspace/databases_tests.rb +1 -1
  254. data/tests/rackspace/load_balancer_tests.rb +1 -1
  255. data/tests/rackspace/models/compute_v2/keypairs_tests.rb +47 -0
  256. data/tests/rackspace/models/identity/service_catalog_tests.rb +54 -29
  257. data/tests/rackspace/models/monitoring/agent_token_tests.rb +9 -0
  258. data/tests/rackspace/models/monitoring/agent_tokens_tests.rb +9 -0
  259. data/tests/rackspace/models/monitoring/alarm_example_tests.rb +18 -0
  260. data/tests/rackspace/models/monitoring/alarm_examples_tests.rb +19 -0
  261. data/tests/rackspace/models/monitoring/alarm_tests.rb +56 -0
  262. data/tests/rackspace/models/monitoring/alarms_tests.rb +25 -0
  263. data/tests/rackspace/models/monitoring/check_tests.rb +50 -0
  264. data/tests/rackspace/models/monitoring/check_types_tests.rb +14 -0
  265. data/tests/rackspace/models/monitoring/checks_tests.rb +16 -0
  266. data/tests/rackspace/models/monitoring/data_points_tests.rb +19 -0
  267. data/tests/rackspace/models/monitoring/entities_tests.rb +14 -0
  268. data/tests/rackspace/models/monitoring/entity_tests.rb +26 -0
  269. data/tests/rackspace/models/monitoring/metric_tests.rb +19 -0
  270. data/tests/rackspace/models/monitoring/metrics_tests.rb +17 -0
  271. data/tests/rackspace/monitoring_tests.rb +72 -0
  272. data/tests/rackspace/requests/compute_v2/keypair_tests.rb +55 -0
  273. data/tests/rackspace/requests/monitoring/agent_tests.rb +34 -0
  274. data/tests/rackspace/requests/monitoring/alarm_example_tests.rb +30 -0
  275. data/tests/rackspace/requests/monitoring/alarm_tests.rb +55 -0
  276. data/tests/rackspace/requests/monitoring/check_tests.rb +40 -0
  277. data/tests/rackspace/requests/monitoring/entity_tests.rb +37 -0
  278. data/tests/rackspace/requests/monitoring/helper.rb +78 -0
  279. data/tests/rackspace/requests/monitoring/list_tests.rb +60 -0
  280. data/tests/vsphere/models/compute/server_tests.rb +1 -1
  281. data/tests/vsphere/requests/compute/list_virtual_machines_tests.rb +2 -2
  282. data/tests/vsphere/requests/compute/vm_clone_tests.rb +14 -8
  283. data/tests/xenserver/compute_tests.rb +5 -5
  284. data/tests/xenserver/models/compute/console_test.rb +35 -0
  285. data/tests/xenserver/models/compute/consoles_test.rb +19 -0
  286. data/tests/xenserver/models/compute/server_tests.rb +25 -18
  287. data/tests/xenserver/models/compute/servers_tests.rb +1 -0
  288. metadata +154 -3
@@ -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
@@ -19,6 +19,7 @@ module Fog
19
19
  request :list_zones
20
20
  request :list_global_operations
21
21
  request :list_zone_operations
22
+ request :list_snapshots
22
23
 
23
24
  request :get_server
24
25
  request :get_disk
@@ -27,6 +28,7 @@ module Fog
27
28
  request :get_machine_type
28
29
  request :get_network
29
30
  request :get_zone
31
+ request :get_snapshot
30
32
 
31
33
  request :delete_disk
32
34
  request :delete_firewall
@@ -56,6 +58,9 @@ module Fog
56
58
  model :disk
57
59
  collection :disks
58
60
 
61
+ model :snapshot
62
+ collection :snapshots
63
+
59
64
  class Mock
60
65
  include Collections
61
66
 
@@ -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,20 @@
1
+ def test
2
+
3
+ connection = Fog::Compute.new({ :provider => "Google" })
4
+
5
+ # puts 'Listing snapshots...'
6
+ # puts '---------------------------------'
7
+ snapshots = connection.snapshots.all
8
+ raise 'Could not LIST the snapshots' unless snapshots
9
+ # puts snapshots.inspect
10
+
11
+ # puts 'Fetching a single snapshot...'
12
+ # puts '------------------------------------------------'
13
+ snap = snapshots.first
14
+ if !snap.nil?
15
+ snap = connection.snapshots.get(snap)
16
+ raise 'Could not GET the snapshot' unless snap
17
+ # puts snap.inspect
18
+ end
19
+
20
+ end
@@ -0,0 +1,18 @@
1
+ def test
2
+ connection = Fog::Compute.new({ :provider => "Google" })
3
+
4
+ rawdisk = {
5
+ :source => nil, # 'http://some_valid_url_to_rootfs_tarball'
6
+ :container_type => 'TAR',
7
+ }
8
+
9
+ # Can't test this unless the 'source' points to a valid URL
10
+ return if rawdisk[:source].nil?
11
+
12
+ img = connection.image.create(:name => 'test-image',
13
+ :preferred_kernel => 'gce-v20130603',
14
+ :description => 'Test image (via fog)',
15
+ :raw_disk => rawdisk)
16
+
17
+ img.reload # will raise if image was not saved correctly
18
+ end
@@ -0,0 +1,26 @@
1
+ def test
2
+ connection = Fog::Compute.new({ :provider => "Google" })
3
+ time = Time.now.utc.to_i
4
+ disk = connection.disks.create({
5
+ :name => 'foggydisk',
6
+ :size_gb => 10,
7
+ :zone_name => 'us-central1-a',
8
+ :source_image => 'centos-6-v20130522',
9
+ })
10
+
11
+ disk.wait_for { disk.ready? }
12
+ params = {
13
+ :name => "fog-smoke-test-#{Time.now.to_i}",
14
+ :machine_type => "f1-micro",
15
+ :zone_name => "us-central1-a",
16
+ :disks => [ disk.get_as_boot_disk(true) ],
17
+ :user => ENV['USER'],
18
+ :kernel => 'gce-v20130522',
19
+ }
20
+
21
+ server = connection.servers.bootstrap params
22
+
23
+ raise "Could not bootstrap sshable server." unless server.ssh("whoami")
24
+ raise "Could not delete server." unless server.destroy
25
+ raise "Could not delete disk." unless disk.destroy
26
+ 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
@@ -0,0 +1,21 @@
1
+ def test
2
+ connection = Fog::Compute.new({ :provider => "Google" })
3
+
4
+ # we create a new private network
5
+ connection.insert_network('my-private-network', '10.240.0.0/16')
6
+
7
+ server = connection.servers.create({
8
+ :name => "fog-smoke-test-#{Time.now.to_i}",
9
+ :image_name => "debian-7-wheezy-v20130522",
10
+ :machine_type => "n1-standard-1",
11
+ :zone_name => "us-central1-a",
12
+ :private_key_path => File.expand_path("~/.ssh/id_rsa"),
13
+ :public_key_path => File.expand_path("~/.ssh/id_rsa.pub"),
14
+ :network => 'my-private-network',
15
+ :external_ip => false,
16
+ :user => ENV['USER'],
17
+ })
18
+
19
+ # The network won't have any firewall rules, so we won't be able to ssh in.
20
+ server.wait_for { ready? }
21
+ end
@@ -16,17 +16,28 @@ module Fog
16
16
  attribute :description, :aliases => 'description'
17
17
  attribute :size_gb, :aliases => 'sizeGb'
18
18
  attribute :self_link, :aliases => 'selfLink'
19
- attribute :image_name, :aliases => 'image'
19
+ attribute :source_image, :aliases => 'sourceImage'
20
+ attribute :source_snapshot, :aliases => 'sourceSnapshot'
21
+ attribute :source_snapshot_id, :aliases => 'sourceSnapshot'
20
22
 
21
23
  def save
22
- data = service.insert_disk(name, size_gb, zone_name, image_name).body
24
+ requires :name
25
+ requires :zone_name
26
+
27
+ options = {}
28
+ if source_image.nil?
29
+ options['sourceSnapshot'] = source_snapshot
30
+ options['sizeGb'] = size_gb
31
+ end
32
+
33
+ data = service.insert_disk(name, zone_name, source_image, options).body
23
34
  data = service.backoff_if_unfound {service.get_disk(name, zone_name).body}
24
35
  service.disks.merge_attributes(data)
25
36
  end
26
37
 
27
38
  def destroy
28
- requires :name, :zone
29
- service.delete_disk(name, zone)
39
+ requires :name, :zone_name
40
+ service.delete_disk(name, zone_name)
30
41
  end
31
42
 
32
43
  def zone
@@ -77,4 +88,4 @@ module Fog
77
88
  end
78
89
  end
79
90
  end
80
- end
91
+ 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