fog-digitalocean 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.document +3 -0
  4. data/.gitignore +30 -0
  5. data/.irbrc +82 -0
  6. data/.rubocop.yml +20 -0
  7. data/.rubocop_todo.yml +606 -0
  8. data/.travis.yml +35 -0
  9. data/CHANGELOG.md +3 -0
  10. data/CONTRIBUTING.md +276 -0
  11. data/CONTRIBUTORS.md +898 -0
  12. data/Gemfile +5 -0
  13. data/LICENSE.md +20 -0
  14. data/README.md +130 -0
  15. data/RELEASE.md +40 -0
  16. data/Rakefile +12 -0
  17. data/benchs/each_provider.sh +6 -0
  18. data/benchs/each_service.sh +6 -0
  19. data/benchs/fog_vs.rb +106 -0
  20. data/benchs/load_times.rb +37 -0
  21. data/benchs/params.rb +43 -0
  22. data/benchs/parse_vs_push.rb +67 -0
  23. data/bin/fog +78 -0
  24. data/fog-digitalocean.gemspec +61 -0
  25. data/gemfiles/Gemfile-edge +14 -0
  26. data/lib/fog/digitalocean.rb +1 -0
  27. data/lib/fog/digitalocean/CHANGELOG.md +6 -0
  28. data/lib/fog/digitalocean/compute.rb +109 -0
  29. data/lib/fog/digitalocean/core.rb +9 -0
  30. data/lib/fog/digitalocean/examples/getting_started.md +123 -0
  31. data/lib/fog/digitalocean/models/compute/flavor.rb +17 -0
  32. data/lib/fog/digitalocean/models/compute/flavors.rb +21 -0
  33. data/lib/fog/digitalocean/models/compute/image.rb +25 -0
  34. data/lib/fog/digitalocean/models/compute/images.rb +42 -0
  35. data/lib/fog/digitalocean/models/compute/region.rb +13 -0
  36. data/lib/fog/digitalocean/models/compute/regions.rb +21 -0
  37. data/lib/fog/digitalocean/models/compute/server.rb +170 -0
  38. data/lib/fog/digitalocean/models/compute/servers.rb +43 -0
  39. data/lib/fog/digitalocean/models/compute/ssh_key.rb +31 -0
  40. data/lib/fog/digitalocean/models/compute/ssh_keys.rb +40 -0
  41. data/lib/fog/digitalocean/models/paging_collection.rb +42 -0
  42. data/lib/fog/digitalocean/requests/compute/change_kernel.rb +44 -0
  43. data/lib/fog/digitalocean/requests/compute/convert_to_snapshot.rb +44 -0
  44. data/lib/fog/digitalocean/requests/compute/create_server.rb +93 -0
  45. data/lib/fog/digitalocean/requests/compute/create_ssh_key.rb +49 -0
  46. data/lib/fog/digitalocean/requests/compute/delete_ssh_key.rb +32 -0
  47. data/lib/fog/digitalocean/requests/compute/destroy_server.rb +35 -0
  48. data/lib/fog/digitalocean/requests/compute/disable_backups.rb +45 -0
  49. data/lib/fog/digitalocean/requests/compute/enable_ipv6.rb +44 -0
  50. data/lib/fog/digitalocean/requests/compute/enable_private_networking.rb +44 -0
  51. data/lib/fog/digitalocean/requests/compute/get_droplet_action.rb +36 -0
  52. data/lib/fog/digitalocean/requests/compute/get_image_details.rb +42 -0
  53. data/lib/fog/digitalocean/requests/compute/get_server_details.rb +84 -0
  54. data/lib/fog/digitalocean/requests/compute/get_ssh_key.rb +34 -0
  55. data/lib/fog/digitalocean/requests/compute/list_droplet_actions.rb +38 -0
  56. data/lib/fog/digitalocean/requests/compute/list_flavors.rb +132 -0
  57. data/lib/fog/digitalocean/requests/compute/list_images.rb +51 -0
  58. data/lib/fog/digitalocean/requests/compute/list_regions.rb +95 -0
  59. data/lib/fog/digitalocean/requests/compute/list_servers.rb +33 -0
  60. data/lib/fog/digitalocean/requests/compute/list_ssh_keys.rb +41 -0
  61. data/lib/fog/digitalocean/requests/compute/password_reset.rb +44 -0
  62. data/lib/fog/digitalocean/requests/compute/power_cycle.rb +44 -0
  63. data/lib/fog/digitalocean/requests/compute/power_off.rb +44 -0
  64. data/lib/fog/digitalocean/requests/compute/power_on.rb +44 -0
  65. data/lib/fog/digitalocean/requests/compute/reboot_server.rb +44 -0
  66. data/lib/fog/digitalocean/requests/compute/rebuild.rb +44 -0
  67. data/lib/fog/digitalocean/requests/compute/rename.rb +44 -0
  68. data/lib/fog/digitalocean/requests/compute/resize.rb +48 -0
  69. data/lib/fog/digitalocean/requests/compute/restore.rb +44 -0
  70. data/lib/fog/digitalocean/requests/compute/shutdown.rb +44 -0
  71. data/lib/fog/digitalocean/requests/compute/snapshot.rb +44 -0
  72. data/lib/fog/digitalocean/requests/compute/transfer_image.rb +44 -0
  73. data/lib/fog/digitalocean/requests/compute/update_ssh_key.rb +46 -0
  74. data/lib/fog/digitalocean/requests/compute/upgrade.rb +44 -0
  75. data/lib/fog/digitalocean/service.rb +51 -0
  76. data/lib/fog/digitalocean/version.rb +5 -0
  77. data/spec/fog/account_spec.rb +14 -0
  78. data/spec/fog/billing_spec.rb +14 -0
  79. data/spec/fog/bin/atmos_spec.rb +33 -0
  80. data/spec/fog/bin/aws_spec.rb +98 -0
  81. data/spec/fog/bin/baremetalcloud_spec.rb +33 -0
  82. data/spec/fog/bin/bluebox_spec.rb +55 -0
  83. data/spec/fog/bin/brightbox_spec.rb +30 -0
  84. data/spec/fog/bin/clodo_spec.rb +9 -0
  85. data/spec/fog/bin/cloudsigma_spec.rb +9 -0
  86. data/spec/fog/bin/cloudstack_spec.rb +9 -0
  87. data/spec/fog/bin/digitalocean_spec.rb +9 -0
  88. data/spec/fog/bin/dnsimple_spec.rb +9 -0
  89. data/spec/fog/bin/dnsmadeeasy_spec.rb +9 -0
  90. data/spec/fog/bin/dreamhost_spec.rb +9 -0
  91. data/spec/fog/bin/dynect_spec.rb +9 -0
  92. data/spec/fog/bin/ecloud_spec.rb +10 -0
  93. data/spec/fog/bin/fogdocker_spec.rb +10 -0
  94. data/spec/fog/bin/glesys_spec.rb +10 -0
  95. data/spec/fog/bin/gogrid_spec.rb +10 -0
  96. data/spec/fog/bin/google_spec.rb +10 -0
  97. data/spec/fog/bin/ibm_spec.rb +10 -0
  98. data/spec/fog/bin/internetarchive_spec.rb +10 -0
  99. data/spec/fog/bin/joyent_spec.rb +10 -0
  100. data/spec/fog/bin/linode_spec.rb +10 -0
  101. data/spec/fog/bin/local_spec.rb +10 -0
  102. data/spec/fog/bin/ninefold_spec.rb +10 -0
  103. data/spec/fog/bin/opennebula_spec.rb +10 -0
  104. data/spec/fog/bin/openstack_spec.rb +10 -0
  105. data/spec/fog/bin/openvz_spec.rb +10 -0
  106. data/spec/fog/bin/ovirt_spec.rb +10 -0
  107. data/spec/fog/bin/powerdns_spec.rb +9 -0
  108. data/spec/fog/bin/profitbricks_spec.rb +10 -0
  109. data/spec/fog/bin/rackspace_spec.rb +10 -0
  110. data/spec/fog/bin/rage4_spec.rb +10 -0
  111. data/spec/fog/bin/riakcs_spec.rb +10 -0
  112. data/spec/fog/bin/sakuracloud_spec.rb +10 -0
  113. data/spec/fog/bin/serverlove_spec.rb +10 -0
  114. data/spec/fog/bin/softlayer_spec.rb +10 -0
  115. data/spec/fog/bin/stormondemand_spec.rb +10 -0
  116. data/spec/fog/bin/vcloud_spec.rb +10 -0
  117. data/spec/fog/bin/vclouddirector_spec.rb +10 -0
  118. data/spec/fog/bin/vmfusion_spec.rb +10 -0
  119. data/spec/fog/bin/voxel_spec.rb +10 -0
  120. data/spec/fog/bin/vsphere_spec.rb +10 -0
  121. data/spec/fog/bin/xenserver_spec.rb +10 -0
  122. data/spec/fog/bin/zerigo_spec.rb +10 -0
  123. data/spec/fog/bin_spec.rb +161 -0
  124. data/spec/fog/cdn_spec.rb +14 -0
  125. data/spec/fog/compute_spec.rb +19 -0
  126. data/spec/fog/dns_spec.rb +19 -0
  127. data/spec/fog/identity_spec.rb +14 -0
  128. data/spec/fog/image_spec.rb +14 -0
  129. data/spec/fog/metering_spec.rb +14 -0
  130. data/spec/fog/monitoring_spec.rb +14 -0
  131. data/spec/fog/network_spec.rb +14 -0
  132. data/spec/fog/orchestration_spec.rb +14 -0
  133. data/spec/fog/storage_spec.rb +14 -0
  134. data/spec/fog/support_spec.rb +14 -0
  135. data/spec/fog/volume_spec.rb +14 -0
  136. data/spec/fog/vpn_spec.rb +14 -0
  137. data/spec/fog/xml/connection_spec.rb +33 -0
  138. data/spec/helpers/bin.rb +34 -0
  139. data/spec/spec_helper.rb +18 -0
  140. data/tests/digitalocean/helper.rb +56 -0
  141. data/tests/digitalocean/requests/compute/list_flavors_tests.rb +25 -0
  142. data/tests/digitalocean/requests/compute/list_images_tests.rb +25 -0
  143. data/tests/digitalocean/requests/compute/list_regions_tests.rb +21 -0
  144. data/tests/digitalocean/requests/compute/server_tests.rb +77 -0
  145. data/tests/digitalocean/requests/compute_v2/list_ssh_keys_tests.rb +20 -0
  146. data/tests/helper.rb +25 -0
  147. data/tests/helpers/format_helper.rb +100 -0
  148. data/tests/helpers/mock_helper.rb +14 -0
  149. data/tests/helpers/succeeds_helper.rb +10 -0
  150. data/tests/lorem.txt +1 -0
  151. data/tests/watchr.rb +22 -0
  152. metadata +428 -0
