deltacloud-core 0.0.8 → 0.0.9

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.
data/Rakefile CHANGED
@@ -43,15 +43,9 @@ begin
43
43
  rescue LoadError
44
44
  end
45
45
 
46
- @specs = ['ruby', 'java'].inject({}) do |hash, spec_platform|
47
- $platform = spec_platform
48
- hash.update(spec_platform => Gem::Specification.load('deltacloud-core.gemspec'))
49
- end
50
-
51
- @specs.values.each do |spec|
52
- Rake::GemPackageTask.new(spec) do |pkg|
53
- pkg.need_tar = true
54
- end
46
+ spec = Gem::Specification.load('deltacloud-core.gemspec')
47
+ Rake::GemPackageTask.new(spec) do |pkg|
48
+ pkg.need_tar = true
55
49
  end
56
50
 
57
51
  desc "Install API"
data/bin/deltacloudd CHANGED
@@ -3,6 +3,18 @@
3
3
  require 'rubygems'
4
4
  require 'optparse'
5
5
 
6
+ # See if we can require +name+ and return +true+ if the library is there,
7
+ # +false+ otherwise. Note that, as a side effect, the library will be
8
+ # loaded
9
+ def library_present?(name)
10
+ begin
11
+ require name
12
+ true
13
+ rescue LoadError
14
+ false
15
+ end
16
+ end
17
+
6
18
  options = {
7
19
  :env => 'development'
8
20
  }
@@ -47,9 +59,11 @@ puts "Starting Deltacloud API :: #{ENV["API_DRIVER"]} :: http://#{ENV["API_HOST"
47
59
  puts
48
60
 
49
61
  dirname="#{File.dirname(__FILE__)}/.."
50
- platform = RUBY_PLATFORM[/java/] || 'ruby'
51
62
 
52
- if platform == 'java'
63
+ have_thin = library_present?('thin')
64
+ have_rerun = library_present?('rerun')
65
+
66
+ unless have_thin
53
67
  require 'rack'
54
68
 
55
69
  # We can't chdir with webrick so add our root directory
@@ -78,8 +92,6 @@ if platform == 'java'
78
92
  :Port => port,
79
93
  :AccessLog => [])
80
94
  else
81
- require 'thin'
82
-
83
95
  argv_opts = ARGV.clone
84
96
  argv_opts << ['start'] unless Thin::Runner.commands.include?(options[0])
85
97
  argv_opts << ['--address', ENV["API_HOST"] ]
@@ -91,17 +103,7 @@ else
91
103
 
92
104
  argv_opts.flatten!
93
105
 
94
- if options[:env] == "development"
95
- use_rerun = false
96
- begin
97
- require "rerun"
98
- use_rerun = true
99
- rescue
100
- # Do nothing
101
- end
102
- end
103
-
104
- if use_rerun
106
+ if have_rerun && options[:env] == "development"
105
107
  argv_opts.unshift "thin"
106
108
  command = argv_opts.join(" ")
107
109
  topdir = File::expand_path(File::join(File::dirname(__FILE__), ".."))
@@ -130,8 +130,11 @@ class EC2Driver < Deltacloud::BaseDriver
130
130
  config.merge!({ :owner_id => opts[:owner_id] }) if opts and opts[:owner_id]
131
131
  end
132
132
  safely do
133
- ec2.describe_images(config).imagesSet.item.each do |image|
134
- img_arr << convert_image(image)
133
+ image_set = ec2.describe_images(config).imagesSet
134
+ unless image_set.nil?
135
+ image_set.item.each do |image|
136
+ img_arr << convert_image(image)
137
+ end
135
138
  end
136
139
  end
137
140
  img_arr = filter_on( img_arr, :architecture, opts )
@@ -434,7 +437,7 @@ class EC2Driver < Deltacloud::BaseDriver
434
437
  def convert_realm(ec2_realm)
435
438
  Realm.new( {
436
439
  :id=>ec2_realm['zoneName'],
437
- :name=>ec2_realm['regionName'],
440
+ :name=>ec2_realm['zoneName'],
438
441
  :limit=>ec2_realm['zoneState'].eql?('available') ? :unlimited : 0,
439
442
  :state=>ec2_realm['zoneState'].upcase,
440
443
  } )
