fog 0.3.17 → 0.3.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (180) hide show
  1. data/Gemfile.lock +5 -5
  2. data/README.rdoc +16 -7
  3. data/fog.gemspec +102 -27
  4. data/lib/fog.rb +3 -2
  5. data/lib/fog/aws/cdn.rb +2 -1
  6. data/lib/fog/aws/compute.rb +3 -2
  7. data/lib/fog/aws/iam.rb +8 -0
  8. data/lib/fog/aws/models/compute/flavors.rb +2 -1
  9. data/lib/fog/aws/models/compute/server.rb +3 -0
  10. data/lib/fog/aws/models/compute/volume.rb +9 -8
  11. data/lib/fog/aws/models/storage/file.rb +24 -14
  12. data/lib/fog/aws/models/storage/files.rb +4 -14
  13. data/lib/fog/aws/parsers/cdn/distribution.rb +16 -1
  14. data/lib/fog/aws/parsers/cdn/get_distribution_list.rb +13 -0
  15. data/lib/fog/aws/parsers/compute/describe_volumes.rb +2 -0
  16. data/lib/fog/aws/parsers/iam/create_group.rb +2 -2
  17. data/lib/fog/aws/parsers/iam/create_user.rb +26 -0
  18. data/lib/fog/aws/parsers/iam/list_group_policies.rb +28 -0
  19. data/lib/fog/aws/parsers/iam/list_groups.rb +1 -1
  20. data/lib/fog/aws/parsers/storage/complete_multipart_upload.rb +24 -0
  21. data/lib/fog/aws/parsers/storage/initiate_multipart_upload.rb +24 -0
  22. data/lib/fog/aws/parsers/storage/list_multipart_uploads.rb +56 -0
  23. data/lib/fog/aws/parsers/storage/list_parts.rb +40 -0
  24. data/lib/fog/aws/requests/cdn/get_distribution.rb +11 -1
  25. data/lib/fog/aws/requests/cdn/get_distribution_list.rb +9 -1
  26. data/lib/fog/aws/requests/cdn/post_distribution.rb +16 -5
  27. data/lib/fog/aws/requests/cdn/put_distribution_config.rb +102 -0
  28. data/lib/fog/aws/requests/compute/describe_volumes.rb +1 -0
  29. data/lib/fog/aws/requests/compute/run_instances.rb +1 -1
  30. data/lib/fog/aws/requests/iam/add_user_to_group.rb +42 -0
  31. data/lib/fog/aws/requests/iam/create_group.rb +7 -3
  32. data/lib/fog/aws/requests/iam/create_user.rb +47 -0
  33. data/lib/fog/aws/requests/iam/delete_group.rb +5 -1
  34. data/lib/fog/aws/requests/iam/delete_group_policy.rb +42 -0
  35. data/lib/fog/aws/requests/iam/delete_user.rb +40 -0
  36. data/lib/fog/aws/requests/iam/list_group_policies.rb +47 -0
  37. data/lib/fog/aws/requests/iam/list_groups.rb +9 -4
  38. data/lib/fog/aws/requests/iam/put_group_policy.rb +44 -0
  39. data/lib/fog/aws/requests/iam/remove_user_from_group.rb +42 -0
  40. data/lib/fog/aws/requests/simpledb/put_attributes.rb +2 -2
  41. data/lib/fog/aws/requests/storage/abort_multipart_upload.rb +38 -0
  42. data/lib/fog/aws/requests/storage/complete_multipart_upload.rb +60 -0
  43. data/lib/fog/aws/requests/storage/get_service.rb +1 -1
  44. data/lib/fog/aws/requests/storage/initiate_multipart_upload.rb +55 -0
  45. data/lib/fog/aws/requests/storage/list_multipart_uploads.rb +68 -0
  46. data/lib/fog/aws/requests/storage/list_parts.rb +67 -0
  47. data/lib/fog/aws/requests/storage/put_object.rb +12 -5
  48. data/lib/fog/aws/requests/storage/upload_part.rb +51 -0
  49. data/lib/fog/aws/storage.rb +12 -6
  50. data/lib/fog/brightbox.rb +7 -0
  51. data/lib/fog/brightbox/bin.rb +23 -0
  52. data/lib/fog/brightbox/compute.rb +134 -0
  53. data/lib/fog/brightbox/models/compute/account.rb +51 -0
  54. data/lib/fog/brightbox/models/compute/cloud_ip.rb +43 -0
  55. data/lib/fog/brightbox/models/compute/cloud_ips.rb +34 -0
  56. data/lib/fog/brightbox/models/compute/flavor.rb +33 -0
  57. data/lib/fog/brightbox/models/compute/flavors.rb +28 -0
  58. data/lib/fog/brightbox/models/compute/image.rb +52 -0
  59. data/lib/fog/brightbox/models/compute/images.rb +28 -0
  60. data/lib/fog/brightbox/models/compute/server.rb +94 -0
  61. data/lib/fog/brightbox/models/compute/servers.rb +29 -0
  62. data/lib/fog/brightbox/models/compute/user.rb +39 -0
  63. data/lib/fog/brightbox/models/compute/users.rb +29 -0
  64. data/lib/fog/brightbox/models/compute/zone.rb +21 -0
  65. data/lib/fog/brightbox/models/compute/zones.rb +29 -0
  66. data/lib/fog/brightbox/requests/compute/create_api_client.rb +27 -0
  67. data/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +27 -0
  68. data/lib/fog/brightbox/requests/compute/create_image.rb +27 -0
  69. data/lib/fog/brightbox/requests/compute/create_server.rb +27 -0
  70. data/lib/fog/brightbox/requests/compute/destroy_api_client.rb +28 -0
  71. data/lib/fog/brightbox/requests/compute/destroy_cloud_ip.rb +28 -0
  72. data/lib/fog/brightbox/requests/compute/destroy_image.rb +28 -0
  73. data/lib/fog/brightbox/requests/compute/destroy_server.rb +28 -0
  74. data/lib/fog/brightbox/requests/compute/get_account.rb +27 -0
  75. data/lib/fog/brightbox/requests/compute/get_api_client.rb +28 -0
  76. data/lib/fog/brightbox/requests/compute/get_cloud_ip.rb +28 -0
  77. data/lib/fog/brightbox/requests/compute/get_image.rb +28 -0
  78. data/lib/fog/brightbox/requests/compute/get_interface.rb +28 -0
  79. data/lib/fog/brightbox/requests/compute/get_server.rb +28 -0
  80. data/lib/fog/brightbox/requests/compute/get_server_type.rb +28 -0
  81. data/lib/fog/brightbox/requests/compute/get_user.rb +28 -0
  82. data/lib/fog/brightbox/requests/compute/get_zone.rb +28 -0
  83. data/lib/fog/brightbox/requests/compute/list_api_clients.rb +27 -0
  84. data/lib/fog/brightbox/requests/compute/list_cloud_ips.rb +27 -0
  85. data/lib/fog/brightbox/requests/compute/list_images.rb +27 -0
  86. data/lib/fog/brightbox/requests/compute/list_server_types.rb +27 -0
  87. data/lib/fog/brightbox/requests/compute/list_servers.rb +27 -0
  88. data/lib/fog/brightbox/requests/compute/list_users.rb +27 -0
  89. data/lib/fog/brightbox/requests/compute/list_zones.rb +27 -0
  90. data/lib/fog/brightbox/requests/compute/map_cloud_ip.rb +28 -0
  91. data/lib/fog/brightbox/requests/compute/reset_ftp_password_account.rb +27 -0
  92. data/lib/fog/brightbox/requests/compute/resize_server.rb +27 -0
  93. data/lib/fog/brightbox/requests/compute/shutdown_server.rb +28 -0
  94. data/lib/fog/brightbox/requests/compute/snapshot_server.rb +28 -0
  95. data/lib/fog/brightbox/requests/compute/start_server.rb +28 -0
  96. data/lib/fog/brightbox/requests/compute/stop_server.rb +28 -0
  97. data/lib/fog/brightbox/requests/compute/unmap_cloud_ip.rb +28 -0
  98. data/lib/fog/brightbox/requests/compute/update_account.rb +28 -0
  99. data/lib/fog/brightbox/requests/compute/update_api_client.rb +29 -0
  100. data/lib/fog/brightbox/requests/compute/update_image.rb +29 -0
  101. data/lib/fog/brightbox/requests/compute/update_server.rb +29 -0
  102. data/lib/fog/brightbox/requests/compute/update_user.rb +29 -0
  103. data/lib/fog/core/attributes.rb +3 -3
  104. data/lib/fog/core/bin.rb +2 -0
  105. data/lib/fog/core/compute.rb +5 -2
  106. data/lib/fog/core/credentials.rb +2 -0
  107. data/lib/fog/core/service.rb +24 -12
  108. data/lib/fog/google/models/storage/file.rb +23 -14
  109. data/lib/fog/google/models/storage/files.rb +4 -14
  110. data/lib/fog/google/requests/storage/get_bucket.rb +0 -1
  111. data/lib/fog/google/requests/storage/put_object.rb +9 -2
  112. data/lib/fog/rackspace/models/storage/file.rb +3 -3
  113. data/lib/fog/rackspace/models/storage/files.rb +5 -13
  114. data/spec/aws/models/compute/server_spec.rb +0 -3
  115. data/spec/aws/requests/simpledb/get_attributes_spec.rb +11 -0
  116. data/spec/core/attributes_spec.rb +52 -0
  117. data/spec/vcloud/bin_spec.rb +1 -1
  118. data/spec/vcloud/vcloud_spec.rb +1 -1
  119. data/tests/aws/models/compute/flavors_tests.rb +5 -0
  120. data/tests/aws/models/compute/server_tests.rb +6 -0
  121. data/tests/aws/models/compute/servers_tests.rb +6 -0
  122. data/tests/aws/requests/storage/bucket_tests.rb +1 -1
  123. data/tests/aws/requests/storage/multipart_upload_tests.rb +135 -0
  124. data/tests/bluebox/models/compute/flavors_tests.rb +5 -0
  125. data/tests/bluebox/models/compute/server_tests.rb +5 -0
  126. data/tests/bluebox/models/compute/servers_tests.rb +6 -0
  127. data/tests/brightbox/helper.rb +0 -0
  128. data/tests/brightbox/models/compute/flavors_tests.rb +5 -0
  129. data/tests/brightbox/models/compute/server_tests.rb +6 -0
  130. data/tests/brightbox/models/compute/servers_tests.rb +6 -0
  131. data/tests/google/requests/storage/bucket_tests.rb +78 -0
  132. data/tests/google/requests/storage/object_tests.rb +81 -0
  133. data/tests/helper.rb +19 -4
  134. data/tests/helpers/collection_tests.rb +51 -0
  135. data/tests/helpers/compute/flavors_tests.rb +34 -0
  136. data/tests/helpers/compute/server_tests.rb +19 -0
  137. data/tests/helpers/compute/servers_tests.rb +11 -0
  138. data/tests/helpers/model_tests.rb +28 -0
  139. data/tests/helpers/storage/directories_tests.rb +4 -36
  140. data/tests/helpers/storage/directory_tests.rb +8 -22
  141. data/tests/helpers/storage/file_tests.rb +8 -25
  142. data/tests/helpers/storage/files_tests.rb +5 -39
  143. data/tests/local/models/storage/directories_tests.rb +1 -1
  144. data/tests/local/models/storage/directory_tests.rb +1 -1
  145. data/tests/local/models/storage/file_tests.rb +1 -1
  146. data/tests/local/models/storage/files_tests.rb +1 -1
  147. data/tests/rackspace/models/compute/flavors_tests.rb +5 -0
  148. data/tests/rackspace/models/compute/server_tests.rb +6 -0
  149. data/tests/rackspace/models/compute/servers_tests.rb +6 -0
  150. data/tests/rackspace/models/storage/directories_tests.rb +1 -1
  151. data/tests/rackspace/models/storage/directory_tests.rb +1 -1
  152. data/tests/rackspace/models/storage/file_tests.rb +1 -1
  153. data/tests/rackspace/models/storage/files_tests.rb +1 -1
  154. data/tests/slicehost/models/compute/flavors_tests.rb +5 -0
  155. data/tests/slicehost/models/compute/server_tests.rb +6 -0
  156. data/tests/slicehost/models/compute/servers_tests.rb +6 -0
  157. metadata +108 -31
  158. data/spec/aws/models/compute/flavors_spec.rb +0 -14
  159. data/spec/aws/models/compute/servers_spec.rb +0 -21
  160. data/spec/bluebox/models/compute/flavors_spec.rb +0 -17
  161. data/spec/bluebox/models/compute/server_spec.rb +0 -29
  162. data/spec/bluebox/models/compute/servers_spec.rb +0 -31
  163. data/spec/google/requests/storage/copy_object_spec.rb +0 -61
  164. data/spec/google/requests/storage/delete_bucket_spec.rb +0 -35
  165. data/spec/google/requests/storage/delete_object_spec.rb +0 -38
  166. data/spec/google/requests/storage/get_bucket_spec.rb +0 -110
  167. data/spec/google/requests/storage/get_object_spec.rb +0 -58
  168. data/spec/google/requests/storage/get_service_spec.rb +0 -32
  169. data/spec/google/requests/storage/head_object_spec.rb +0 -26
  170. data/spec/google/requests/storage/put_bucket_spec.rb +0 -21
  171. data/spec/google/requests/storage/put_object_spec.rb +0 -43
  172. data/spec/rackspace/models/compute/flavors_spec.rb +0 -18
  173. data/spec/rackspace/models/compute/server_spec.rb +0 -55
  174. data/spec/rackspace/models/compute/servers_spec.rb +0 -22
  175. data/spec/shared_examples/flavors_examples.rb +0 -16
  176. data/spec/shared_examples/server_examples.rb +0 -43
  177. data/spec/shared_examples/servers_examples.rb +0 -37
  178. data/spec/slicehost/models/compute/flavors_spec.rb +0 -18
  179. data/spec/slicehost/models/compute/server_spec.rb +0 -55
  180. data/spec/slicehost/models/compute/servers_spec.rb +0 -26
