fog-digitalocean 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.document +3 -0
- data/.gitignore +30 -0
- data/.irbrc +82 -0
- data/.rubocop.yml +20 -0
- data/.rubocop_todo.yml +606 -0
- data/.travis.yml +35 -0
- data/CHANGELOG.md +3 -0
- data/CONTRIBUTING.md +276 -0
- data/CONTRIBUTORS.md +898 -0
- data/Gemfile +5 -0
- data/LICENSE.md +20 -0
- data/README.md +130 -0
- data/RELEASE.md +40 -0
- data/Rakefile +12 -0
- data/benchs/each_provider.sh +6 -0
- data/benchs/each_service.sh +6 -0
- data/benchs/fog_vs.rb +106 -0
- data/benchs/load_times.rb +37 -0
- data/benchs/params.rb +43 -0
- data/benchs/parse_vs_push.rb +67 -0
- data/bin/fog +78 -0
- data/fog-digitalocean.gemspec +61 -0
- data/gemfiles/Gemfile-edge +14 -0
- data/lib/fog/digitalocean.rb +1 -0
- data/lib/fog/digitalocean/CHANGELOG.md +6 -0
- data/lib/fog/digitalocean/compute.rb +109 -0
- data/lib/fog/digitalocean/core.rb +9 -0
- data/lib/fog/digitalocean/examples/getting_started.md +123 -0
- data/lib/fog/digitalocean/models/compute/flavor.rb +17 -0
- data/lib/fog/digitalocean/models/compute/flavors.rb +21 -0
- data/lib/fog/digitalocean/models/compute/image.rb +25 -0
- data/lib/fog/digitalocean/models/compute/images.rb +42 -0
- data/lib/fog/digitalocean/models/compute/region.rb +13 -0
- data/lib/fog/digitalocean/models/compute/regions.rb +21 -0
- data/lib/fog/digitalocean/models/compute/server.rb +170 -0
- data/lib/fog/digitalocean/models/compute/servers.rb +43 -0
- data/lib/fog/digitalocean/models/compute/ssh_key.rb +31 -0
- data/lib/fog/digitalocean/models/compute/ssh_keys.rb +40 -0
- data/lib/fog/digitalocean/models/paging_collection.rb +42 -0
- data/lib/fog/digitalocean/requests/compute/change_kernel.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/convert_to_snapshot.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/create_server.rb +93 -0
- data/lib/fog/digitalocean/requests/compute/create_ssh_key.rb +49 -0
- data/lib/fog/digitalocean/requests/compute/delete_ssh_key.rb +32 -0
- data/lib/fog/digitalocean/requests/compute/destroy_server.rb +35 -0
- data/lib/fog/digitalocean/requests/compute/disable_backups.rb +45 -0
- data/lib/fog/digitalocean/requests/compute/enable_ipv6.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/enable_private_networking.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/get_droplet_action.rb +36 -0
- data/lib/fog/digitalocean/requests/compute/get_image_details.rb +42 -0
- data/lib/fog/digitalocean/requests/compute/get_server_details.rb +84 -0
- data/lib/fog/digitalocean/requests/compute/get_ssh_key.rb +34 -0
- data/lib/fog/digitalocean/requests/compute/list_droplet_actions.rb +38 -0
- data/lib/fog/digitalocean/requests/compute/list_flavors.rb +132 -0
- data/lib/fog/digitalocean/requests/compute/list_images.rb +51 -0
- data/lib/fog/digitalocean/requests/compute/list_regions.rb +95 -0
- data/lib/fog/digitalocean/requests/compute/list_servers.rb +33 -0
- data/lib/fog/digitalocean/requests/compute/list_ssh_keys.rb +41 -0
- data/lib/fog/digitalocean/requests/compute/password_reset.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/power_cycle.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/power_off.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/power_on.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/reboot_server.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/rebuild.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/rename.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/resize.rb +48 -0
- data/lib/fog/digitalocean/requests/compute/restore.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/shutdown.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/snapshot.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/transfer_image.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/update_ssh_key.rb +46 -0
- data/lib/fog/digitalocean/requests/compute/upgrade.rb +44 -0
- data/lib/fog/digitalocean/service.rb +51 -0
- data/lib/fog/digitalocean/version.rb +5 -0
- data/spec/fog/account_spec.rb +14 -0
- data/spec/fog/billing_spec.rb +14 -0
- data/spec/fog/bin/atmos_spec.rb +33 -0
- data/spec/fog/bin/aws_spec.rb +98 -0
- data/spec/fog/bin/baremetalcloud_spec.rb +33 -0
- data/spec/fog/bin/bluebox_spec.rb +55 -0
- data/spec/fog/bin/brightbox_spec.rb +30 -0
- data/spec/fog/bin/clodo_spec.rb +9 -0
- data/spec/fog/bin/cloudsigma_spec.rb +9 -0
- data/spec/fog/bin/cloudstack_spec.rb +9 -0
- data/spec/fog/bin/digitalocean_spec.rb +9 -0
- data/spec/fog/bin/dnsimple_spec.rb +9 -0
- data/spec/fog/bin/dnsmadeeasy_spec.rb +9 -0
- data/spec/fog/bin/dreamhost_spec.rb +9 -0
- data/spec/fog/bin/dynect_spec.rb +9 -0
- data/spec/fog/bin/ecloud_spec.rb +10 -0
- data/spec/fog/bin/fogdocker_spec.rb +10 -0
- data/spec/fog/bin/glesys_spec.rb +10 -0
- data/spec/fog/bin/gogrid_spec.rb +10 -0
- data/spec/fog/bin/google_spec.rb +10 -0
- data/spec/fog/bin/ibm_spec.rb +10 -0
- data/spec/fog/bin/internetarchive_spec.rb +10 -0
- data/spec/fog/bin/joyent_spec.rb +10 -0
- data/spec/fog/bin/linode_spec.rb +10 -0
- data/spec/fog/bin/local_spec.rb +10 -0
- data/spec/fog/bin/ninefold_spec.rb +10 -0
- data/spec/fog/bin/opennebula_spec.rb +10 -0
- data/spec/fog/bin/openstack_spec.rb +10 -0
- data/spec/fog/bin/openvz_spec.rb +10 -0
- data/spec/fog/bin/ovirt_spec.rb +10 -0
- data/spec/fog/bin/powerdns_spec.rb +9 -0
- data/spec/fog/bin/profitbricks_spec.rb +10 -0
- data/spec/fog/bin/rackspace_spec.rb +10 -0
- data/spec/fog/bin/rage4_spec.rb +10 -0
- data/spec/fog/bin/riakcs_spec.rb +10 -0
- data/spec/fog/bin/sakuracloud_spec.rb +10 -0
- data/spec/fog/bin/serverlove_spec.rb +10 -0
- data/spec/fog/bin/softlayer_spec.rb +10 -0
- data/spec/fog/bin/stormondemand_spec.rb +10 -0
- data/spec/fog/bin/vcloud_spec.rb +10 -0
- data/spec/fog/bin/vclouddirector_spec.rb +10 -0
- data/spec/fog/bin/vmfusion_spec.rb +10 -0
- data/spec/fog/bin/voxel_spec.rb +10 -0
- data/spec/fog/bin/vsphere_spec.rb +10 -0
- data/spec/fog/bin/xenserver_spec.rb +10 -0
- data/spec/fog/bin/zerigo_spec.rb +10 -0
- data/spec/fog/bin_spec.rb +161 -0
- data/spec/fog/cdn_spec.rb +14 -0
- data/spec/fog/compute_spec.rb +19 -0
- data/spec/fog/dns_spec.rb +19 -0
- data/spec/fog/identity_spec.rb +14 -0
- data/spec/fog/image_spec.rb +14 -0
- data/spec/fog/metering_spec.rb +14 -0
- data/spec/fog/monitoring_spec.rb +14 -0
- data/spec/fog/network_spec.rb +14 -0
- data/spec/fog/orchestration_spec.rb +14 -0
- data/spec/fog/storage_spec.rb +14 -0
- data/spec/fog/support_spec.rb +14 -0
- data/spec/fog/volume_spec.rb +14 -0
- data/spec/fog/vpn_spec.rb +14 -0
- data/spec/fog/xml/connection_spec.rb +33 -0
- data/spec/helpers/bin.rb +34 -0
- data/spec/spec_helper.rb +18 -0
- data/tests/digitalocean/helper.rb +56 -0
- data/tests/digitalocean/requests/compute/list_flavors_tests.rb +25 -0
- data/tests/digitalocean/requests/compute/list_images_tests.rb +25 -0
- data/tests/digitalocean/requests/compute/list_regions_tests.rb +21 -0
- data/tests/digitalocean/requests/compute/server_tests.rb +77 -0
- data/tests/digitalocean/requests/compute_v2/list_ssh_keys_tests.rb +20 -0
- data/tests/helper.rb +25 -0
- data/tests/helpers/format_helper.rb +100 -0
- data/tests/helpers/mock_helper.rb +14 -0
- data/tests/helpers/succeeds_helper.rb +10 -0
- data/tests/lorem.txt +1 -0
- data/tests/watchr.rb +22 -0
- 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
|