fog 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. data/Gemfile +2 -2
  2. data/Gemfile.lock +6 -6
  3. data/README.rdoc +4 -1
  4. data/bin/fog +2 -1
  5. data/examples/bluebox_create.rb +33 -0
  6. data/fog.gemspec +58 -30
  7. data/lib/fog.rb +2 -1
  8. data/lib/fog/aws/elb.rb +0 -9
  9. data/lib/fog/aws/requests/elb/create_load_balancer.rb +3 -3
  10. data/lib/fog/aws/requests/elb/deregister_instances_from_load_balancer.rb +1 -1
  11. data/lib/fog/aws/requests/elb/describe_instance_health.rb +1 -1
  12. data/lib/fog/aws/requests/elb/describe_load_balancers.rb +1 -1
  13. data/lib/fog/aws/requests/elb/disable_availability_zones_for_load_balancer.rb +1 -1
  14. data/lib/fog/aws/requests/elb/enable_availability_zones_for_load_balancer.rb +1 -1
  15. data/lib/fog/aws/requests/elb/register_instances_with_load_balancer.rb +1 -1
  16. data/lib/fog/aws/requests/s3/get_bucket.rb +1 -6
  17. data/lib/fog/aws/requests/s3/get_bucket_acl.rb +1 -1
  18. data/lib/fog/aws/requests/s3/get_bucket_location.rb +1 -1
  19. data/lib/fog/aws/requests/s3/get_bucket_logging.rb +1 -1
  20. data/lib/fog/aws/requests/s3/get_bucket_object_versions.rb +1 -6
  21. data/lib/fog/aws/requests/s3/get_bucket_versioning.rb +1 -1
  22. data/lib/fog/aws/requests/s3/get_object.rb +1 -1
  23. data/lib/fog/aws/requests/s3/get_object_acl.rb +2 -2
  24. data/lib/fog/aws/requests/s3/get_object_torrent.rb +1 -1
  25. data/lib/fog/aws/requests/s3/get_request_payment.rb +1 -1
  26. data/lib/fog/aws/requests/s3/head_object.rb +1 -1
  27. data/lib/fog/aws/requests/s3/put_bucket_acl.rb +1 -1
  28. data/lib/fog/aws/requests/s3/put_bucket_logging.rb +1 -1
  29. data/lib/fog/aws/requests/s3/put_bucket_versioning.rb +1 -1
  30. data/lib/fog/aws/requests/s3/put_object_url.rb +54 -0
  31. data/lib/fog/aws/requests/s3/put_request_payment.rb +1 -1
  32. data/lib/fog/aws/s3.rb +7 -2
  33. data/lib/fog/bin.rb +1 -1
  34. data/lib/fog/bluebox.rb +100 -0
  35. data/lib/fog/bluebox/bin.rb +43 -0
  36. data/lib/fog/bluebox/models/flavor.rb +43 -0
  37. data/lib/fog/bluebox/models/flavors.rb +38 -0
  38. data/lib/fog/bluebox/models/image.rb +17 -0
  39. data/lib/fog/bluebox/models/images.rb +42 -0
  40. data/lib/fog/bluebox/models/server.rb +79 -0
  41. data/lib/fog/bluebox/models/servers.rb +39 -0
  42. data/lib/fog/bluebox/requests/create_block.rb +39 -0
  43. data/lib/fog/bluebox/requests/destroy_block.rb +32 -0
  44. data/lib/fog/bluebox/requests/get_block.rb +32 -0
  45. data/lib/fog/bluebox/requests/get_blocks.rb +34 -0
  46. data/lib/fog/bluebox/requests/get_product.rb +32 -0
  47. data/lib/fog/bluebox/requests/get_products.rb +31 -0
  48. data/lib/fog/bluebox/requests/get_template.rb +32 -0
  49. data/lib/fog/bluebox/requests/get_templates.rb +32 -0
  50. data/lib/fog/bluebox/requests/reboot_block.rb +33 -0
  51. data/lib/fog/credentials.rb +2 -1
  52. data/lib/fog/rackspace/files.rb +4 -12
  53. data/lib/fog/rackspace/models/servers/flavors.rb +1 -1
  54. data/lib/fog/rackspace/models/servers/images.rb +1 -1
  55. data/lib/fog/rackspace/models/servers/servers.rb +1 -1
  56. data/lib/fog/rackspace/requests/files/get_container.rb +1 -6
  57. data/lib/fog/rackspace/requests/files/get_containers.rb +1 -7
  58. data/lib/fog/rackspace/requests/files/head_container.rb +1 -1
  59. data/lib/fog/rackspace/requests/files/head_containers.rb +1 -1
  60. data/lib/fog/rackspace/requests/servers/create_server.rb +4 -5
  61. data/lib/fog/rackspace/requests/servers/delete_image.rb +2 -1
  62. data/lib/fog/rackspace/requests/servers/delete_server.rb +2 -3
  63. data/lib/fog/rackspace/requests/servers/get_server_details.rb +2 -3
  64. data/lib/fog/rackspace/requests/servers/list_addresses.rb +2 -3
  65. data/lib/fog/rackspace/requests/servers/list_private_addresses.rb +2 -3
  66. data/lib/fog/rackspace/requests/servers/list_public_addresses.rb +2 -3
  67. data/lib/fog/rackspace/requests/servers/reboot_server.rb +1 -1
  68. data/lib/fog/rackspace/requests/servers/update_server.rb +2 -3
  69. data/lib/fog/rackspace/servers.rb +21 -11
  70. data/lib/fog/slicehost.rb +18 -13
  71. data/lib/fog/vcloud.rb +148 -107
  72. data/lib/fog/vcloud/model.rb +2 -1
  73. data/lib/fog/vcloud/parser.rb +5 -0
  74. data/lib/fog/vcloud/requests/get_vdc.rb +3 -3
  75. data/lib/fog/vcloud/requests/get_versions.rb +1 -1
  76. data/lib/fog/vcloud/requests/login.rb +1 -1
  77. data/lib/fog/vcloud/terremark/ecloud.rb +34 -0
  78. data/lib/fog/vcloud/terremark/ecloud/models/internet_service.rb +29 -0
  79. data/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb +51 -0
  80. data/lib/fog/vcloud/terremark/ecloud/models/public_ip.rb +26 -0
  81. data/lib/fog/vcloud/terremark/ecloud/models/public_ips.rb +32 -0
  82. data/lib/fog/vcloud/terremark/ecloud/models/vdc.rb +11 -0
  83. data/lib/fog/vcloud/terremark/ecloud/parsers/get_internet_services.rb +59 -0
  84. data/lib/fog/vcloud/terremark/ecloud/parsers/get_public_ip.rb +30 -0
  85. data/lib/fog/vcloud/terremark/ecloud/parsers/get_public_ips.rb +40 -0
  86. data/lib/fog/vcloud/terremark/ecloud/parsers/internet_service.rb +58 -0
  87. data/lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb +82 -0
  88. data/lib/fog/vcloud/terremark/ecloud/requests/delete_internet_service.rb +39 -0
  89. data/lib/fog/vcloud/terremark/ecloud/requests/get_internet_services.rb +73 -0
  90. data/lib/fog/vcloud/terremark/ecloud/requests/get_public_ip.rb +49 -0
  91. data/lib/fog/vcloud/terremark/ecloud/requests/get_public_ips.rb +47 -0
  92. data/spec/bluebox/models/flavors_spec.rb +14 -0
  93. data/spec/bluebox/models/server_spec.rb +25 -0
  94. data/spec/bluebox/models/servers_spec.rb +27 -0
  95. data/spec/spec_helper.rb +16 -0
  96. data/spec/vcloud/spec_helper.rb +16 -1
  97. data/spec/vcloud/terremark/ecloud/models/internet_service_spec.rb +58 -0
  98. data/spec/vcloud/terremark/ecloud/models/internet_services_spec.rb +29 -0
  99. data/spec/vcloud/terremark/ecloud/models/public_ip_spec.rb +43 -0
  100. data/spec/vcloud/terremark/ecloud/models/public_ips_spec.rb +26 -0
  101. data/spec/vcloud/terremark/ecloud/models/vdc_spec.rb +4 -0
  102. data/spec/vcloud/terremark/ecloud/requests/add_internet_service_spec.rb +57 -0
  103. data/spec/vcloud/terremark/ecloud/requests/delete_internet_service_spec.rb +34 -0
  104. data/spec/vcloud/terremark/ecloud/requests/get_internet_services_spec.rb +57 -0
  105. data/spec/vcloud/terremark/ecloud/requests/get_public_ip_spec.rb +40 -0
  106. data/spec/vcloud/terremark/ecloud/requests/get_public_ips_spec.rb +44 -0
  107. data/tests/bluebox/helper.rb +26 -0
  108. data/tests/bluebox/requests/block_tests.rb +68 -0
  109. data/tests/bluebox/requests/product_tests.rb +25 -0
  110. data/tests/bluebox/requests/template_tests.rb +32 -0
  111. data/tests/helper.rb +6 -6
  112. data/tests/helper_tests.rb +4 -0
  113. data/tests/rackspace/helper.rb +0 -32
  114. data/tests/rackspace/requests/servers/address_tests.rb +40 -0
  115. data/tests/rackspace/requests/servers/flavor_tests.rb +34 -0
  116. data/tests/rackspace/requests/servers/image_tests.rb +59 -0
  117. data/tests/rackspace/requests/servers/server_tests.rb +83 -0
  118. data/tests/slicehost/helper.rb +0 -35
  119. data/tests/slicehost/requests/backup_tests.rb +17 -0
  120. data/tests/slicehost/requests/flavor_tests.rb +30 -0
  121. data/tests/slicehost/requests/image_tests.rb +28 -0
  122. data/tests/slicehost/requests/slice_tests.rb +63 -0
  123. metadata +59 -31
  124. data/tests/rackspace/requests/servers/create_image_tests.rb +0 -20
  125. data/tests/rackspace/requests/servers/create_server_tests.rb +0 -18
  126. data/tests/rackspace/requests/servers/delete_image_tests.rb +0 -23
  127. data/tests/rackspace/requests/servers/delete_server_tests.rb +0 -19
  128. data/tests/rackspace/requests/servers/get_flavor_details_tests.rb +0 -16
  129. data/tests/rackspace/requests/servers/get_image_details_tests.rb +0 -16
  130. data/tests/rackspace/requests/servers/get_server_details_tests.rb +0 -21
  131. data/tests/rackspace/requests/servers/list_addresses_tests.rb +0 -22
  132. data/tests/rackspace/requests/servers/list_flavors_detail_tests.rb +0 -9
  133. data/tests/rackspace/requests/servers/list_flavors_tests.rb +0 -9
  134. data/tests/rackspace/requests/servers/list_images_detail_tests.rb +0 -9
  135. data/tests/rackspace/requests/servers/list_images_tests.rb +0 -9
  136. data/tests/rackspace/requests/servers/list_private_addresses_tests.rb +0 -22
  137. data/tests/rackspace/requests/servers/list_public_addresses_tests.rb +0 -22
  138. data/tests/rackspace/requests/servers/list_servers_detail_tests.rb +0 -14
  139. data/tests/rackspace/requests/servers/list_servers_tests.rb +0 -14
  140. data/tests/rackspace/requests/servers/reboot_server_tests.rb +0 -30
  141. data/tests/rackspace/requests/servers/update_server_tests.rb +0 -22
  142. data/tests/slicehost/requests/create_slice_tests.rb +0 -14
  143. data/tests/slicehost/requests/delete_slice_tests.rb +0 -20
  144. data/tests/slicehost/requests/get_backups_tests.rb +0 -9
  145. data/tests/slicehost/requests/get_flavor_tests.rb +0 -17
  146. data/tests/slicehost/requests/get_flavors_tests.rb +0 -9
  147. data/tests/slicehost/requests/get_image_tests.rb +0 -17
  148. data/tests/slicehost/requests/get_images_tests.rb +0 -9
  149. data/tests/slicehost/requests/get_slice_tests.rb +0 -22
  150. data/tests/slicehost/requests/get_slices_tests.rb +0 -9
  151. data/tests/slicehost/requests/reboot_slice_tests.rb +0 -23