@@ -0,0 +1,51 @@
1
+ module Fog
2
+ module AWS
3
+ class Storage
4
+ class Real
5
+
6
+ # Upload a part for a multipart upload
7
+ #
8
+ # ==== Parameters
9
+ # * bucket_name<~String> - Name of bucket to add part to
10
+ # * object_name<~String> - Name of object to add part to
11
+ # * upload_id<~String> - Id of upload to add part to
12
+ # * part_number<~String> - Index of part in upload
13
+ # * data<~File||String> - Content for part
14
+ # * options<~Hash>:
15
+ # * 'Content-MD5'<~String> - Base64 encoded 128-bit MD5 digest of message
16
+ #
17
+ # ==== Returns
18
+ # * response<~Excon::Response>:
19
+ # * headers<~Hash>:
20
+ # * 'ETag'<~String> - etag of new object (will be needed to complete upload)
21
+ #
22
+ # ==== See Also
23
+ # http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadUploadPart.html
24
+ #
25
+ def upload_part(bucket_name, object_name, upload_id, part_number, data, options = {})
26
+ data = parse_data(data)
27
+ headers = options
28
+ headers['Content-Length'] = data[:headers]['Content-Length']
29
+ request({
30
+ :body => data[:body],
31
+ :expects => 200,
32
+ :headers => headers,
33
+ :host => "#{bucket_name}.#{@host}",
34
+ :method => 'PUT',
35
+ :path => CGI.escape(object_name),
36
+ :query => {'uploadId' => upload_id, 'partNumber' => part_number}
37
+ })
38
+ end
39
+
40
+ end # Real
41
+
42
+ class Mock # :nodoc:all
43
+
44
+ def upload_part(bucket_name, object_name, upload_id, part_number, data, options = {})
45
+ Fog::Mock.not_implemented
46
+ end
47
+
48
+ end # Mock
49
+ end # Storage
50
+ end # AWS
51
+ end # Fog
@@ -11,6 +11,8 @@ module Fog
11
11
  model :file
