bbcloud 0.10.1 → 0.11.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 (94) hide show
  1. data/bbcloud.gemspec +2 -2
  2. data/lib/bbcloud/api.rb +1 -1
  3. data/lib/bbcloud/cli.rb +8 -2
  4. data/lib/bbcloud/commands/servers-activate-cloud.rb +23 -0
  5. data/lib/bbcloud/commands/types-list.rb +1 -1
  6. data/lib/bbcloud/config.rb +1 -0
  7. data/lib/bbcloud/servers.rb +4 -0
  8. data/lib/bbcloud/types.rb +8 -0
  9. data/lib/bbcloud/vendor/fog/lib/fog/compute/brightbox.rb +162 -0
  10. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/account.rb +51 -0
  11. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/cloud_ip.rb +47 -0
  12. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/cloud_ips.rb +34 -0
  13. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/flavor.rb +33 -0
  14. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/flavors.rb +28 -0
  15. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/image.rb +56 -0
  16. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/images.rb +28 -0
  17. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/load_balancer.rb +50 -0
  18. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/load_balancers.rb +28 -0
  19. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/server.rb +108 -0
  20. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/servers.rb +29 -0
  21. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/user.rb +39 -0
  22. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/users.rb +29 -0
  23. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/zone.rb +21 -0
  24. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/zones.rb +29 -0
  25. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/activate_console_server.rb +20 -0
  26. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/add_listeners_load_balancer.rb +20 -0
  27. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/add_nodes_load_balancer.rb +20 -0
  28. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_api_client.rb +19 -0
  29. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_cloud_ip.rb +19 -0
  30. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_image.rb +19 -0
  31. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_load_balancer.rb +19 -0
  32. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_server.rb +19 -0
  33. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_api_client.rb +20 -0
  34. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_cloud_ip.rb +20 -0
  35. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_image.rb +20 -0
  36. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_load_balancer.rb +20 -0
  37. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_server.rb +20 -0
  38. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_account.rb +19 -0
  39. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_api_client.rb +20 -0
  40. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_cloud_ip.rb +20 -0
  41. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_image.rb +20 -0
  42. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_interface.rb +20 -0
  43. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_load_balancer.rb +20 -0
  44. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_server.rb +20 -0
  45. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_server_type.rb +20 -0
  46. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_user.rb +20 -0
  47. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_zone.rb +20 -0
  48. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_api_clients.rb +19 -0
  49. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_cloud_ips.rb +19 -0
  50. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_images.rb +19 -0
  51. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_load_balancers.rb +19 -0
  52. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_server_types.rb +19 -0
  53. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_servers.rb +19 -0
  54. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_users.rb +19 -0
  55. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_zones.rb +19 -0
  56. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/map_cloud_ip.rb +20 -0
  57. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/remove_listeners_load_balancer.rb +20 -0
  58. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/remove_nodes_load_balancer.rb +20 -0
  59. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/reset_ftp_password_account.rb +19 -0
  60. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/resize_server.rb +19 -0
  61. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/shutdown_server.rb +20 -0
  62. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/snapshot_server.rb +20 -0
  63. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/start_server.rb +20 -0
  64. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/stop_server.rb +20 -0
  65. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/unmap_cloud_ip.rb +20 -0
  66. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_account.rb +20 -0
  67. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_api_client.rb +21 -0
  68. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_image.rb +21 -0
  69. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_load_balancer.rb +21 -0
  70. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_server.rb +21 -0
  71. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_user.rb +21 -0
  72. data/lib/bbcloud/vendor/fog/lib/fog/compute.rb +43 -0
  73. data/lib/bbcloud/vendor/fog/lib/fog/core/attributes.rb +178 -0
  74. data/lib/bbcloud/vendor/fog/lib/fog/core/collection.rb +127 -0
  75. data/lib/bbcloud/vendor/fog/lib/fog/core/connection.rb +35 -0
  76. data/lib/bbcloud/vendor/fog/lib/fog/core/credentials.rb +92 -0
  77. data/lib/bbcloud/vendor/fog/lib/fog/core/deprecation.rb +23 -0
  78. data/lib/bbcloud/vendor/fog/lib/fog/core/errors.rb +20 -0
  79. data/lib/bbcloud/vendor/fog/lib/fog/core/hmac.rb +48 -0
  80. data/lib/bbcloud/vendor/fog/lib/fog/core/mock.rb +68 -0
  81. data/lib/bbcloud/vendor/fog/lib/fog/core/model.rb +57 -0
  82. data/lib/bbcloud/vendor/fog/lib/fog/core/parser.rb +99 -0
  83. data/lib/bbcloud/vendor/fog/lib/fog/core/provider.rb +18 -0
  84. data/lib/bbcloud/vendor/fog/lib/fog/core/scp.rb +67 -0
  85. data/lib/bbcloud/vendor/fog/lib/fog/core/service.rb +175 -0
  86. data/lib/bbcloud/vendor/fog/lib/fog/core/ssh.rb +120 -0
  87. data/lib/bbcloud/vendor/fog/lib/fog/core/time.rb +27 -0
  88. data/lib/bbcloud/vendor/fog/lib/fog/core/wait_for.rb +17 -0
  89. data/lib/bbcloud/vendor/fog/lib/fog/core.rb +32 -0
  90. data/lib/bbcloud/vendor/fog/lib/fog/providers/brightbox.rb +9 -0
  91. data/lib/bbcloud/vendor/fog/lib/fog/providers.rb +9 -0
  92. data/lib/bbcloud/vendor/fog/lib/fog.rb +14 -0
  93. data/lib/bbcloud/version.rb +1 -1
  94. metadata +105 -26
