bbcloud 0.10.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
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