12
12
 
13
13
  request_path 'fog/aws/requests/storage'
14
+ request :abort_multipart_upload
15
+ request :complete_multipart_upload
14
16
  request :copy_object
15
17
  request :delete_bucket
16
18
  request :delete_object
@@ -27,6 +29,9 @@ module Fog
27
29
  request :get_request_payment
28
30
  request :get_service
29
31
  request :head_object
32
+ request :initiate_multipart_upload
33
+ request :list_multipart_uploads
34
+ request :list_parts
30
35
  request :post_object_hidden_fields
31
36
  request :put_bucket
32
37
  request :put_bucket_acl
@@ -35,6 +40,7 @@ module Fog
35
40
  request :put_object
36
41
  request :put_object_url
37
42
  request :put_request_payment
43
+ request :upload_part
38
44
 
39
45
  module Utils
40
46
 
@@ -219,7 +225,7 @@ DATA
219
225
  for key, value in amz_headers
220
226
  canonical_amz_headers << "#{key}:#{value}\n"
221
227
  end
222
- string_to_sign << "#{canonical_amz_headers}"
228
+ string_to_sign << canonical_amz_headers
223
229
 
224
230
  subdomain = params[:host].split(".#{@host}").first
225
231
  unless subdomain =~ /^(?:[a-z]|\d(?!\d{0,2}(?:\.\d{1,3}){3}$))(?:[a-z0-9]|\.(?![\.\-])|\-(?![\.])){1,61}[a-z0-9]$/
