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,84 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Real
5
+ def get_server_details(server_id)
6
+ request(
7
+ :expects => [200],
8
+ :method => 'GET',
9
+ :path => "/v2/droplets/#{server_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
+ 'droplet' => {
22
+ 'id' => 3164494,
23
+ 'name' => 'example.com',
24
+ 'memory' => 512,
25
+ 'vcpus' => 1,
26
+ 'disk' => 20,
27
+ 'locked' => false,
28
+ 'status' => 'active',
29
+ 'kernel' => {
30
+ 'id' => 2233,
31
+ 'name' => 'Ubuntu 14.04 x64 vmlinuz-3.13.0-37-generic',
32
+ 'version' => '3.13.0-37-generic'
33
+ },
34
+ 'created_at' => '2014-11-14T16:36:31Z',
35
+ 'features' => %w(ipv6 virtio),
36
+ 'backup_ids' => [],
37
+ 'snapshot_ids' => [7938206],
38
+ 'image' => {
39
+ 'id' => 6918990,
40
+ 'name' => '14.04 x64',
41
+ 'distribution' => 'Ubuntu',
42
+ 'slug' => 'ubuntu-14-04-x64',
43
+ 'public' => true,
44
+ 'regions' => %w(nyc1 ams1 sfo1 nyc2 ams2 sgp1 lon1 nyc3 ams3 nyc3),
45
+ 'created_at' => '2014-10-17T20:24:33Z',
46
+ 'type' => 'snapshot',
47
+ 'min_disk_size' => 20
48
+ },
49
+ 'size' => {},
50
+ 'size_slug' => '512mb',
51
+ 'networks' => {
52
+ 'v4' => [
53
+ {
54
+ 'ip_address' => '104.131.186.241',
55
+ 'netmask' => '255.255.240.0',
56
+ 'gateway' => '104.131.176.1',
57
+ 'type' => 'public'
58
+ }
59
+ ],
60
+ 'v6' => [
61
+ {
62
+ 'ip_address' => '2604:A880:0800:0010:0000:0000:031D:2001',
63
+ 'netmask' => 64,
64
+ 'gateway' => '2604:A880:0800:0010:0000:0000:0000:0001',
65
+ 'type' => 'public'
66
+ }
67
+ ]
68
+ },
69
+ 'region' => {
70
+ 'name' => 'New York 3',
71
+ 'slug' => 'nyc3',
72
+ 'sizes' => %w(32gb 16gb 2gb 1gb 4gb 8gb 512mb 64gb 48gb),
73
+ 'features' => %w(virtio private_networking backups ipv6 metadata),
74
+ 'available' => true
75
+ }
76
+ }
77
+ }
78
+
79
+ response
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,34 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Real
5
+ def get_ssh_key(key_id)
6
+ request(
7
+ :expects => [200],
8
+ :method => 'GET',
9
+ :path => "/v2/account/keys/#{key_id}"
10
+ )
11
+ end
12
+ end
13
+
14
+ # noinspection RubyStringKeysInHashInspection
15
+ class Mock
16
+ def get_ssh_key(_)
17
+ response = Excon::Response.new
18
+ response.status = 200
19
+
20
+ response.body = {
21
+ 'ssh_key' => {
22
+ 'id' => 512190,
23
+ 'fingerprint' => '3b:16:bf:e4:8b:00:8b:b8:59:8c:a9:d3:f0:19:45:fa',
24
+ 'public_key' => 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAQQDDHr/jh2Jy4yALcK4JyWbVkPRaWmhck3IgCoeOO3z1e2dBowLh64QAM+Qb72pxekALga2oi4GvT+TlWNhzPH4V example',
25
+ 'name' => 'My SSH Public Key'
26
+ }
27
+ }
28
+
29
+ response
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,38 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Real
5
+ def list_droplet_actions(id)
6
+ request(
7
+ :expects => [200],
8
+ :method => 'GET',
9
+ :path => "v2/droplets/#{id}/actions",
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def list_droplet_actions(id)
16
+ response = Excon::Response.new
17
+ response.status = 201
18
+ response.body = {
19
+ 'actions' => [
20
+ 'action' => {
21
+ 'id' => Fog::Mock.random_numbers(1).to_i,
22
+ 'status' => "in-progress",
23
+ 'type' => "change_kernel",
24
+ 'started_at' => "2014-11-14T16:31:00Z",
25
+ 'completed_at' => null,
26
+ 'resource_id' => id,
27
+ 'resource_type' => "droplet",
28
+ 'region' => "nyc3",
29
+ 'region_slug' => "nyc3"
30
+ }
31
+ ]
32
+ }
33
+ response
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,132 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Real
5
+ def list_flavors(filters = {})
6
+ request(
7
+ :expects => [200],
8
+ :method => 'GET',
9
+ :path => "/v2/sizes",
10
+ :query => filters
11
+ )
12
+ end
13
+ end
14
+
15
+ # noinspection RubyStringKeysInHashInspection
16
+ class Mock
17
+ def list_flavors(filters = {})
18
+ response = Excon::Response.new
19
+ response.status = 200
20
+ response.body = {
21
+
22
+ 'sizes' => [
23
+ {
24
+ 'slug' => '512mb',
25
+ 'memory' => 512,
26
+ 'vcpus' => 1,
27
+ 'disk' => 20,
28
+ 'transfer' => 1.0,
29
+ 'price_monthly' => 5.0,
30
+ 'price_hourly' => 0.00744,
31
+ 'regions' => %w(nyc1 sgp1 ams1 ams2 sfo1 nyc2 lon1 nyc3 ams3),
32
+ 'available' => true
33
+ },
34
+ {
35
+ 'slug' => '1gb',
36
+ 'memory' => 1024,
37
+ 'vcpus' => 1,
38
+ 'disk' => 30,
39
+ 'transfer' => 2.0,
40
+ 'price_monthly' => 10.0,
41
+ 'price_hourly' => 0.01488,
42
+ 'regions' => %w(nyc2 sgp1 ams1 sfo1 lon1 nyc3 ams3 ams2 nyc1),
43
+ 'available' => true
44
+ },
45
+ {
46
+ 'slug' => '2gb',
47
+ 'memory' => 2048,
48
+ 'vcpus' => 2,
49
+ 'disk' => 40,
50
+ 'transfer' => 3.0,
51
+ 'price_monthly' => 20.0,
52
+ 'price_hourly' => 0.02976,
53
+ 'regions' => %w(nyc2 sfo1 ams1 sgp1 ams2 lon1 nyc3 ams3 nyc1),
54
+ 'available' => true
55
+ },
56
+ {
57
+ 'slug' => '4gb',
58
+ 'memory' => 4096,
59
+ 'vcpus' => 2,
60
+ 'disk' => 60,
61
+ 'transfer' => 4.0,
62
+ 'price_monthly' => 40.0,
63
+ 'price_hourly' => 0.05952,
64
+ 'regions' => %w(nyc2 sfo1 ams1 sgp1 ams2 lon1 nyc3 ams3 nyc1),
65
+ 'available' => true
66
+ },
67
+ {
68
+ 'slug' => '8gb',
69
+ 'memory' => 8192,
70
+ 'vcpus' => 4,
71
+ 'disk' => 80,
72
+ 'transfer' => 5.0,
73
+ 'price_monthly' => 80.0,
74
+ 'price_hourly' => 0.11905,
75
+ 'regions' => %w(nyc2 sfo1 sgp1 ams1 ams2 nyc1 lon1 nyc3 ams3),
76
+ 'available' => true
77
+ },
78
+ {
79
+ 'slug' => '16gb',
80
+ 'memory' => 16384,
81
+ 'vcpus' => 8,
82
+ 'disk' => 160,
83
+ 'transfer' => 6.0,
84
+ 'price_monthly' => 160.0,
85
+ 'price_hourly' => 0.2381,
86
+ 'regions' => %w(sgp1 nyc1 sfo1 ams2 nyc3 lon1 nyc2 ams1 ams3),
87
+ 'available' => true
88
+ },
89
+ {
90
+ 'slug' => '32gb',
91
+ 'memory' => 32768,
92
+ 'vcpus' => 12,
93
+ 'disk' => 320,
94
+ 'transfer' => 7.0,
95
+ 'price_monthly' => 320.0,
96
+ 'price_hourly' => 0.47619,
97
+ 'regions' => %w(nyc2 sgp1 ams2 nyc1 sfo1 lon1 ams3 nyc3),
98
+ 'available' => true
99
+ },
100
+ {
101
+ 'slug' => '48gb',
102
+ 'memory' => 49152,
103
+ 'vcpus' => 16,
104
+ 'disk' => 480,
105
+ 'transfer' => 8.0,
106
+ 'price_monthly' => 480.0,
107
+ 'price_hourly' => 0.71429,
108
+ 'regions' => %w(sgp1 ams2 sfo1 nyc1 lon1 nyc2 ams3 nyc3),
109
+ 'available' => true
110
+ },
111
+ {
112
+ 'slug' => '64gb',
113
+ 'memory' => 65536,
114
+ 'vcpus' => 20,
115
+ 'disk' => 640,
116
+ 'transfer' => 9.0,
117
+ 'price_monthly' => 640.0,
118
+ 'price_hourly' => 0.95238,
119
+ 'regions' => %w(sgp1 nyc1 nyc2 sfo1 lon1 ams3 ams2 nyc3),
120
+ 'available' => true
121
+ }
122
+ ],
123
+ 'links' => {},
124
+ 'meta' => {'total' => 9}
125
+ }
126
+
127
+ response
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,51 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Real
5
+ def list_images(filters = {})
6
+ request(
7
+ :expects => [200],
8
+ :method => 'GET',
9
+ :path => "/v2/images",
10
+ :query => filters
11
+ )
12
+ end
13
+ end
14
+
15
+ # noinspection RubyStringKeysInHashInspection
16
+ class Mock
17
+ def list_images(filters = {})
18
+ response = Excon::Response.new
19
+ response.status = 200
20
+ response.body = {
21
+
22
+ 'images' => [
23
+ {
24
+ 'id' => 7555620,
25
+ 'name' => 'Nifty New Snapshot',
26
+ 'distribution' => 'Ubuntu',
27
+ 'slug' => nil,
28
+ 'public' => false,
29
+ 'regions' => %w(nyc2 nyc3),
30
+ 'created_at' => '2014-11-04T22:23:02Z',
31
+ 'type' => 'snapshot',
32
+ 'min_disk_size' => 20,
33
+ }
34
+ ],
35
+ 'links' => {
36
+ 'pages' => {
37
+ 'last' => 'https://api.digitalocean.com/v2/images?page=56&per_page=1',
38
+ 'next' => 'https://api.digitalocean.com/v2/images?page=2&per_page=1'
39
+ }
40
+ },
41
+ 'meta' => {
42
+ 'total' => 56
43
+ }
44
+ }
45
+
46
+ response
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,95 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Real
5
+ def list_regions(filters = {})
6
+ request(
7
+ :expects => [200],
8
+ :method => 'GET',
9
+ :path => "/v2/regions",
10
+ :query => filters
11
+ )
12
+ end
13
+ end
14
+
15
+ # noinspection RubyStringKeysInHashInspection
16
+ class Mock
17
+ def list_regions(filters = {})
18
+ response = Excon::Response.new
19
+ response.status = 200
20
+ response.body = {
21
+ 'regions' => [
22
+ {
23
+ 'name' => 'New York 1',
24
+ 'slug' => 'nyc1',
25
+ 'sizes' => [],
26
+ 'features' => %w(virtio backups),
27
+ 'available' => false
28
+ },
29
+ {
30
+ 'name' => 'Amsterdam 1',
31
+ 'slug' => 'ams1',
32
+ 'sizes' => [],
33
+ 'features' => %w(virtio backups),
34
+ 'available' => false
35
+ },
36
+ {
37
+ 'name' => 'San Francisco 1',
38
+ 'slug' => 'sfo1',
39
+ 'sizes' => %w(32gb 16gb 2gb 1gb 4gb 8gb 512mb 64gb 48gb),
40
+ 'features' => %w(virtio backups metadata),
41
+ 'available' => true
42
+ },
43
+ {
44
+ 'name' => 'New York 2',
45
+ 'slug' => 'nyc2',
46
+ 'sizes' => %w(32gb 16gb 2gb 1gb 4gb 8gb 512mb 64gb 48gb),
47
+ 'features' => %w(virtio private_networking backups),
48
+ 'available' => true
49
+ },
50
+ {
51
+ 'name' => 'Amsterdam 2',
52
+ 'slug' => 'ams2',
53
+ 'sizes' => %w(32gb 16gb 2gb 1gb 4gb 8gb 512mb 64gb 48gb),
54
+ 'features' => %w(virtio private_networking backups metadata),
55
+ 'available' => true
56
+ },
57
+ {
58
+ 'name' => 'Singapore 1',
59
+ 'slug' => 'sgp1',
60
+ 'sizes' => %w(32gb 16gb 2gb 1gb 4gb 8gb 512mb 64gb 48gb),
61
+ 'features' => %w(virtio private_networking backups ipv6 metadata),
62
+ 'available' => true
63
+ },
64
+ {
65
+ 'name' => 'London 1',
66
+ 'slug' => 'lon1',
67
+ 'sizes' => %w(32gb 16gb 2gb 1gb 4gb 8gb 512mb 64gb 48gb),
68
+ 'features' => %w(virtio private_networking backups ipv6 metadata),
69
+ 'available' => true
70
+ },
71
+ {
72
+ 'name' => 'New York 3',
73
+ 'slug' => 'nyc3',
74
+ 'sizes' => %w(32gb 16gb 2gb 1gb 4gb 8gb 512mb 64gb 48gb),
75
+ 'features' => %w(virtio private_networking backups ipv6 metadata),
76
+ 'available' => true
77
+ },
78
+ {
79
+ 'name' => 'Amsterdam 3',
80
+ 'slug' => 'ams3',
81
+ 'sizes' => %w(32gb 16gb 2gb 1gb 4gb 8gb 512mb 64gb 48gb),
82
+ 'features' => %w(virtio private_networking backups ipv6 metadata),
83
+ 'available' => true
84
+ }
85
+ ],
86
+ 'links' => {},
87
+ 'meta' => {'total' => 9}
88
+ }
89
+
90
+ response
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,33 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Real
5
+ def list_servers(filters = {})
6
+ request(
7
+ :expects => [200],
8
+ :method => 'GET',
9
+ :path => "/v2/droplets",
10
+ :query => filters
11
+ )
12
+ end
13
+ end
14
+
15
+ # noinspection RubyStringKeysInHashInspection
16
+ class Mock
17
+ def list_servers(filters = {})
18
+ response = Excon::Response.new
19
+ response.status = 200
20
+ response.body = {
21
+ "status" => "OK",
22
+ "droplets" => self.data[:servers],
23
+ "links" => {},
24
+ "meta" => {
25
+ "total" => data[:servers].count
26
+ }
27
+ }
28
+ response
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end