data/bbcloud.gemspec CHANGED
@@ -25,8 +25,8 @@ Gem::Specification.new do |s|
25
25
 
26
26
  s.add_dependency 'gli', '1.2.5'
27
27
  s.add_dependency 'hirb', '0.3.5'
28
- s.add_dependency 'fog', '=0.4.0'
29
- s.add_dependency 'excon', '>=0.3.7'
28
+ # s.add_dependency 'fog', '=0.7.0'
29
+ s.add_dependency 'excon', '>=0.5.6'
30
30
  s.add_dependency 'ini', '0.1.1'
31
31
 
32
32
  end
data/lib/bbcloud/api.rb CHANGED
@@ -14,7 +14,7 @@ module Brightbox
14
14
  if @@api
15
15
  @@api
16
16
  else
17
- @@api = Fog::Brightbox::Compute.new CONFIG.to_fog
17
+ @@api = Fog::Compute.new CONFIG.to_fog
18
18
  @@api.oauth_token = CONFIG.oauth_token
19
19
  @@api
20
20
  end
data/lib/bbcloud/cli.rb CHANGED
@@ -1,15 +1,17 @@
1
1
  os_config = File.join(File.dirname(__FILE__), 'os_config.rb')
2
2
  require os_config if File.exist? os_config
3
3
 
4
+ vendor_dir = File.join(File.dirname(__FILE__), 'vendor/')
5
+
4
6
  unless defined?(DISABLE_RUBYGEMS)
5
7
  require "rubygems"
6
8
  gem "json", "=1.4.6"
7
9
  gem "json_pure", "=1.4.6"
8
- gem "fog", "=0.4.0"
10
+ gem "fog", "=0.4.0" unless File.exist? vendor_dir + 'fog'
9
11
  end
10
12
 
11
13
  # Add any vendored libraries into search path
12
- Dir.glob(File.join(File.dirname(__FILE__), 'vendor/*')).each do |f|
14
+ Dir.glob(vendor_dir + '*').each do |f|
13
15
  $:.unshift File.join(f, 'lib')
14
16
  end
15
17
 
@@ -98,6 +100,9 @@ switch [:s, :simple]
98
100
  desc "Set the api client to use (named in #{CONFIG.config_filename})"
99
101
  flag [:c, :client]
100
102
 
103
+ desc "Disable peer SSL certificate verification"
104
+ switch [:k, :insecure]
105
+
101
106
  # Load the command libraries for the current group
102
107
  cmd_group_name = File.basename($0).gsub(/brightbox\-/,'')