@@ -53,11 +53,6 @@ module Fog
53
53
  unless bucket_name
54
54
  raise ArgumentError.new('bucket_name is required')
55
55
  end
56
- query = ''
57
- for key, value in options
58
- query << "#{key}=#{CGI.escape(value.to_s).gsub(/\+/, '%20')}&"
59
- end
60
- query.chop!
61
56
  request({
62
57
  :expects => 200,
63
58
  :headers => {},
@@ -65,7 +60,7 @@ module Fog
65
60
  :idempotent => true,
66
61
  :method => 'GET',
67
62
  :parser => Fog::Parsers::AWS::S3::GetBucketObjectVersions.new,
68
- :query => query
63
+ :query => {'versions' => nil}.merge!(options)
69
64
  })
70
65
  end
71
66
 
@@ -25,7 +25,7 @@ module Fog
25
25
  :idempotent => true,
26
26
  :method => 'GET',
27
27
  :parser => Fog::Parsers::AWS::S3::GetBucketVersioning.new,
28
- :query => 'versioning'
28
+ :query => {'versioning' => nil}
29
29
  })
30
30
  end
31
31
 
@@ -33,7 +33,7 @@ module Fog
33
33
  raise ArgumentError.new('object_name is required')
34
34
  end
35
35
  if version_id = options.delete('versionId')
