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
@@ -90,17 +90,46 @@ module Fog
90
90
  params[:query].merge!(:api_key => @digitalocean_api_key)
91
91
  params[:query].merge!(:client_id => @digitalocean_client_id)
92
92
 
93
- response = @connection.request(params)
93
+ response = retry_event_lock { parse @connection.request(params) }
94
94
 
95
95
  unless response.body.empty?
96
- response.body = Fog::JSON.decode(response.body)
97
96
  if response.body['status'] != 'OK'
98
- raise Fog::Errors::Error.new response.body.to_s
97
+ case response.body['error_message']
98
+ when /No Droplets Found/
99
+ raise Fog::Errors::NotFound.new
100
+ else
101
+ raise Fog::Errors::Error.new response.body.to_s
102
+ end
99
103
  end
100
104
  end
101
105
  response
102
106
  end
103
107
 
108
+ private
109
+
110
+ def parse(response)
111
+ return response if response.body.empty?
112
+ response.body = Fog::JSON.decode(response.body)
113
+ response
114
+ end
115
+
116
+ def retry_event_lock
117
+ count = 0
118
+ reponse = nil
119
+ while count < 5
120
+ response = yield
121
+
122
+ if response.body && response.body['error_message'] =~ /There is already a pending event for the droplet/
123
+ count += 1
124
+ sleep count ** 3
125
+ else
126
+ break
127
+ end
128
+ end
129
+
130
+ response
131
+ end
132
+
104
133
  end
105
134
  end
106
135
  end
@@ -7,18 +7,26 @@ module Fog
7
7
  # A DigitalOcean Droplet
8
8
  #
9
9
  class Server < Fog::Compute::Server
10
-
10
+
11
11
  identity :id
12
12
  attribute :name
13
- attribute :state, :aliases => 'status'
13
+ attribute :state, :aliases => 'status'
14
14
  attribute :image_id
15
15
  attribute :region_id
16
- attribute :flavor_id, :aliases => 'size_id'
16
+ attribute :flavor_id, :aliases => 'size_id'
17
17
  # Not documented in their API, but
18
18
  # available nevertheless
19
- attribute :ip_address
19
+ attribute :public_ip_address, :aliases => 'ip_address'
20
20
  attribute :backups_active
21
21
 
22
+ attr_writer :ssh_keys
23
+
24
+ # Deprecated: Use public_ip_address instead.
25
+ def ip_address
26
+ Fog::Logger.warning("ip_address has been deprecated. Use public_ip_address instead")
27
+ public_ip_address
28
+ end
29
+
22
30
  # Reboot the server (soft reboot).
23
31
  #
24
32
  # The preferred method of rebooting a server.
@@ -52,7 +60,7 @@ module Fog
52
60
  # Works as a power switch.
53
61
  # The server consumes resources while powered off
54
62
  # so you are still charged.
55
- #
63
+ #
56
64
  # @see https://www.digitalocean.com/community/questions/am-i-charged-while-my-droplet-is-in-a-powered-off-state
57
65
  def stop
58
66
  requires :id
@@ -64,7 +72,7 @@ module Fog
64
72
  # The server consumes resources while powered on
65
73
  # so you will be charged.
66
74
  #
67
- # Each time a server is spun up, even if for a few seconds,
75
+ # Each time a server is spun up, even if for a few seconds,
68
76
  # it is charged for an hour.
69
77
  #
70
78
  def start
@@ -72,6 +80,25 @@ module Fog
72
80
  service.power_on_server self.id
73
81
  end
74
82
 