103
108
  cmd_group_files = File.join(File.dirname(__FILE__), "commands/#{cmd_group_name}*.rb")
@@ -107,6 +112,7 @@ end
107
112
 
108
113
  pre do |global_options,command,options,args|
109
114
  CONFIG.client_name = global_options[:c] if global_options[:c]
115
+ Excon.ssl_verify_peer = false if global_options[:k]
110
116
  info "INFO: client_id: #{CONFIG.client_name}" if CONFIG.clients.size > 1
111
117
  true
112
118
  end
@@ -0,0 +1,23 @@
1
+ desc 'Activate the console service for one or more servers'
2
+ arg_name 'server-id...'
3
+ command [:activate_console] do |c|
4
+
5
+ c.action do |global_options,options,args|
6
+
7
+ raise "You must specify servers to activate the console for" if args.empty?
8
+
9
+ servers = Server.find_or_call(args) do |id|
10
+ raise "Couldn't find server #{id}"
11
+ end
12
+
13
+ consoles = []
14
+
15
+ servers.each do |s|
16
+ info "Activating console for server #{s}"
17
+ r = s.activate_console
18
+ consoles << { :url => r["console_url"], :token => r["console_token"], :expires => r["console_token_expires"] }
19
+ end
20
+
21
+ render_table(consoles, global_options.merge(:fields => [:url, :token, :expires]))
22
+ end
23
+ end
@@ -11,6 +11,6 @@ command [:list] do |c|
11
11
  end
12
12
  end
13
13
 
14
- render_table(types, global_options)
14
+ render_table(types.sort, global_options)
15
15
  end
16
16
  end
@@ -104,6 +104,7 @@ class BBConfig
104
104
  end
105
105
  end