@@ -0,0 +1,44 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Real
5
+ def convert_to_snapshot(id)
6
+ body = { :type => 'convert',}
7
+
8
+ encoded_body = Fog::JSON.encode(body)
9
+
10
+ request(
11
+ :expects => [201],
12
+ :headers => {
13
+ 'Content-Type' => "application/json; charset=UTF-8",
14
+ },
15
+ :method => 'POST',
16
+ :path => "v2/images/#{id}/actions",
17
+ :body => encoded_body,
18
+ )
19
+ end
20
+ end
21
+
22
+ class Mock
23
+ def convert_to_snapshot(id, name)
24
+ response = Excon::Response.new
25
+ response.status = 201
26
+ response.body = {
27
+ 'action' => {
28
+ 'id' => 46592838,
29
+ 'status' => 'completed',
30
+ 'type' => 'convert_to_snapshot',
31
+ 'started_at' => '2015-03-24T19:02:47Z',
32
+ 'completed_at' => '2015-03-24T19:02:47Z',
33
+ 'resource_id' => 11060029,
34
+ 'resource_type' => 'image',
35
+ 'region' => null,
36
+ 'region_slug' => null
37
+ }
38
+ }
39
+ response
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,93 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ # noinspection RubyStringKeysInHashInspection
5
+ class Real
6
+
7
+ def create_server(name,
8
+ size,
9
+ image,
10
+ region,
11
+ options = {})
12
+
13
+ create_options = {
14
+ :name => name,
15
+ :region => region,
16
+ :size => size,
17
+ :image => image,
18
+ }
19
+
20
+ [:backups, :ipv6, :private_networking].each do |opt|
21
+ create_options[opt] = !!options[opt] if options[opt]
22
+ end
23
+
24
+ [:user_data, :ssh_keys].each do |opt|
25
+ create_options[opt] = options[opt] if options[opt]
26
+ end
27
+
28
+ encoded_body = Fog::JSON.encode(create_options)
29
+
30
+ request(
31
+ :expects => [202],
32
+ :headers => {
33
+ 'Content-Type' => "application/json; charset=UTF-8",
34
+ },
35
+ :method => 'POST',
36
+ :path => '/v2/droplets',
37
+ :body => encoded_body,
38
+ )
39
+ end
40
+ end
41
+
42
+ # noinspection RubyStringKeysInHashInspection
43
+ class Mock
44
+ def create_server(name,
45
+ size,
46
+ image,
47
+ region,
48
+ options = {})
49
+
50
+ response = Excon::Response.new
51
+ response.status = 202
52
+
53
+ response.body = {
54
+ 'droplet' => {
55
+ 'id' => 3164494,
56
+ 'name' => name,
57
+ 'memory' => 512,
58
+ 'vcpus' => 1,
59
+ 'disk' => 20,
60
+ 'locked' => true,
61
+ 'status' => 'new',
62
+ 'kernel' => {
63
+ 'id' => 2233,
64
+ 'name' => 'Ubuntu 14.04 x64 vmlinuz-3.13.0-37-generic',
65
+ 'version' => '3.13.0-37-generic'
66
+ },
67
+ 'created_at' => '2014-11-14T16:36:31Z',
68
+ 'features' => %w(virtio),
69
+ 'backup_ids' => [],
70
+ 'snapshot_ids' => [],
71
+ 'image' => {},
72
+ 'size' => {},
73
+ 'size_slug' => '512mb',
74
+ 'networks' => {},
75
+ 'region' => {}
76
+ },
77
+ 'links' => {
78
+ 'actions' => [
79
+ {
80
+ 'id' => 36805096,
81
+ 'rel' => "create",
82
+ 'href' => "https://api.digitalocean.com/v2/actions/36805096"
83
+ }
84
+ ]
85
+ }
86
+ }
87
+
88
+ response
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,49 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ # noinspection RubyStringKeysInHashInspection
5
+ class Real
6
+
7
+ def create_ssh_key(name, public_key)
8
+ create_options = {
9
+ :name => name,
10
+ :public_key => public_key,
11
+ }
12
+
13
+ encoded_body = Fog::JSON.encode(create_options)
14
+
15
+ request(
16
+ :expects => [201],
17
+ :headers => {
18
+ 'Content-Type' => "application/json; charset=UTF-8",
19
+ },
20
+ :method => 'POST',
21
+ :path => '/v2/account/keys',
22
+ :body => encoded_body,
23
+ )
24
+ end
25
+ end
26
+
27
+ # noinspection RubyStringKeysInHashInspection
28
+ class Mock
29
+ def create_ssh_key(name, public_key)
30
+ response = Excon::Response.new
31
+ response.status = 201
32
+
33
+ data[:ssh_keys] << {
34
+ "id" => Fog::Mock.random_numbers(6).to_i,
35
+ "fingerprint" => (["00"] * 16).join(':'),
36
+ "public_key" => public_key,
37
+ "name" => name
38
+ }
39
+
40
+ response.body ={
41
+ 'ssh_key' => data[:ssh_keys].last
42
+ }
43
+
44
+ response
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,32 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ # noinspection RubyStringKeysInHashInspection
5
+ class Real
6
+ def delete_ssh_key(id)
7
+ request(
8
+ :expects => [204],
9
+ :headers => {
10
+ 'Content-Type' => "application/json; charset=UTF-8",
11
+ },
12
+ :method => 'DELETE',
13
+ :path => "/v2/account/keys/#{id}",
14
+ )
15
+ end
16
+ end
17
+
18
+ # noinspection RubyStringKeysInHashInspection
19
+ class Mock
20
+ def delete_ssh_key(id)
21
+ self.data[:ssh_keys].select! do |key|
22
+ key["id"] != id
23
+ end
24
+
25
+ response = Excon::Response.new
26
+ response.status = 204
27
+ response
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,35 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ # noinspection RubyStringKeysInHashInspection
5
+ class Real
6
+ def delete_server(server_id)
7
+ Fog::Logger.warning("delete_server method has been deprecated, use destroy_server instead")
8
+ destroy_server(server_id)
9
+ end
10
+ def destroy_server(server_id)
11
+ request(
12
+ :expects => [204],
13
+ :headers => {
14
+ 'Content-Type' => "application/json; charset=UTF-8",
15
+ },
16
+ :method => 'DELETE',
17
+ :path => "/v2/droplets/#{server_id}",
18
+ )
19
+ end
20
+ end
21
+
22
+ # noinspection RubyStringKeysInHashInspection
23
+ class Mock
24
+ def delete_server(server_id)
25
+ destroy_server(server_id)
26
+ end
27
+ def destroy_server(_)
28
+ response = Excon::Response.new
29
+ response.status = 204
30
+ response
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,45 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Real
5
+ def disable_backups(id)
6
+ body = { :type => "disable_backups" }
7
+
8
+ encoded_body = Fog::JSON.encode(body)
9
+
10
+ request(
11
+ :expects => [201],
12
+ :headers => {
13
+ 'Content-Type' => "application/json; charset=UTF-8",
14
+ },
15
+ :method => 'POST',
16
+ :path => "v2/droplets/#{id}/actions",
17
+ :body => encoded_body,
18
+ )
19
+ end
20
+ end
21
+
22
+ class Mock
23
+ def disable_backups(id)
24
+ response = Excon::Response.new
25
+ response.status = 201
26
+ response.body = {
27
+ 'action' => {
28
+ 'id' => Fog::Mock.random_numbers(1).to_i,
29
+ 'status' => "in-progress",
30
+ 'type' => "disable_backups",
31
+ 'started_at' => "2014-11-14T16:31:00Z",
32
+ 'completed_at' => null,
33
+ 'resource_id' => id,
34
+ 'resource_type' => "droplet",
35
+ 'region' => "nyc3",
36
+ 'region_slug' => "nyc3"
37
+ }
38
+ }
39
+ response
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+
@@ -0,0 +1,44 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Real
5
+ def enable_ipv6(id)
6
+ body = { :type => "enable_ipv6" }
7
+
8
+ encoded_body = Fog::JSON.encode(body)
9
+
10
+ request(
11
+ :expects => [201],
12
+ :headers => {
13
+ 'Content-Type' => "application/json; charset=UTF-8",
14
+ },
15
+ :method => 'POST',
16
+ :path => "v2/droplets/#{id}/actions",
17
+ :body => encoded_body,
18
+ )
19
+ end
20
+ end
21
+
22
+ class Mock
23
+ def enable_ipv6(id)
24
+ response = Excon::Response.new
25
+ response.status = 201
26
+ response.body = {
27
+ 'action' => {
28
+ 'id' => Fog::Mock.random_numbers(1).to_i,
29
+ 'status' => "in-progress",
30
+ 'type' => "enable_ipv6",
31
+ 'started_at' => "2014-11-14T16:31:00Z",
32
+ 'completed_at' => null,
33
+ 'resource_id' => id,
34
+ 'resource_type' => "droplet",
35
+ 'region' => "nyc3",
36
+ 'region_slug' => "nyc3"
37
+ }
38
+ }
39
+ response
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Real
5
+ def enable_private_networking(id)
6
+ body = { :type => "enable_private_networking" }
7
+
8
+ encoded_body = Fog::JSON.encode(body)
9
+
10
+ request(
11
+ :expects => [201],
12
+ :headers => {
13
+ 'Content-Type' => "application/json; charset=UTF-8",
14
+ },
15
+ :method => 'POST',
16
+ :path => "v2/droplets/#{id}/actions",
17
+ :body => encoded_body,
18
+ )
19
+ end
20
+ end
21
+
22
+ class Mock
23
+ def enable_private_networking(id)
24
+ response = Excon::Response.new
25
+ response.status = 201
26
+ response.body = {
27
+ 'action' => {
28
+ 'id' => Fog::Mock.random_numbers(1).to_i,
29
+ 'status' => "in-progress",
30
+ 'type' => "enable_private_networking",
31
+ 'started_at' => "2014-11-14T16:31:00Z",
32
+ 'completed_at' => null,
33
+ 'resource_id' => id,
34
+ 'resource_type' => "droplet",
35
+ 'region' => "nyc3",
36
+ 'region_slug' => "nyc3"
37
+ }
38
+ }
39
+ response
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,36 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Real
5
+ def get_droplet_action(droplet_id, action_id)
6
+ request(
7
+ :expects => [200],
8
+ :method => 'GET',
9
+ :path => "v2/droplets/#{droplet_id}/actions/#{action_id}",
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def get_droplet_action(droplet_id, action)
16
+ response = Excon::Response.new
17
+ response.status = 201
18
+ response.body = {
19
+ 'action' => {
20
+ 'id' => Fog::Mock.random_numbers(1).to_i,
21
+ 'status' => "in-progress",
22
+ 'type' => "change_kernel",
23
+ 'started_at' => "2014-11-14T16:31:00Z",
24
+ 'completed_at' => null,
25
+ 'resource_id' => id,
26
+ 'resource_type' => "droplet",
27
+ 'region' => "nyc3",
28
+ 'region_slug' => "nyc3"
29
+ }
30
+ }
31
+ response
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,42 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Real
5
+ def get_image_details(image_id)
6
+ request(
7
+ :expects => [200],
8
+ :method => 'GET',
9
+ :path => "/v2/images/#{image_id}"
10
+ )
11
+ end
12
+ end
13
+
14
+ # noinspection RubyStringKeysInHashInspection
15
+ class Mock
16
+ def get_server_details(_)
17
+ response = Excon::Response.new
18
+ response.status = 200
19
+
20
+ response.body = {
21
+ 'image' =>
22
+ {
23
+ 'id' => 7555620,
24
+ 'name' => 'Nifty New Snapshot',
25
+ 'distribution' => 'Ubuntu',
26
+ 'slug' => null,
27
+ 'public' => false,
28
+ 'regions' => [
29
+ 'nyc2',
30
+ 'nyc2'
31
+ ],
32
+ 'created_at' => '2014-11-04T22:23:02Z',
33
+ 'min_disk_size' => 20
34
+ }
35
+ }
36
+
37
+ response
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end