@@ -15,37 +15,46 @@
15
15
  # License for the specific language governing permissions and limitations
16
16
  # under the License.
17
17
 
18
- #--
19
- # based on the example from http://macournoyer.com/blog/2009/06/04/pusher-and-async-with-thin/
20
- #--
21
- require 'eventmachine'
22
- class BlobStream
23
- AsyncResponse = [-1, {}, []].freeze
24
- def self.call(env, credentials, params)
25
- body = DeferrableBody.new
26
- #Get the headers out asap. Don't specify a content-type let
27
- #the client guess and if they can't they SHOULD default to
28
- #'application/octet-stream' anyway as per:
29
- #http://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html#sec7.2.1
30
- EM.next_tick { env['async.callback'].call [200, {'Content-Type' => "#{params['content_type']}", 'Content-Length' => "#{params['content_length']}"}, body] }
31
- #call the driver from here. the driver method yields for every chunk of blob it receives. We then
32
- #use body.call to write that chunk as received.
33
- driver.blob_data(credentials, params[:bucket], params[:blob], params) {|chunk| body.call ["#{chunk}"]} #close blob_data block
34
- body.succeed
35
- AsyncResponse # Tells Thin to not close the connection and continue it's work on other request
18
+ begin
19
+ require 'eventmachine'
20
+ #--
21
+ # based on the example from http://macournoyer.com/blog/2009/06/04/pusher-and-async-with-thin/
22
+ #--
23
+ class BlobStream
24
+ AsyncResponse = [-1, {}, []].freeze
25
+ def self.call(env, credentials, params)
26
+ body = DeferrableBody.new
27
+ #Get the headers out asap. Don't specify a content-type let
28
+ #the client guess and if they can't they SHOULD default to
29
+ #'application/octet-stream' anyway as per:
30
+ #http://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html#sec7.2.1
31
+ EM.next_tick { env['async.callback'].call [200, {'Content-Type' => "#{params['content_type']}", 'Content-Length' => "#{params['content_length']}"}, body] }
32
+ #call the driver from here. the driver method yields for every chunk of blob it receives. We then
33
+ #use body.call to write that chunk as received.
34
+ driver.blob_data(credentials, params[:bucket], params[:blob], params) {|chunk| body.call ["#{chunk}"]} #close blob_data block
35
+ body.succeed
36
+ AsyncResponse # Tells Thin to not close the connection and continue it's work on other request
37
+ end
36
38
  end
37
- end
38
39
 
39
- class DeferrableBody
40
- include EventMachine::Deferrable
40
+ class DeferrableBody
41
+ include EventMachine::Deferrable
41
42
 
42
- def call(body)
43
- body.each do |chunk|
44
- @body_callback.call(chunk)
43
+ def call(body)
44
+ body.each do |chunk|
45
+ @body_callback.call(chunk)
46
+ end
45
47
  end
46
- end
47
48
 
48
- def each(&blk)
49
- @body_callback = blk
49
+ def each(&blk)
50
+ @body_callback = blk
51
+ end
52
+ end
53
+ rescue LoadError => e
54
+ # EventMachine isn't available, disable blob streaming
55
+ class BlobStream
56
+ def self.call(env, credentials, params)
57
+ raise NotImplementedError.new("Blob streaming is only supported under Thin")
58
+ end
50
59
  end
51
60
  end
@@ -102,6 +102,8 @@ module Sinatra
102
102
 
103
103
  if rack_accept.media_type.to_s.strip.eql?('Accept:')
104
104
  format :xml
105
+ elsif is_chrome?
106
+ format :html
105
107
  else
106
108
  format lookup_format_from_mime(rack_accept.best_media_type(accept_to_array))
107
109
  end
@@ -109,6 +111,14 @@ module Sinatra
109
111
  end
110
112
 
111
113
  app.class_eval do
114
+
115
+ # Simple helper to detect Chrome based browsers
116
+ # which have screwed up they Accept headers.
117
+ # Set HTML as default output format here
118
+ def is_chrome?
119
+ true if env['HTTP_USER_AGENT'] =~ /Chrome/
120
+ end
121
+
112
122
  # This code was copied from respond_to plugin