@@ -228,7 +234,7 @@ DATA
228
234
  if params[:path]
229
235
  params[:path] = "#{subdomain}/#{params[:path]}"
230
236
  else
231
- params[:path] = "#{subdomain}"
237
+ params[:path] = subdomain
232
238
  end
233
239
  subdomain = nil
234
240
  end
@@ -237,15 +243,15 @@ DATA
237
243
  unless subdomain.nil? || subdomain == @host
238
244
  canonical_resource << "#{CGI.escape(subdomain).downcase}/"
239
245
  end
240
- canonical_resource << "#{params[:path]}"
246
+ canonical_resource << params[:path].to_s
241
247
  canonical_resource << '?'
242
248
  for key in (params[:query] || {}).keys
243
- if ['acl', 'location', 'logging', 'requestPayment', 'torrent', 'versions', 'versioning'].include?(key)
244
- canonical_resource << "#{key}&"
249
+ if %w{acl location logging notification partNumber policy requestPayment torrent uploadId uploads versionId versioning versions}.include?(key)
250
+ canonical_resource << "#{key}#{"=#{params[:query][key]}" unless params[:query][key].nil?}&"
245
251
  end
246
252
  end
247
253
  canonical_resource.chop!
248
- string_to_sign << "#{canonical_resource}"
254
+ string_to_sign << canonical_resource
249
255
 