36
- query = CGI.escape(version_id)
36
+ query = {'versionId' => version_id}
37
37
  end
38
38
  headers = {}
39
39
  headers['If-Modified-Since'] = options['If-Modified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since']
@@ -34,9 +34,9 @@ module Fog
34
34
  unless object_name
35
35
  raise ArgumentError.new('object_name is required')
36
36
  end
37
- query = 'acl'
37
+ query = {'acl' => nil}
38
38
  if version_id = options.delete('versionId')
39
- query << "&#{CGI.escape(version_id)}"
39
+ query['versionId'] = version_id
40
40
  end
41
41
  request({
42
42
  :expects => 200,
@@ -37,7 +37,7 @@ module Fog
37
37
  :idempotent => true,
38
38
  :method => 'GET',
39
39
  :path => CGI.escape(object_name),
40
- :query => 'torrent'
40
+ :query => {'torrent' => nil}
41
41
  })
42
42
  end
43
43
 
@@ -20,7 +20,7 @@ module Fog
20
20
  :idempotent => true,
21
21
  :method => 'GET',
22
22
  :parser => Fog::Parsers::AWS::S3::GetRequestPayment.new,
23
- :query => 'requestPayment'
23
+ :query => {'requestPayment' => nil}
24
24
  })
25
25
  end
