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
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