250
256
  signed_string = @hmac.sign(string_to_sign)
251
257
  signature = Base64.encode64(signed_string).chomp!
@@ -0,0 +1,7 @@
1
+ module Fog
2
+ module Brightbox
3
+ extend Fog::Provider
4
+ service_path 'fog/brightbox'
5
+ service 'compute'
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ class Brightbox < Fog::Bin
2
+ class << self
3
+
4
+ def [](service)
5
+ @@connections ||= Hash.new do |hash, key|
6
+ hash[key] = case key
7
+ when :compute
8
+ Fog::Brightbox::Compute.new
9
+ end
10
+ end
11
+ @@connections[service]
12
+ end
13
+
14
+ def services
15
+ [:compute]
16
+ end
17
+
18
+ def account
19
+ @@connections[:compute].account
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,134 @@
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
+
9
+ model_path 'fog/brightbox/models/compute'
10
+ model :account # Singular resource, no collection
11
+ collection :servers
12
+ model :server
13
+ collection :flavors
14
+ model :flavor
15
+ collection :images
16
+ model :image
17
+ collection :zones
18
+ model :zone
19
+ collection :cloud_ips
20
+ model :cloud_ip
21
+ collection :users
22
+ model :user
23
+
24
+ request_path 'fog/brightbox/requests/compute'
25
+ request :create_api_client
26
+ request :create_cloud_ip
27
+ request :create_image
28
+ request :create_server
29
+ request :destroy_api_client
30
+ request :destroy_cloud_ip
31
+ request :destroy_image
32
+ request :destroy_server
33
+ request :get_account
34
+ request :get_api_client
35
+ request :get_cloud_ip
36
+ request :get_image
37
+ request :get_interface
38
+ request :get_server
39
+ request :get_server_type
40
+ request :get_user
41
+ request :get_zone
42
+ request :list_api_clients
43
+ request :list_cloud_ips
44
+ request :list_images
45
+ request :list_server_types
46
+ request :list_servers
47
+ request :list_users
48
+ request :list_zones
49
+ request :map_cloud_ip
50
+ request :reset_ftp_password_account
51
+ request :resize_server
52
+ request :shutdown_server
53
+ request :snapshot_server
54
+ request :start_server
55
+ request :stop_server
56
+ request :unmap_cloud_ip
57
+ request :update_account
58
+ request :update_api_client
59
+ request :update_image
60
+ request :update_server
61
+ request :update_user
62
+
63
+ class Mock
64
+
65
+ def initialize(options)
66
+ @brightbox_client_id = options[:brightbox_client_id] || Fog.credentials[:brightbox_client_id]
67
+ @brightbox_secret = options[:brightbox_secret] || Fog.credentials[:brightbox_secret]
68
+ end
69
+
70
+ def request(options)
71
+ raise "Not implemented"
72
+ end
73
+ end
74
+
75
+ class Real
76
+
77
+ def initialize(options)
78
+ require "json"
79
+ # Currently authentication and api endpoints are the same but may change
80
+ @auth_url = options[:brightbox_auth_url] || Fog.credentials[:brightbox_auth_url] || API_URL
81
+ @api_url = options[:brightbox_api_url] || Fog.credentials[:brightbox_api_url] || API_URL
82
+ @brightbox_client_id = options[:brightbox_client_id] || Fog.credentials[:brightbox_client_id]
83
+ @brightbox_secret = options[:brightbox_secret] || Fog.credentials[:brightbox_secret]
84
+ @connection = Fog::Connection.new(@api_url)
85
+ end
86
+
87
+ def request(params)
88
+ begin
89
+ get_oauth_token if @oauth_token.nil?
90
+ response = authenticated_request(params)
91
+ rescue Excon::Errors::Unauthorized => e
92
+ get_oauth_token
93
+ response = authenticated_request(params)
94
+ end
95
+ unless response.body.empty?
96
+ response = JSON.parse(response.body)
97
+ end
98
+ end
99
+
100
+ def account
101
+ Fog::Brightbox::Compute::Account.new(get_account)
102
+ end
103
+
104
+ private
105
+ def get_oauth_token(options = {})
106
+ auth_url = options[:brightbox_auth_url] || @auth_url
107
+
108
+ connection = Fog::Connection.new(auth_url)
109
+ @authentication_body = {'client_id' => @brightbox_client_id, 'grant_type' => 'none'}.to_json
110
+
111
+ response = connection.request({
112
+ :path => "/token",
113
+ :expects => 200,
114
+ :headers => {
115
+ 'Authorization' => "Basic " + Base64.encode64("#{@brightbox_client_id}:#{@brightbox_secret}").chomp,
116
+ 'Content-Type' => 'application/json'
117
+ },
118
+ :method => 'POST',
119
+ :body => @authentication_body
120
+ })
121
+ @oauth_token = JSON.parse(response.body)["access_token"]
122
+ return @oauth_token
123
+ end
124
+
125
+ def authenticated_request(options)
126
+ headers = options[:headers] || {}
127
+ headers.merge!("Authorization" => "OAuth #{@oauth_token}")
128
+ options[:headers] = headers
129
+ @connection.request(options)
130
+ end
131
+ end
132
+ end
133
+ end
134
+ 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,43 @@
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 unmap
30
+ requires :identity
31
+ connection.unmap_cloud_ip(identity)
32
+ end
33
+
34
+ def destroy
35
+ requires :identity
36
+ connection.destroy_cloud_ip(identity)
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,34 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/brightbox/models/compute/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