26
26
 
@@ -32,7 +32,7 @@ module Fog
32
32
  raise ArgumentError.new('object_name is required')
33
33
  end
34
34
  if version_id = options.delete('versionId')
35
- query = CGI.escape(version_id)
35
+ query = {'versionId' => version_id}
36
36
  end
37
37
  headers = {}
38
38
  headers['If-Modified-Since'] = options['If-Modified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since']
@@ -62,7 +62,7 @@ DATA
62
62
  :headers => {},
63
63
  :host => "#{bucket_name}.#{@host}",
64
64
  :method => 'PUT',
65
- :query => 'acl'
65
+ :query => {'acl' => nil}
66
66
  })
67
67
  end
68
68
 
@@ -69,7 +69,7 @@ DATA
69
69
  :headers => {},
70
70
  :host => "#{bucket_name}.#{@host}",
71
71
  :method => 'PUT',
72
- :query => 'logging'
72
+ :query => {'logging' => nil}
73
73
  })
74
74
  end
75
75
 
@@ -22,7 +22,7 @@ DATA
22
22
  :headers => {},
23
23
  :host => "#{bucket_name}.#{@host}",
24
24
  :method => 'PUT',
25
- :query => 'versioning'
25
+ :query => {'versioning' => nil}
26
26
  })
27
27
  end
28
28
 
@@ -0,0 +1,54 @@
1
+ module Fog
2
+ module AWS
3
+ module S3
4
+ class Real
5
+
6
+ # Get an expiring object url from S3 for putting an object
7
+ #
8
+ # ==== Parameters
9
+ # * bucket_name<~String> - Name of bucket containing object
10
+ # * object_name<~String> - Name of object to get expiring url for
11
+ # * expires<~Time> - An expiry time for this url
12
+ #
13
+ # ==== Returns
14
+ # * response<~Excon::Response>:
15
+ # * body<~String> - url for object
16
+ #
17
+ def put_object_url(bucket_name, object_name, expires)
18
+ unless bucket_name
19
+ raise ArgumentError.new('bucket_name is required')
20
+ end
21
+ unless object_name
22
+ raise ArgumentError.new('object_name is required')
23
+ end
24
+ url({
25
+ :headers => {},
26
+ :host => "#{bucket_name}.#{@host}",
27
+ :method => 'PUT',
28
+ :path => CGI.escape(object_name)
29
+ }, expires)
30
+ end
31
+
32
+ end
33
+
34
+ class Mock
35
+
36
+ def put_object_url(bucket_name, object_name, expires)
37
+ unless bucket_name
38
+ raise ArgumentError.new('bucket_name is required')
39
+ end
40
+ unless object_name
41
+ raise ArgumentError.new('object_name is required')
42
+ end
43
+ url({
44
+ :headers => {},
45
+ :host => "#{bucket_name}.#{@host}",
46
+ :method => 'PUT',
47
+ :path => CGI.escape(object_name)
48
+ }, expires)
49
+ end
50
+
51
+ end
52
+ end
53
+ end
54
+ end
@@ -21,7 +21,7 @@ DATA
21
21
  :headers => {},