83
+ def setup(credentials = {})
84
+ requires :public_ip_address
85
+ require 'net/ssh'
86
+
87
+ commands = [
88
+ %{mkdir .ssh},
89
+ %{passwd -l #{username}},
90
+ %{echo "#{Fog::JSON.encode(Fog::JSON.sanitize(attributes))}" >> ~/attributes.json}
91
+ ]
92
+ if public_key
93
+ commands << %{echo "#{public_key}" >> ~/.ssh/authorized_keys}
94
+ end
95
+
96
+ # wait for aws to be ready
97
+ wait_for { sshable?(credentials) }
98
+
99
+ Fog::SSH.new(public_ip_address, username, credentials).run(commands)
100
+ end
101
+
75
102
  # Creates the server (not to be called directly).
76
103
  #
77
104
  # Usually called by Fog::Collection#create
@@ -85,7 +112,7 @@ module Fog
85
112
  # :image_id => image_id_here,
86
113
  # :flavor_id => flavor_id_here,
87
114
  # :region_id => region_id_here
88
- #
115
+ #
89
116
  # @return [Boolean]
90
117
  def save
91
118
  raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
@@ -93,11 +120,13 @@ module Fog
93
120
 
94
121
  options = {}
95
122
  if attributes[:ssh_key_ids]
96
- options[:ssh_key_ids] = attributes[:ssh_key_ids]
123
+ options[:ssh_key_ids] = attributes[:ssh_key_ids]
124
+ elsif @ssh_keys
125
+ options[:ssh_key_ids] = @ssh_keys.map(&:id)
97
126
  end
98
- data = service.create_server name,
99
- flavor_id,
100
- image_id,
127
+ data = service.create_server name,
128
+ flavor_id,
129
+ image_id,
101
130
  region_id,
102
131
  options
103
132
  merge_attributes(data.body['droplet'])
@@ -105,7 +134,7 @@ module Fog
105
134
  end
106
135
 
107
136
  # Destroy the server, freeing up the resources.
108
- #
137
+ #
109
138
  # DigitalOcean will stop charging you for the resources
110
139
  # the server was using.
111
140
  #
@@ -115,9 +144,9 @@ module Fog
115
144
  # IMPORTANT: As of 2013/01/31, you should wait some time to
116
145
  # destroy the server after creating it. If you try to destroy
117
146
  # the server too fast, the destroy event may be lost and the
118
- # server will remain running and consuming resources, so
147
+ # server will remain running and consuming resources, so
119
148
  # DigitalOcean will keep charging you.
120
- # Double checked this with DigitalOcean staff and confirmed
149
+ # Double checked this with DigitalOcean staff and confirmed
121
150
  # that it's the way it works right now.
122
151
  #
123
152
  # Double check the server has been destroyed!
@@ -6,16 +6,39 @@ module Fog
6
6
  class DigitalOcean
7
7
 
8
8
  class Servers < Fog::Collection
9
+
9
10
  model Fog::Compute::DigitalOcean::Server
10
11
 
11
12
  def all(filters = {})
12
- load service.list_servers.body['droplets']
13
+ data = service.list_servers.body['droplets']
14
+ load(data)
13
15
  end
14
16
 
15
- def get(id)
16
- if server = service.get_server_details(id).body['droplet']
17
- new server
17
+ def bootstrap(new_attributes = {})
18
+ server = new(new_attributes)
19
+
20
+ raise(ArgumentError, "public_key_path is required to configure the server.") unless new_attributes[:public_key_path]
21
+ raise(ArgumentError, "private_key_path is required to configure the server.") unless new_attributes[:private_key_path]
22
+ credential = Fog.respond_to?(:credential) && Fog.credential || :default
23
+ name = "fog_#{credential}"
24
+ ssh_key = service.ssh_keys.detect { |key| key.name == name }
25
+ if ssh_key.nil?
26
+ ssh_key = service.ssh_keys.create(
27
+ :name => name,
28
+ :ssh_pub_key => File.read(new_attributes[:public_key_path])
29
+ )
18
30
  end
31
+ server.ssh_keys = [ssh_key]
32
+
33
+ server.save
34
+ server.wait_for { ready? }
35
+ server.setup :keys => [new_attributes[:private_key_path]]
36
+ server
37
+ end
38
+
39
+ def get(id)
40
+ server = service.get_server_details(id).body['droplet']
41
+ new(server) if server
19
42
  rescue Fog::Errors::NotFound
20
43
  nil
21
44
  end
@@ -15,9 +15,8 @@ module Fog
15
15
  end
16
16
 
17
17
  def get(uri)
18
- if data = service.get_ssh_key(uri)
19
- new(data.body)
20
- end
18
+ data = service.get_ssh_key(uri).body['ssh_key']
19
+ new(data)
21
20
  rescue Fog::Errors::NotFound
22
21
  nil
23
22
  end
@@ -6,9 +6,9 @@ module Fog
6
6
  #
7
7
  # FIXME: missing ssh keys support
8
8
  #
9
- def create_server( name,
10
- size_id,
11
- image_id,
9
+ def create_server( name,
10
+ size_id,
11
+ image_id,
12
12
  region_id,
13
13
  options = {} )
14
14
 
@@ -20,9 +20,10 @@ module Fog
20
20
  }
21
21
 
22
22
  if options[:ssh_key_ids]
23
+ options[:ssh_key_ids] = options[:ssh_key_ids].join(",") if options[:ssh_key_ids].is_a? Array
23
24
  query_hash[:ssh_key_ids] = options[:ssh_key_ids]
24
25
  end
25
-
26
+
26
27
  request(
27
28
  :expects => [200],
28
29
  :method => 'GET',
@@ -35,9 +36,9 @@ module Fog
35
36
 
36
37
  class Mock
37
38
 
38
- def create_server( name,
39
- size_id,
40
- image_id,
39
+ def create_server( name,
40
+ size_id,
41
+ image_id,
41
42
  region_id,
42
43
  options = {} )
43
44
  response = Excon::Response.new
@@ -50,6 +51,7 @@ module Fog
50
51
  "size_id" => size_id,
51
52
  "image_id" => image_id,
52
53
  "region_id" => region_id,
54
+ "ip_address" => "127.0.0.1",
53
55
  "status" => 'active'
54
56
  }
55
57
 
@@ -25,6 +25,9 @@ module Fog
25
25
  "event_id" => Fog::Mock.random_numbers(1).to_i,
26
26
  "status" => "OK"
27
27
  }
28
+
29
+ server = self.data[:servers].reject! { |s| s['id'] == id }
30
+
28
31
  response
29
32
  end
30
33
 
@@ -1,6 +1,6 @@
1
1
  module Fog
2
2
  module Compute
3
- class DigitalOcean
3
+ class DigitalOcean
4
4
  class Real
5
5
 
6
6
  def list_images(options = {})
@@ -23,18 +23,18 @@ module Fog
23
23
  "images" => [
24
24
  # Sample image
25
25
  {
26
- "id" => 1601,
27
- "name" => "CentOS 5.8 x64",
26
+ "id" => 1601,
27
+ "name" => "CentOS 5.8 x64",
28
28
  "distribution" => "CentOS"
29
29
  },
30
30
  {
31
- "id" => 1602,
32
- "name" => "CentOS 5.8 x32",
31
+ "id" => 1602,
32
+ "name" => "CentOS 5.8 x32",
33
33
  "distribution" => "CentOS"
34
34
  },
35
35
  {
36
36
  "id" => 2676,
37
- "name" => "Ubuntu 12.04 x64 Server",
37
+ "name" => "Ubuntu 12.04 x64",
38
38
  "distribution" => "Ubuntu"
39
39
  },
40
40
 
@@ -29,7 +29,10 @@ module Fog
29
29
 
30
30
  def self.data
31
31
  @data ||= Hash.new do |hash, key|
32
- hash[key] = {}
32
+ hash[key] = {
33
+ :domains => [],
34
+ :records => {}
35
+ }
33
36
  end
34
37
  end
35
38
 
@@ -25,7 +25,7 @@ module Fog
25
25
  end
26
26
 
27
27
  def destroy
28
- service.delete_record(zone.domain, identity)
28
+ service.delete_record(zone.id, identity)
29
29
  true
30
30
  end
31
31
 
@@ -41,12 +41,12 @@ module Fog
41
41
 
42
42
  # decide whether its a new record or update of an existing
43
43
  if id.nil?
44
- data = service.create_record(zone.domain, name, type, value, options)
44
+ data = service.create_record(zone.id, name, type, value, options)
45
45
  else
46
46
  options[:name] = name if name
47
47
  options[:content] = value if value
48
48
  options[:type] = type if type
49
- data = service.update_record(zone.domain, id, options)
49
+ data = service.update_record(zone.id, id, options)
50
50
  end
51
51
 
52
52
  merge_attributes(data.body["record"])
@@ -22,6 +22,42 @@ module Fog
22
22
  end
23
23
 
24
24
  end
25
+
26
+ class Mock
27
+
28
+ def create_domain(name)
29
+ response = Excon::Response.new
30
+ response.status = 201
31
+
32
+ body = {
33
+ "domain" => {
34
+ "auto_renew" => nil,
35
+ "created_at" => Time.now.iso8601,
36
+ "expires_on" => Date.today + 365,
37
+ "id" => Fog::Mock.random_numbers(1).to_i,
38
+ "language" => nil,
39
+ "lockable" => true,
40
+ "name" => name,
41
+ "name_server_status" => "unknown",
42
+ "registrant_id" => nil,
43
+ "state" => "registered",
44
+ "token" => "4fIFYWYiJayvL2tkf_mkBkqC4L+4RtYqDA",
45
+ "unicode_name" => name,
46
+ "updated_at" => Time.now.iso8601,
47
+ "user_id" => 1,
48
+ "record_count" => 0,
49
+ "service_count" => 0,
50
+ "private_whois?" => false
51
+ }
52
+ }
53
+ self.data[:domains] << body
54
+
55
+ response.body = body
56
+ response
57
+ end
58
+
59
+ end
60
+
25
61
  end
26
62
  end
27
63
  end
@@ -43,6 +43,33 @@ module Fog
43
43
  end
44
44
 
45
45
  end
46
+
47
+ class Mock
48
+
49
+ def create_record(domain, name, type, content, options = {})
50
+ response = Excon::Response.new
51
+ response.status = 201
52
+ body = {
53
+ "record" => {
54
+ "name" => name,
55
+ "record_type" => type,
56
+ "content" => content,
57
+ "created_at" => Time.now.iso8601,
58
+ "updated_at" => Time.now.iso8601,
59
+ "id" => Fog::Mock.random_numbers(1).to_i,
60
+ "domain_id" => domain
61
+ }.merge(options)
62
+ }
63
+
64
+ self.data[:records][domain] ||= []
65
+ self.data[:records][domain] << body
66
+
67
+ response.body = body
68
+ response
69
+ end
70
+
71
+ end
72
+
46
73
  end
47
74
  end
48
75
  end
@@ -21,6 +21,18 @@ module Fog
21
21
  end
22
22
 
23
23
  end
24
+
25
+ class Mock
26
+
27
+ def delete_domain(name)
28
+ self.data[:records].delete name
29
+ self.data[:domains].reject! { |domain| domain["domain"]["name"] == name }
30
+ response = Excon::Response.new
31
+ response.status = 200
32
+ response
33
+ end
34
+
35
+ end
24
36
  end
25
37
  end
26
38
  end