106
106
  {
107
+ :provider => 'Brightbox',
107
108
  :brightbox_api_url => c['api_url'],
108
109
  :brightbox_auth_url => c['auth_url'] || c['api_url'],
109
110
  :brightbox_client_id => c['client_id'],
@@ -42,6 +42,10 @@ module Brightbox
42
42
  raise Conflict, "Cannot delete server #{id}"
43
43
  end
44
44
 
45
+ def activate_console
46
+ self.class.conn.activate_console_server id
47
+ end
48
+
45
49
  def self.get(id)
46
50
  conn.servers.get id
47
51
  end
data/lib/bbcloud/types.rb CHANGED
@@ -35,5 +35,13 @@ module Brightbox
35
35
  def self.default_field_order
36
36
  [:id, :name, :handle, :ram, :disk, :cores, :description]
37
37
  end
38
+
39
+ def <=>(b)
40
+ if b.is_a? Type
41
+ self.ram <=> b.ram
42
+ else
43
+ self.ram <=> b
44
+ end
45
+ end
38
46
  end
39
47
  end
@@ -0,0 +1,162 @@
1
+ module Fog
2
+ module Brightbox
3
+ class Compute < Fog::Service
4
+
5
+ API_URL = "https://api.gb1.brightbox.com/"
6
+
7
+ requires :brightbox_client_id, :brightbox_secret
8
+ recognizes :brightbox_auth_url, :brightbox_api_url
9
+ recognizes :provider # remove post deprecation
10
+
11
+ model_path 'fog/compute/models/brightbox'
12
+ model :account # Singular resource, no collection
13
+ collection :servers
14
+ model :server
15
+ collection :flavors
16
+ model :flavor
17
+ collection :images
18
+ model :image
19
+ collection :load_balancers
20
+ model :load_balancer
21
+ collection :zones
22
+ model :zone
23
+ collection :cloud_ips
24
+ model :cloud_ip
25
+ collection :users
26
+ model :user
27
+
28
+ request_path 'fog/compute/requests/brightbox'
29
+ request :activate_console_server
30
+ request :add_listeners_load_balancer
31
+ request :add_nodes_load_balancer
32
+ request :create_api_client
33
+ request :create_cloud_ip
34
+ request :create_image
35
+ request :create_load_balancer
36
+ request :create_server
37
+ request :destroy_api_client
38
+ request :destroy_cloud_ip
39
+ request :destroy_image
40
+ request :destroy_load_balancer
41
+ request :destroy_server
42
+ request :get_account
43
+ request :get_api_client
44
+ request :get_cloud_ip
45
+ request :get_image
46
+ request :get_interface
47
+ request :get_load_balancer
48
+ request :get_server
49
+ request :get_server_type
50
+ request :get_user
51
+ request :get_zone
52
+ request :list_api_clients
53
+ request :list_cloud_ips
54
+ request :list_images
55
+ request :list_load_balancers
56
+ request :list_server_types
57
+ request :list_servers
58
+ request :list_users
59
+ request :list_zones
60
+ request :map_cloud_ip
61
+ request :remove_listeners_load_balancer
62
+ request :remove_nodes_load_balancer
63
+ request :reset_ftp_password_account
64
+ request :resize_server
65
+ request :shutdown_server
66
+ request :snapshot_server
67
+ request :start_server
68
+ request :stop_server
69
+ request :unmap_cloud_ip
70
+ request :update_account
71
+ request :update_api_client
72
+ request :update_image
73
+ request :update_load_balancer
74
+ request :update_server
75
+ request :update_user
76
+
77
+ class Mock
78
+
79
+ def initialize(options)
80
+ unless options.delete(:provider)
81
+ location = caller.first
82
+ warning = "[yellow][WARN] Fog::Brightbox::Compute.new is deprecated, use Fog::Compute.new(:provider => 'Brightbox') instead[/]"
83
+ warning << " [light_black](" << location << ")[/] "
84
+ Formatador.display_line(warning)
85
+ end
86
+
87
+ @brightbox_client_id = options[:brightbox_client_id] || Fog.credentials[:brightbox_client_id]
88
+ @brightbox_secret = options[:brightbox_secret] || Fog.credentials[:brightbox_secret]
89
+ end
90
+
91
+ def request(options)
92
+ raise "Not implemented"
93
+ end
94
+ end
95
+
96
+ class Real
97
+
98
+ def initialize(options)
99
+ unless options.delete(:provider)
100
+ location = caller.first
101
+ warning = "[yellow][WARN] Fog::Brightbox::Compute.new is deprecated, use Fog::Compute.new(:provider => 'Brightbox') instead[/]"
102
+ warning << " [light_black](" << location << ")[/] "
103
+ Formatador.display_line(warning)
104
+ end
105
+
106
+ require "json"
107
+ # Currently authentication and api endpoints are the same but may change
108
+ @auth_url = options[:brightbox_auth_url] || Fog.credentials[:brightbox_auth_url] || API_URL
109
+ @api_url = options[:brightbox_api_url] || Fog.credentials[:brightbox_api_url] || API_URL
110
+ @brightbox_client_id = options[:brightbox_client_id] || Fog.credentials[:brightbox_client_id]
111
+ @brightbox_secret = options[:brightbox_secret] || Fog.credentials[:brightbox_secret]
112
+ @connection = Fog::Connection.new(@api_url)
113
+ end
114
+
115
+ def request(params)
116
+ begin
117
+ get_oauth_token if @oauth_token.nil?
118
+ response = authenticated_request(params)
119
+ rescue Excon::Errors::Unauthorized => e
120
+ get_oauth_token
121
+ response = authenticated_request(params)
122
+ end
123
+ unless response.body.empty?
124
+ response = JSON.parse(response.body)
125
+ end
126
+ end
127
+
128
+ def account
129
+ Fog::Brightbox::Compute::Account.new(get_account)
130
+ end
131
+
132
+ private
133
+ def get_oauth_token(options = {})
134
+ auth_url = options[:brightbox_auth_url] || @auth_url
135
+
136
+ connection = Fog::Connection.new(auth_url)
137
+ @authentication_body = {'client_id' => @brightbox_client_id, 'grant_type' => 'none'}.to_json
138
+
139
+ response = connection.request({
140
+ :path => "/token",
141
+ :expects => 200,
142
+ :headers => {
143
+ 'Authorization' => "Basic " + Base64.encode64("#{@brightbox_client_id}:#{@brightbox_secret}").chomp,
144
+ 'Content-Type' => 'application/json'
145
+ },
146
+ :method => 'POST',
147
+ :body => @authentication_body
148
+ })
149
+ @oauth_token = JSON.parse(response.body)["access_token"]
150
+ return @oauth_token
151
+ end
152
+
153
+ def authenticated_request(options)
154
+ headers = options[:headers] || {}
155
+ headers.merge!("Authorization" => "OAuth #{@oauth_token}")
156
+ options[:headers] = headers
157
+ @connection.request(options)
158
+ end
159
+ end
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,51 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Brightbox
5
+ class Compute
6
+
7
+ class Account < Fog::Model
8
+
9
+ identity :id
10
+ attribute :resource_type
11
+ attribute :url
12
+ attribute :name
13
+ attribute :status
14
+ attribute :address_1
15
+ attribute :address_2
16
+ attribute :city
17
+ attribute :county
18
+ attribute :postcode
19
+ attribute :country_code
20
+ attribute :country_name
21
+ attribute :vat_registration_number
22
+ attribute :telephone_number
23
+ attribute :telephone_verified
24
+ attribute :ram_limit
25
+ attribute :ram_used
26
+ attribute :limits_cloudips
27
+ attribute :library_ftp_host
28
+ attribute :library_ftp_user
29
+ # This is always returned as null/nil unless performing a reset_ftp_password request
30
+ attribute :library_ftp_password
31
+ attribute :created_at, :type => :time
32
+
33
+
34
+
35
+ attribute :owner_id, :aliases => "owner", :squash => "id"
36
+ attribute :clients
37
+ attribute :images
38
+ attribute :servers
39
+ attribute :users
40
+ attribute :zones
41
+
42
+ def reset_ftp_password
43
+ requires :identity
44
+ connection.reset_ftp_password_account(identity)["library_ftp_password"]
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,47 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Brightbox
5
+ class Compute
6
+
7
+ class CloudIp < Fog::Model
8
+
9
+ identity :id
10
+
11
+ attribute :url
12
+ attribute :name
13
+ attribute :status
14
+ attribute :resource_type
15
+ attribute :description
16
+
17
+ attribute :reverse_dns
18
+ attribute :public_ip
19
+
20
+ attribute :account_id, :aliases => "account", :squash => "id"
21
+ attribute :interface_id, :aliases => "interface", :squash => "id"
22
+ attribute :server_id, :aliases => "server", :squash => "id"
23
+
24
+ def map(interface_to_map)
25
+ requires :identity
26
+ connection.map_cloud_ip(identity, :interface => interface_to_map)
27
+ end
28
+
29
+ def mapped?
30
+ status == "mapped"
31
+ end
32
+
33
+ def unmap
34
+ requires :identity
35
+ connection.unmap_cloud_ip(identity)
36
+ end
37
+
38
+ def destroy
39
+ requires :identity
40
+ connection.destroy_cloud_ip(identity)
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,34 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/compute/models/brightbox/cloud_ip'
3
+
4
+ module Fog
5
+ module Brightbox
6
+ class Compute
7
+
8
+ class CloudIps < Fog::Collection
9
+
10
+ model Fog::Brightbox::Compute::CloudIp
11
+
12
+ def all
13
+ data = connection.list_cloud_ips
14
+ load(data)
15
+ end
16
+
17
+ def get(identifier)
18
+ return nil if identifier.nil? || identifier == ""
19
+ data = connection.get_cloud_ip(identifier)
20
+ new(data)
21
+ rescue Excon::Errors::NotFound
22
+ nil
23
+ end
24
+
25
+ def allocate
26
+ data = connection.create_cloud_ip
27
+ new(data)
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,33 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Brightbox
5
+ class Compute
6
+
7
+ class Flavor < Fog::Model
8
+
9
+ identity :id
10
+
11
+ attribute :url
12
+ attribute :name
13
+ attribute :status
14
+
15
+ attribute :handle
16
+
17
+ attribute :bits
18
+ attribute :cores
19
+ attribute :disk, :aliases => "disk_size"
20
+ attribute :ram
21
+
22
+ attribute :resource_type
23
+ attribute :description
24
+
25
+ def bits
26
+ 0 # This is actually based on the Image type used. 32bit or 64bit Images are supported
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,28 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/compute/models/brightbox/flavor'
3
+
4
+ module Fog
5
+ module Brightbox
6
+ class Compute
7
+
8
+ class Flavors < Fog::Collection
9
+
10
+ model Fog::Brightbox::Compute::Flavor
11
+
12
+ def all
13
+ data = connection.list_server_types
14
+ load(data)
15
+ end
16
+
17
+ def get(identifier)
18
+ data = connection.get_server_type(identifier)
19
+ new(data)
20
+ rescue Excon::Errors::NotFound
21
+ nil
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,56 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Brightbox
5
+ class Compute
6
+
7
+ class Image < Fog::Model
8
+
9
+ identity :id
10
+
11
+ attribute :url
12
+ attribute :name
13
+ attribute :status
14
+ attribute :source
15
+ attribute :source_type
16
+
17
+ attribute :ancestor_id, :aliases => "ancestor", :squash => "id"
18
+ attribute :owner_id, :aliases => "owner", :squash => "id"
19
+ attribute :arch
20
+
21
+ attribute :resource_type
22
+ attribute :description
23
+ attribute :public
24
+ attribute :official
25
+ attribute :virtual_size
26
+ attribute :disk_size
27
+ attribute :created_at
28
+
29
+ def ready?
30
+ status == "available"
31
+ end
32
+
33
+ def save
34
+ requires :source, :arch
35
+ options = {
36
+ :source => source,
37
+ :arch => arch,
38
+ :name => name,
39
+ :description => description
40
+ }.delete_if {|k,v| v.nil? || v == "" }
41
+ data = connection.create_image(options)
42
+ merge_attributes(data)
43
+ true
44
+ end
45
+
46
+ def destroy
47
+ requires :identity
48
+ connection.destroy_image(identity)
49
+ true
50
+ end
51
+
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,28 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/compute/models/brightbox/image'
3
+
4
+ module Fog
5
+ module Brightbox
6
+ class Compute
7
+
8
+ class Images < Fog::Collection
9
+
10
+ model Fog::Brightbox::Compute::Image
11
+
12
+ def all
13
+ data = connection.list_images
14
+ load(data)
15
+ end
16
+
17
+ def get(identifier)
18
+ data = connection.get_image(identifier)
19
+ new(data)
20
+ rescue Excon::Errors::NotFound
21
+ nil
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,50 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Brightbox
5
+ class Compute
6
+
7
+ class LoadBalancer < Fog::Model
8
+
9
+ identity :id
10
+
11
+ attribute :url
12
+ attribute :name
13
+ attribute :status
14
+ attribute :resource_type
15
+
16
+ attribute :nodes
17
+ attribute :policy
18
+ attribute :healthcheck
19
+ attribute :listeners
20
+ attribute :account
21
+
22
+ def ready?
23
+ status == 'active'
24
+ end
25
+
26
+ def save
27
+ requires :nodes, :listeners, :healthcheck
28
+ options = {
29
+ :nodes => nodes,
30
+ :listeners => listeners,
31
+ :healthcheck => healthcheck,
32
+ :policy => policy,
33
+ :name => name
34
+ }.delete_if {|k,v| v.nil? || v == "" }
35
+ data = connection.create_load_balancer(options)
36
+ merge_attributes(data)
37
+ true
38
+ end
39
+
40
+ def destroy
41
+ requires :identity
42
+ connection.destroy_load_balancer(identity)
43
+ true
44
+ end
45
+
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,28 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/compute/models/brightbox/load_balancer'
3
+
4
+ module Fog
5
+ module Brightbox
6
+ class Compute
7
+
8
+ class LoadBalancers < Fog::Collection
9
+
10
+ model Fog::Brightbox::Compute::LoadBalancer
11
+
12
+ def all
13
+ data = connection.list_load_balancers
14
+ load(data)
15
+ end
16
+
17
+ def get(identifier)
18
+ data = connection.get_load_balancer(identifier)
19
+ new(data)
20
+ rescue Excon::Errors::NotFound
21
+ nil
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+ end
28
+ end