22
22
  :host => "#{bucket_name}.#{@host}",
23
23
  :method => 'PUT',
24
- :query => "requestPayment"
24
+ :query => {'requestPayment' => nil}
25
25
  })
26
26
  end
27
27
 
@@ -39,6 +39,7 @@ module Fog
39
39
  require 'fog/aws/requests/s3/put_bucket_logging'
40
40
  require 'fog/aws/requests/s3/put_bucket_versioning'
41
41
  require 'fog/aws/requests/s3/put_object'
42
+ require 'fog/aws/requests/s3/put_object_url'
42
43
  require 'fog/aws/requests/s3/put_request_payment'
43
44
  @required = true
44
45
  end
@@ -207,9 +208,13 @@ DATA
207
208
  canonical_resource << "#{CGI.escape(subdomain).downcase}/"
208
209
  end
209
210
  canonical_resource << "#{params[:path]}"
210
- if ['acl', 'location', 'logging', 'requestPayment', 'torrent', 'versioning'].include?(params[:query])
211
- canonical_resource << "?#{params[:query]}"
211
+ canonical_resource << '?'
212
+ for key in params[:query].keys
213
+ if ['acl', 'location', 'logging', 'requestPayment', 'torrent', 'versions', 'versioning'].include?(key)
214
+ canonical_resource << "#{key}&"
215
+ end
212
216
  end
217
+ canonical_resource.chop!
213
218
  string_to_sign << "#{canonical_resource}"
214
219
 
215
220
  hmac = @hmac.update(string_to_sign)
@@ -5,7 +5,7 @@ module Fog
5
5
 
6
6
  def services
7
7
  services = []
8
- [::AWS, ::Local, ::Rackspace, ::Slicehost, ::Terremark, ::Vcloud].each do |service|
8
+ [::AWS, ::Local, ::Rackspace, ::Slicehost, ::Terremark, ::Vcloud, ::Bluebox].each do |service|
9
9
  if service.initialized?
10
10
  services << service
11
11
  end