113
123
  # http://github.com/cehoffman/sinatra-respond_to
114
124
  # MIT License
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deltacloud-core
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 13
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 8
10
- version: 0.0.8
9
+ - 9
10
+ version: 0.0.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - Red Hat, Inc.
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-19 00:00:00 +02:00
18
+ date: 2010-10-22 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -34,26 +34,10 @@ dependencies:
34
34
  version: 0.8.7
35
35
  type: :runtime
36
36
  version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: eventmachine
39
- prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 59
46
- segments:
47
- - 0
48
- - 12
49
- - 10
50
- version: 0.12.10
51
- type: :runtime
52
- version_requirements: *id002
53
37
  - !ruby/object:Gem::Dependency
54
38
  name: haml
55
39
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ requirement: &id002 !ruby/object:Gem::Requirement
57
41
  none: false
58
42
  requirements:
59
43
  - - ">="
@@ -65,11 +49,11 @@ dependencies:
65
49
  - 17
66
50
  version: 2.2.17
67
51
  type: :runtime
68
- version_requirements: *id003
52
+ version_requirements: *id002
69
53
  - !ruby/object:Gem::Dependency
70
54
  name: sinatra
71
55
  prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ requirement: &id003 !ruby/object:Gem::Requirement
73
57
  none: false
74
58
  requirements:
75
59
  - - ">="
@@ -81,11 +65,11 @@ dependencies:
81
65
  - 4
82
66
  version: 0.9.4
83
67
  type: :runtime
84
- version_requirements: *id004
68
+ version_requirements: *id003
85
69
  - !ruby/object:Gem::Dependency
86
70
  name: rack
87
71
  prerelease: false
88
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ requirement: &id004 !ruby/object:Gem::Requirement
89
73
  none: false
90
74
  requirements:
91
75
  - - ">="
@@ -97,11 +81,11 @@ dependencies:
97
81
  - 0
98
82
  version: 1.0.0
99
83
  type: :runtime
100
- version_requirements: *id005
84
+ version_requirements: *id004
101
85
  - !ruby/object:Gem::Dependency
102
86
  name: rack-accept
103
87
  prerelease: false
104
- requirement: &id006 !ruby/object:Gem::Requirement
88
+ requirement: &id005 !ruby/object:Gem::Requirement
105
89
  none: false
106
90
  requirements:
107
91
  - - ~>
@@ -113,43 +97,11 @@ dependencies:
113
97
  - 3
114
98
  version: 0.4.3
115
99
  type: :runtime
116
- version_requirements: *id006
117
- - !ruby/object:Gem::Dependency
118
- name: thin
119
- prerelease: false
120
- requirement: &id007 !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- hash: 21
126
- segments:
127
- - 1
128
- - 2
129
- - 5
130
- version: 1.2.5
131
- type: :runtime
132
- version_requirements: *id007
133
- - !ruby/object:Gem::Dependency
134
- name: rerun
135
- prerelease: false
136
- requirement: &id008 !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ">="
140
- - !ruby/object:Gem::Version
141
- hash: 15
142
- segments:
143
- - 0
144
- - 5
145
- - 2
146
- version: 0.5.2
147
- type: :runtime
148
- version_requirements: *id008
100
+ version_requirements: *id005
149
101
  - !ruby/object:Gem::Dependency
150
102
  name: json
151
103
  prerelease: false
152
- requirement: &id009 !ruby/object:Gem::Requirement
104
+ requirement: &id006 !ruby/object:Gem::Requirement
153
105
  none: false
154
106
  requirements:
155
107
  - - ">="
@@ -161,11 +113,11 @@ dependencies:
161
113
  - 9
162
114
  version: 1.1.9
163
115
  type: :runtime
164
- version_requirements: *id009
116
+ version_requirements: *id006
165
117
  - !ruby/object:Gem::Dependency
166
118
  name: compass
167
119
  prerelease: false
168
- requirement: &id010 !ruby/object:Gem::Requirement
120
+ requirement: &id007 !ruby/object:Gem::Requirement
169
121
  none: false
170
122
  requirements:
171
123
  - - ">="
@@ -177,11 +129,11 @@ dependencies:
177
129
  - 17
