fog-digitalocean 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
data/bin/fog ADDED
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'fog'))
4
+ require 'optparse'
5
+ require 'irb'
6
+ require 'yaml'
7
+
8
+ options = OptionParser.new do |opts|
9
+ opts.banner = 'usage: fog [options] CREDENTIAL'
10
+
11
+ opts.on('-C', '--credentials-path FILE', 'Path to the credentials file') do |file|
12
+ Fog.credentials_path = file
13
+ end
14
+
15
+ opts.on_tail('-v', '--version', 'Prints the version') do
16
+ puts Fog::VERSION
17
+ exit
18
+ end
19
+
20
+ opts.on_tail('-h', '--help', 'Prints this message') do
21
+ puts opts
22
+ exit
23
+ end
24
+ end
25
+ options.parse!
26
+
27
+ Fog.credential = ARGV.first ? ARGV.first.to_sym : nil
28
+ Fog.mock! if ENV['FOG_MOCK']
29
+ if Fog.credentials.empty?
30
+ begin
31
+ Fog::Errors.missing_credentials
32
+ rescue Fog::Errors::LoadError => error
33
+ abort error.message
34
+ end
35
+ end
36
+
37
+ require 'fog/bin'
38
+
39
+ providers = Fog.available_providers
40
+ providers = if providers.length > 1
41
+ providers[0...-1].join(', ') << ' and ' << providers[-1]
42
+ else
43
+ providers.first
44
+ end
45
+
46
+ if ARGV.length > 1
47
+
48
+ result = instance_eval(ARGV[1..-1].join(' '))
49
+ puts(Fog::JSON.encode(result))
50
+
51
+ else
52
+
53
+ ARGV.clear # Avoid passing args to IRB
54
+ IRB.setup(nil)
55
+ @irb = IRB::Irb.new(nil)
56
+ IRB.conf[:MAIN_CONTEXT] = @irb.context
57
+ IRB.conf[:PROMPT][:FOG] = IRB.conf[:PROMPT][:SIMPLE].dup
58
+ IRB.conf[:PROMPT][:FOG][:RETURN] = "%s\n"
59
+ @irb.context.prompt_mode = :FOG
60
+ @irb.context.workspace = IRB::WorkSpace.new(binding)
61
+
62
+ trap 'INT' do
63
+ @irb.signal_handle
64
+ end
65
+
66
+ Fog::Formatador.display_line('Welcome to fog interactive!')
67
+ Fog::Formatador.display_line(":#{Fog.credential} provides #{providers}")
68
+ providers = Fog.providers
69
+
70
+ # FIXME: hacks until we can `include Fog` in bin
71
+ CDN = Fog::CDN
72
+ Compute = Fog::Compute
73
+ DNS = Fog::DNS
74
+ Storage = Fog::Storage
75
+
76
+ catch(:IRB_EXIT) { @irb.eval_input }
77
+
78
+ end
@@ -0,0 +1,61 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "fog/digitalocean/version"
5
+
6
+ Gem::Specification.new do |s|
7
+ s.specification_version = 2 if s.respond_to? :specification_version=
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
+
10
+ ## Leave these as is they will be modified for you by the rake gemspec task.
11
+ ## If your rubyforge_project name is different, then edit it and comment out
12
+ ## the sub! line in the Rakefile
13
+ s.name = "fog-digitalocean"
14
+ s.version = Fog::Digitalocean::VERSION
15
+ s.date = "2016-03-30"
16
+
17
+ ## Make sure your summary is short. The description may be as long
18
+ ## as you like.
19
+ s.summary = %q{DigitalOcean fog provider gem}
20
+ s.description = %q{DigitalOcean fog provider gem}
21
+
22
+ ## List the primary authors. If there are a bunch of authors, it's probably
23
+ ## better to set the email to an email list or something. If you don't have
24
+ ## a custom homepage, consider using your GitHub URL or the like.
25
+ s.authors = ["JJ Asghar", "Suraj Shirvankar"]
26
+ s.email = ["jj@chef.io", "surajshirvankar@gmail.com"]
27
+ s.homepage = "http://github.com/fog/fog-digitalocean"
28
+ s.license = "MIT"
29
+
30
+ ## This sections is only necessary if you have C extensions.
31
+ # s.require_paths << 'ext'
32
+ # s.extensions = %w[ext/extconf.rb]
33
+
34
+ ## This gets added to the $LOAD_PATH so that 'lib/NAME.rb' can be required as
35
+ ## require 'NAME.rb' or'/lib/NAME/file.rb' can be as require 'NAME/file.rb'
36
+ s.require_paths = %w[lib]
37
+
38
+ ## If your gem includes any executables, list them here.
39
+ s.executables = ["fog"]
40
+
41
+ ## Specify any RDoc options here. You'll want to add your README and
42
+ ## LICENSE files to the extra_rdoc_files list.
43
+ s.rdoc_options = ["--charset=UTF-8"]
44
+ s.extra_rdoc_files = %w[README.md]
45
+
46
+ s.add_development_dependency 'bundler', '~> 1.6'
47
+ s.add_development_dependency 'rake', '~> 10.0'
48
+ s.add_development_dependency 'shindo', '~> 0.3'
49
+ s.add_development_dependency 'rubyzip', '~> 0.9.9'
50
+ s.add_development_dependency 'mime-types'
51
+ s.add_development_dependency 'mime-types-data'
52
+ s.add_development_dependency 'rubocop'
53
+
54
+ s.add_dependency 'fog-core', '~> 1.42'
55
+ s.add_dependency 'fog-json', '>= 1.0'
56
+ s.add_dependency 'fog-xml', '>= 0.1'
57
+ s.add_dependency 'ipaddress', '>= 0.5'
58
+
59
+ s.files = `git ls-files`.split("\n")
60
+ s.test_files = `git ls-files -- {spec,tests}/*`.split("\n")
61
+ end
@@ -0,0 +1,14 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Shared components
4
+ gem "fog-core", :github => "fog/fog-core"
5
+ gem "fog-json", :github => "fog/fog-json"
6
+
7
+ group :development, :test do
8
+ # This is here because gemspec doesn"t support require: false
9
+ gem "coveralls", :require => false
10
+ gem "netrc", :require => false
11
+ gem "octokit", :require => false
12
+ end
13
+
14
+ gemspec :path => "../"
@@ -0,0 +1 @@
1
+ require 'fog/digitalocean/compute'
@@ -0,0 +1,6 @@
1
+ # 1.10.1 2013/04/04
2
+
3
+ * Initial release
4
+
5
+ Getting started example: https://github.com/fog/fog/blob/master/lib/fog/digitalocean/examples/getting_started.md
6
+
@@ -0,0 +1,109 @@
1
+ require 'fog/digitalocean/core'
2
+
3
+ module Fog
4
+ module Compute
5
+ class DigitalOcean < Fog::Service
6
+ requires :digitalocean_token
7
+
8
+ model_path 'fog/digitalocean/models/compute'
9
+ model :server
10
+ collection :servers
11
+ model :image
12
+ collection :images
13
+ model :region
14
+ collection :regions
15
+ model :flavor
16
+ collection :flavors
17
+ model :ssh_key
18
+ collection :ssh_keys
19
+
20
+ request_path 'fog/digitalocean/requests/compute'
21
+ request :change_kernel
22
+ request :create_server
23
+ request :create_ssh_key
24
+ request :destroy_server
25
+ request :delete_ssh_key
26
+ request :disable_backups
27
+ request :enable_ipv6
28
+ request :enable_private_networking
29
+ request :get_droplet_action
30
+ request :get_image_details
31
+ request :get_server_details
32
+ request :get_ssh_key
33
+ request :list_droplet_actions
34
+ request :list_flavors
35
+ request :list_images
36
+ request :list_regions
37
+ request :list_servers
38
+ request :list_ssh_keys
39
+ request :password_reset
40
+ request :power_cycle
41
+ request :power_off
42
+ request :power_on
43
+ request :reboot_server
44
+ request :rebuild
45
+ request :rename
46
+ request :resize
47
+ request :restore
48
+ request :shutdown
49
+ request :snapshot
50
+ request :update_ssh_key
51
+ request :upgrade
52
+
53
+
54
+ class Mock
55
+ def self.data
56
+ @data ||= Hash.new do |hash, key|
57
+ hash[key] = {
58
+ :servers => [],
59
+ :ssh_keys => []
60
+ }
61
+ end
62
+ end
63
+
64
+ def initialize(options={})
65
+ @digitalocean_token = options[:digitalocean_token]
66
+ end
67
+
68
+ def data
69
+ self.class.data[@digitalocean_token]
70
+ end
71
+
72
+ def reset_data
73
+ self.class.data.delete(@digitalocean_token)
74
+ end
75
+ end
76
+
77
+ class Real
78
+ def initialize(options={})
79
+ digitalocean_token = options[:digitalocean_token]
80
+ persistent = false
81
+ options = {
82
+ headers: {
83
+ 'Authorization' => "Bearer #{digitalocean_token}",
84
+ }
85
+ }
86
+ @connection = Fog::Core::Connection.new 'https://api.digitalocean.com', persistent, options
87
+ end
88
+
89
+ def request(params)
90
+ params[:headers] ||= {}
91
+ begin
92
+ response = @connection.request(params)
93
+ rescue Excon::Errors::HTTPStatusError => error
94
+ raise case error
95
+ when Excon::Errors::NotFound
96
+ NotFound.slurp(error)
97
+ else
98
+ error
99
+ end
100
+ end
101
+ unless response.body.empty?
102
+ response.body = Fog::JSON.decode(response.body)
103
+ end
104
+ response
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,9 @@
1
+ require 'fog/core'
2
+ require 'fog/json'
3
+
4
+ module Fog
5
+ module DigitalOcean
6
+ extend Fog::Provider
7
+ service(:compute, 'Compute')
8
+ end
9
+ end
@@ -0,0 +1,123 @@
1
+ # Getting started: the compute service
2
+
3
+ You'll need a DigitalOcean account and an API token to use this provider.
4
+
5
+ Get one from https://cloud.digitalocean.com/settings/tokens/new
6
+
7
+ Write down the Access Token.
8
+
9
+ ## Connecting, retrieving and managing server objects
10
+
11
+ Before we start, I guess it will be useful to the reader to know
12
+ that Fog servers are 'droplets' in DigitalOcean's parlance.
13
+ 'Server' is the Fog way to name VMs, and we have
14
+ respected that in the DigitalOcean's Fog provider.
15
+
16
+ First, create a connection to the host:
17
+
18
+ ```ruby
19
+ require 'fog/digitalocean'
20
+
21
+ docean = Fog::Compute.new({
22
+ :provider => 'DigitalOcean',
23
+ :digitalocean_token => 'poiuweoruwoeiuroiwuer', # your Access Token here
24
+ })
25
+ ```
26
+
27
+ ## SSH Key Management
28
+
29
+ Access to DigitalOcean servers can be managed with SSH keys. These can be assigned to servers at creation time so you can access them without having to use a password.
30
+
31
+ Creating a key:
32
+
33
+ ```ruby
34
+ docean.ssh_keys.create(
35
+ :name => 'Default SSH Key',
36
+ :ssh_pub_key => File.read('~/.ssh/id_rsa.pub'))
37
+ )
38
+ ```
39
+
40
+ Listing all keys:
41
+
42
+ ```ruby
43
+ docean.ssh_keys.each do | key |
44
+ puts key.name
45
+ puts key.public_key
46
+ puts key.id
47
+ end
48
+ ```
49
+
50
+ Destroying a key:
51
+
52
+ ```ruby
53
+ docean.ssh_keys.destroy(:id => '27100')
54
+ ```
55
+ ## Listing servers
56
+
57
+ Listing servers and attributes:
58
+
59
+ ```ruby
60
+ docean.servers.each do |server|
61
+ # remember, servers are droplets
62
+ puts server.id
63
+ puts server.name
64
+ puts server.status
65
+ puts (server.image['slug'] || server.image['name']) # slug is only for public images, private images use name
66
+ puts server.size['slug']
67
+ puts server.region['slug']
68
+ end
69
+ ```
70
+
71
+ ## Server creation and life-cycle management
72
+
73
+ Creating a new server (droplet):
74
+
75
+ ```ruby
76
+ server = docean.servers.create :name => 'foobar',
77
+ # use the last image listed
78
+ :image => docean.images.last.id,
79
+ # use the first flavor (aka size) listed
80
+ :size => docean.flavors.first.slug,
81
+ # use the first region listed
82
+ :region => docean.regions.first.slug
83
+ ```
84
+
85
+ The server is automatically started after that.
86
+
87
+ We didn't pay attention when choosing the flavor, image and region used
88
+ but you can easily list them too, and then decide:
89
+
90
+ ```ruby
91
+ docean.images.each do |image|
92
+ puts image.id
93
+ puts image.name
94
+ puts image.distribution
95
+ end
96
+
97
+ docean.flavors.each do |flavor|
98
+ puts flavor.slug
99
+ end
100
+
101
+ docean.regions.each do |region|
102
+ puts region.slug
103
+ end
104
+ ```
105
+
106
+ Rebooting a server:
107
+
108
+ ```ruby
109
+ server = docean.servers.first
110
+ server.reboot
111
+ ```
112
+
113
+ Power cycle a server:
114
+
115
+ ```ruby
116
+ server.power_cycle
117
+ ```
118
+
119
+ Destroying the server:
120
+
121
+ ```ruby
122
+ server.destroy
123
+ ```
@@ -0,0 +1,17 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Flavor < Fog::Model
5
+ identity :slug
6
+ attribute :available
7
+ attribute :transfer
8
+ attribute :price_monthly
9
+ attribute :price_hourly
10
+ attribute :memory
11
+ attribute :vcpus
12
+ attribute :disk
13
+ attribute :regions
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOcean
4
+ class Flavors < Fog::Collection
5
+ model Fog::Compute::DigitalOcean::Flavor
6
+
7
+ # Retrieves flavours (aka. sizes)
8
+ # @return [Fog::Compute::DigitalOceanV2:Flavor]
9
+ # @raise [Fog::Compute::DigitalOceanV2::NotFound] - HTTP 404
10
+ # @raise [Fog::Compute::DigitalOceanV2::BadRequest] - HTTP 400
11
+ # @raise [Fog::Compute::DigitalOceanV2::InternalServerError] - HTTP 500
12
+ # @raise [Fog::Compute::DigitalOceanV2::ServiceError]
13
+ # @see https://developers.digitalocean.com/documentation/v2/#list-all-sizes
14
+ def all(filters = {})
15
+ data = service.list_flavors(filters).body["sizes"]
16
+ load(data)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end