@@ -0,0 +1,100 @@
1
+ module Fog
2
+ module Bluebox
3
+
4
+ class Error < Fog::Errors::Error; end
5
+ class NotFound < Fog::Errors::NotFound; end
6
+
7
+ def self.new(options={})
8
+
9
+ unless @required
10
+ require 'fog/bluebox/models/flavor'
11
+ require 'fog/bluebox/models/flavors'
12
+ require 'fog/bluebox/models/images'
13
+ require 'fog/bluebox/models/server'
14
+ require 'fog/bluebox/models/servers'
15
+ require 'fog/bluebox/requests/create_block'
16
+ require 'fog/bluebox/requests/destroy_block'
17
+ require 'fog/bluebox/requests/get_block'
18
+ require 'fog/bluebox/requests/get_blocks'
19
+ require 'fog/bluebox/requests/get_product'
20
+ require 'fog/bluebox/requests/get_products'
21
+ require 'fog/bluebox/requests/get_template'
22
+ require 'fog/bluebox/requests/get_templates'
23
+ require 'fog/bluebox/requests/reboot_block'
24
+ @required = true
25
+ end
26
+
27
+ unless options[:bluebox_api_key]
28
+ raise ArgumentError.new('bluebox_api_key is required to access Blue Box')
29
+ end
30
+ unless options[:bluebox_customer_id]
31
+ raise ArgumentError.new('bluebox_customer_id is required to access Blue Box')
32
+ end
33
+ if Fog.mocking?
34
+ Fog::Bluebox::Mock.new(options)
35
+ else
36
+ Fog::Bluebox::Real.new(options)
37
+ end
38
+ end
39
+
40
+ def self.reset_data(keys=Mock.data.keys)
41
+ Mock.reset_data(keys)
42
+ end
43
+
44
+ class Mock
45
+
46
+ def self.data
47
+ @data ||= Hash.new do |hash, key|
48
+ hash[key] = {}
49
+ end
50
+ end
51
+
52
+ def self.reset_data(keys=data.keys)
53
+ for key in [*keys]
54
+ data.delete(key)
55
+ end
56
+ end
57
+
58
+ def initialize(options={})
59
+ @bluebox_api_key = options[:bluebox_api_key]
60
+ @data = self.class.data[@bluebox_api_key]
61
+ end
62
+
63
+ end
64
+
65
+ class Real
66
+
67
+ def initialize(options={})
68
+ @bluebox_api_key = options[:bluebox_api_key]
69
+ @bluebox_customer_id = options[:bluebox_customer_id]
70
+ @host = options[:bluebox_host] || "boxpanel.blueboxgrp.com"
71
+ @port = options[:bluebox_port] || 443
72
+ @scheme = options[:bluebox_scheme] || 'https'
73
+ end
74
+
75
+ def request(params)
76
+ @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}")
77
+ params[:headers] ||= {}
78
+ params[:headers].merge!({
79
+ 'Authorization' => "Basic #{Base64.encode64([@bluebox_customer_id, @bluebox_api_key].join(':')).delete("\r\n")}"
80
+ })
81
+
82
+ begin
83
+ response = @connection.request(params.merge!({:host => @host}))
84
+ rescue Excon::Errors::Error => error
85
+ case error
86
+ when Excon::Errors::NotFound
87
+ raise Fog::Bluebox::NotFound
88
+ else
89
+ raise error
90
+ end
91
+ end
92
+ unless response.body.empty?
93
+ response.body = JSON.parse(response.body)
94
+ end
95
+ response
96
+ end
97
+
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,43 @@
1
+ module Bluebox
2
+ class << self
3
+
4
+ if Fog.credentials[:bluebox_api_key]
5
+
6
+ def initialized?
7
+ true
8
+ end
9
+
10
+ def [](service)
11
+ @@connections ||= Hash.new do |hash, key|
12
+ credentials = Fog.credentials.reject do |k,v|
13
+ ![:bluebox_api_key, :bluebox_customer_id].include?(k)
14
+ end
15
+ hash[key] = case key
16
+ when :blocks
17
+ Fog::Bluebox.new(credentials)
18
+ end
19
+ end
20
+ @@connections[service]
21
+ end
22
+
23
+ def flavors
24
+ self[:blocks].flavors
25
+ end
26
+
27
+ def images
28
+ self[:blocks].images
29
+ end
30
+
31
+ def servers
32
+ self[:blocks].servers
33
+ end
34
+
35
+ else
36
+
37
+ def initialized?
38
+ false
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,43 @@
1
+ require 'fog/model'
2
+
3
+ module Fog
4
+ module Bluebox
5
+
6
+ class Flavor < Fog::Model
7
+
8
+ identity :id
9
+
10
+ attribute :name
11
+ attribute :cost
12
+ attribute :description
13
+
14
+ def bits
15
+ # 64
16
+ raise StandardError.new("Figure me out!?!")
17
+ end
18
+
19
+ def cores
20
+ # # 2 quad-cores >= 2Ghz = 8 cores
21
+ # 8 * case ram
22
+ # when 256
23
+ # 1/64.0
24
+ # when 512
25
+ # 1/32.0
26
+ # when 1024
27
+ # 1/16.0
28
+ # when 2048
29
+ # 1/8.0
30
+ # when 4096
31
+ # 1/4.0
32
+ # when 8192
33
+ # 1/2.0
34
+ # when 15872
35
+ # 1
36
+ # end
37
+ raise StandardError.new("Figure me out!?!")
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,38 @@
1
+ require 'fog/collection'
2
+ require 'fog/bluebox/models/flavor'
3
+
4
+ module Fog
5
+ module Bluebox
6
+
7
+ class Mock
8
+ def flavors
9
+ Fog::Bluebox::Flavors.new(:connection => self)
10
+ end
11
+ end
12
+
13
+ class Real
14
+ def flavors
15
+ Fog::Bluebox::Flavors.new(:connection => self)
16
+ end
17
+ end
18
+
19
+ class Flavors < Fog::Collection
20
+
21
+ model Fog::Bluebox::Flavor
22
+
23
+ def all
24
+ data = connection.get_products.body
25
+ load(data)
26
+ end
27
+
28
+ def get(product_id)
29
+ response = connection.get_product(product_id)
30
+ new(response.body)
31
+ rescue Fog::Bluebox::NotFound
32
+ nil
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,17 @@
1
+ require 'fog/model'
2
+
3
+ module Fog
4
+ module Bluebox
5
+
6
+ class Image < Fog::Model
7
+
8
+ identity :id
9
+
10
+ attribute :description
11
+ attribute :public
12
+ attribute :created_at, 'created'
13
+
14
+ end
15
+
16
+ end
17
+ end