178
130
  version: 0.8.17
179
131
  type: :development
180
- version_requirements: *id010
132
+ version_requirements: *id007
181
133
  - !ruby/object:Gem::Dependency
182
134
  name: nokogiri
183
135
  prerelease: false
184
- requirement: &id011 !ruby/object:Gem::Requirement
136
+ requirement: &id008 !ruby/object:Gem::Requirement
185
137
  none: false
186
138
  requirements:
187
139
  - - ">="
@@ -193,11 +145,11 @@ dependencies:
193
145
  - 1
194
146
  version: 1.4.1
195
147
  type: :development
196
- version_requirements: *id011
148
+ version_requirements: *id008
197
149
  - !ruby/object:Gem::Dependency
198
150
  name: rack-test
199
151
  prerelease: false
200
- requirement: &id012 !ruby/object:Gem::Requirement
152
+ requirement: &id009 !ruby/object:Gem::Requirement
201
153
  none: false
202
154
  requirements:
203
155
  - - ">="
@@ -209,11 +161,11 @@ dependencies:
209
161
  - 3
210
162
  version: 0.5.3
211
163
  type: :development
212
- version_requirements: *id012
164
+ version_requirements: *id009
213
165
  - !ruby/object:Gem::Dependency
214
166
  name: cucumber
215
167
  prerelease: false
216
- requirement: &id013 !ruby/object:Gem::Requirement
168
+ requirement: &id010 !ruby/object:Gem::Requirement
217
169
  none: false
218
170
  requirements:
219
171
  - - ">="
@@ -225,11 +177,11 @@ dependencies:
225
177
  - 3
226
178
  version: 0.6.3
227
179
  type: :development
228
- version_requirements: *id013
180
+ version_requirements: *id010
229
181
  - !ruby/object:Gem::Dependency
230
182
  name: rcov
231
183
  prerelease: false
232
- requirement: &id014 !ruby/object:Gem::Requirement
184
+ requirement: &id011 !ruby/object:Gem::Requirement
233
185
  none: false
234
186
  requirements:
235
187
  - - ">="
@@ -241,7 +193,7 @@ dependencies:
241
193
  - 8
242
194
  version: 0.9.8
243
195
  type: :development
244
- version_requirements: *id014
196
+ version_requirements: *id011
245
197
  description: " The Deltacloud API is built as a service-based REST API.\n You do not directly link a Deltacloud library into your program to use it.\n Instead, a client speaks the Deltacloud API over HTTP to a server\n which implements the REST interface.\n"
246
198
  email: deltacloud-users@lists.fedorahosted.org
247
199
  executables:
@@ -266,7 +218,6 @@ files:
266
218
  - lib/deltacloud/models/base_model.rb
267
219
  - lib/deltacloud/models/realm.rb
268
220
  - lib/deltacloud/models/instance.rb
269
- - lib/deltacloud/models/key.rb
270
221
  - lib/deltacloud/models/instance_profile.rb
271
222
  - lib/deltacloud/models/storage_volume.rb
272
223
  - lib/deltacloud/models/storage_snapshot.rb
@@ -274,6 +225,7 @@ files:
274
225
  - lib/deltacloud/models/blob.rb
275
226
  - lib/deltacloud/models/tag.rb
276
227
  - lib/deltacloud/models/bucket.rb
228
+ - lib/deltacloud/models/key.rb
277
229
  - lib/deltacloud/method_serializer.rb
278
230
  - lib/deltacloud/helpers.rb
279
231
  - lib/deltacloud/drivers/ec2/ec2_mock_driver.rb
@@ -299,8 +251,8 @@ files:
299
251
  - lib/deltacloud/base_driver/mock_driver.rb
300
252
  - lib/deltacloud/helpers/hardware_profiles_helper.rb
301
253
  - lib/deltacloud/helpers/conversion_helper.rb
302
- - lib/deltacloud/helpers/blob_stream.rb
303
254
  - lib/deltacloud/helpers/application_helper.rb
255
+ - lib/deltacloud/helpers/blob_stream.rb
304
256
  - lib/deltacloud/state_machine.rb
305
257
  - lib/deltacloud/base_driver.rb
306
258
  - lib/drivers.rb