deltacloud-core 0.0.1 → 0.0.2

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 (32) hide show
  1. data/Rakefile +1 -24
  2. data/lib/deltacloud/base_driver/features.rb +15 -0
  3. data/lib/deltacloud/base_driver/mock_driver.rb +37 -0
  4. data/lib/deltacloud/drivers/ec2/ec2_driver.rb +70 -48
  5. data/lib/deltacloud/drivers/gogrid/gogrid_driver.rb +97 -14
  6. data/lib/deltacloud/drivers/{rimu/rimu_hosting_client.rb → rimuhosting/rimuhosting_client.rb} +5 -8
  7. data/lib/deltacloud/drivers/{rimu/rimu_hosting_driver.rb → rimuhosting/rimuhosting_driver.rb} +6 -5
  8. data/lib/deltacloud/drivers/terremark/terremark_driver.rb +261 -0
  9. data/lib/deltacloud/hardware_profile.rb +22 -0
  10. data/lib/deltacloud/helpers/application_helper.rb +18 -0
  11. data/lib/deltacloud/helpers/conversion_helper.rb +2 -3
  12. data/lib/deltacloud/method_serializer.rb +84 -0
  13. data/lib/drivers.rb +4 -3
  14. data/lib/sinatra/accept_media_types.rb +128 -0
  15. data/lib/sinatra/respond_to.rb +23 -16
  16. data/public/javascripts/application.js +30 -0
  17. data/public/javascripts/jquery-1.4.2.min.js +154 -0
  18. data/server.rb +23 -21
  19. data/support/fedora/deltacloudd +68 -0
  20. data/support/fedora/rubygem-deltacloud-core.spec +91 -0
  21. data/views/instances/index.html.haml +2 -1
  22. data/views/instances/index.xml.haml +3 -3
  23. data/views/instances/new.html.haml +9 -3
  24. data/views/instances/show.html.haml +2 -1
  25. data/views/instances/show.xml.haml +16 -3
  26. data/views/layout.html.haml +2 -0
  27. metadata +19 -37
  28. data/lib/converters/xml_converter.rb +0 -133
  29. data/public/javascripts/controls.js +0 -963
  30. data/public/javascripts/dragdrop.js +0 -973
  31. data/public/javascripts/effects.js +0 -1128
  32. data/public/javascripts/prototype.js +0 -4320
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'optparse'
5
+ require 'thin'
6
+
7
+ options = {
8
+ :env => 'production'
9
+ }
10
+ optparse = OptionParser.new do |opts|
11
+
12
+ opts.banner = <<BANNER
13
+ Usage:
14
+ deltacloudd -i <driver> [options]
15
+
16
+ Options:
17
+ BANNER
18
+ opts.on( '-i', '--driver DRIVER', 'Driver to use') do |driver|
19
+ ENV["API_DRIVER"] = driver
20
+ end
21
+ opts.on( '-r', '--hostname HOSTNAME',
22
+ 'Bind to HOST address (default: localhost)') do |host|
23
+ ENV["API_HOST"] = host
24
+ end
25
+ opts.on( '-p', '--port PORT', 'Use PORT (default: 3001)') do |port|
26
+ ENV["API_PORT"] = port
27
+ end
28
+ opts.on( '-e', '--env ENV', 'Environment (default: "development")') { |env| options[:env] = env }
29
+ opts.on( '-h', '--help', '') { options[:help] = true }
30
+ end
31
+
32
+ optparse.parse!
33
+
34
+ if options[:help]
35
+ puts optparse
36
+ exit(0)
37
+ end
38
+
39
+ unless ENV["API_DRIVER"]
40
+ puts "You need to specify a driver to use (-i <driver>)"
41
+ exit(1)
42
+ end
43
+
44
+ ENV["API_HOST"] = "localhost" unless ENV["API_HOST"]
45
+ ENV["API_PORT"] = "3001" unless ENV["API_PORT"]
46
+
47
+ dirname="#{File.dirname(__FILE__)}/.."
48
+
49
+ argv_opts = ARGV.clone
50
+ argv_opts << ['start'] unless Thin::Runner.commands.include?(options[0])
51
+ argv_opts << ['--address', ENV["API_HOST"] ]
52
+ argv_opts << ['--port', ENV["API_PORT"] ]
53
+ argv_opts << ['--rackup', 'config.ru' ]
54
+ argv_opts << ['--chdir', dirname ]
55
+ argv_opts << ['-e', options[:env] ]
56
+ argv_opts << ['--threaded', '-D', '--stats', '/stats']
57
+
58
+ argv_opts.flatten!
59
+
60
+ puts "Starting Deltacloud API :: #{ENV["API_DRIVER"]} :: http://#{ENV["API_HOST"]}:#{ENV["API_PORT"]}/api"
61
+ puts
62
+
63
+ thin = Thin::Runner.new(argv_opts)
64
+ begin
65
+ thin.run!
66
+ rescue Exception => e
67
+ puts "ERROR: #{e.message}"
68
+ end
@@ -0,0 +1,91 @@
1
+ %global ruby_sitelib %(ruby -rrbconfig -e "puts Config::CONFIG['sitelibdir']")
2
+ %global gemdir %(ruby -rubygems -e 'puts Gem::dir' 2>/dev/null)
3
+ %global gemname deltacloud-core
4
+ %global geminstdir %{gemdir}/gems/%{gemname}-%{version}
5
+
6
+ Summary: Deltacloud REST API
7
+ Name: rubygem-%{gemname}
8
+ Version: 0.0.1
9
+ Release: 2%{?dist}
10
+ Group: Development/Languages
11
+ License: ASL 2.0 and MIT
12
+ URL: http://www.deltacloud.org
13
+ Source0: http://gems.rubyforge.org/gems/%{gemname}-%{version}.gem
14
+ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
15
+ Requires: rubygems
16
+ Requires: ruby(abi) = 1.8
17
+ Requires: rubygem(eventmachine) >= 0.12.10
18
+ Requires: rubygem(haml) >= 2.2.17
19
+ Requires: rubygem(sinatra) >= 0.9.4
20
+ Requires: rubygem(rack) >= 1.0.0
21
+ Requires: rubygem(thin) >= 1.2.5
22
+ Requires: rubygem(builder) >= 2.1.2
23
+ Requires: rubygem(json) >= 1.2.3
24
+ BuildRequires: ruby-json >= 1.1.9
25
+ BuildRequires: rubygem(rake) >= 0.8.7
26
+ BuildRequires: rubygem(rack-test) >= 0.4.0
27
+ BuildRequires: rubygem(cucumber) >= 0.4.0
28
+ BuildRequires: rubygem(rcov) >= 0.9.6
29
+ BuildRequires: rubygems
30
+ BuildRequires: ruby(abi) = 1.8
31
+ BuildArch: noarch
32
+ Provides: rubygem(%{gemname}) = %{version}
33
+
34
+ %description
35
+ The Deltacloud API is built as a service-based REST API.
36
+ You do not directly link a Deltacloud library into your program to use it.
37
+ Instead, a client speaks the Deltacloud API over HTTP to a server
38
+ which implements the REST interface.
39
+
40
+ %prep
41
+
42
+ %build
43
+
44
+ %install
45
+ rm -rf %{buildroot}
46
+ mkdir -p %{buildroot}%{gemdir}
47
+ gem install --local --install-dir %{buildroot}%{gemdir} \
48
+ --force --rdoc %{SOURCE0}
49
+ mkdir -p %{buildroot}/%{_bindir}
50
+ mv %{buildroot}%{geminstdir}/support/fedora/deltacloudd %{buildroot}/%{geminstdir}/bin
51
+ mv %{buildroot}%{gemdir}/bin/* %{buildroot}/%{_bindir}
52
+ rmdir %{buildroot}%{gemdir}/bin
53
+ find %{buildroot}%{geminstdir}/bin -type f | xargs chmod a+x
54
+
55
+ # Needs json_pure gem / not available in Fedora yet
56
+ #%check
57
+ #pushd %{buildroot}%{geminstdir}
58
+ #cucumber features/*.feature
59
+ #popd
60
+
61
+ %clean
62
+ rm -rf %{buildroot}
63
+
64
+ %files
65
+ %defattr(-, root, root, -)
66
+ %{_bindir}/deltacloudd
67
+ %{gemdir}/gems/%{gemname}-%{version}/bin
68
+ %{gemdir}/gems/%{gemname}-%{version}/lib
69
+ %{gemdir}/gems/%{gemname}-%{version}/public/favicon.ico
70
+ %{gemdir}/gems/%{gemname}-%{version}/public/images
71
+ %{gemdir}/gems/%{gemname}-%{version}/public/stylesheets
72
+ %{gemdir}/gems/%{gemname}-%{version}/tests
73
+ %{gemdir}/gems/%{gemname}-%{version}/views
74
+ %{gemdir}/gems/%{gemname}-%{version}/Rakefile
75
+ %{gemdir}/gems/%{gemname}-%{version}/*.rb
76
+ %{gemdir}/gems/%{gemname}-%{version}/config.ru
77
+ %doc %{gemdir}/gems/%{gemname}-%{version}/support/fedora
78
+ %doc %{gemdir}/gems/%{gemname}-%{version}/COPYING
79
+ %doc %{gemdir}/doc/%{gemname}-%{version}
80
+ %{gemdir}/cache/%{gemname}-%{version}.gem
81
+ %{gemdir}/specifications/%{gemname}-%{version}.gemspec
82
+ # MIT
83
+ %{gemdir}/gems/%{gemname}-%{version}/public/javascripts
84
+
85
+ %changelog
86
+ * Mon Apr 26 2010 Michal Fojtik <mfojtik@packager> - 0.0.1-1
87
+ - Initial package
88
+
89
+ * Mon Apr 26 2010 Michal Fojtik <mfojtik@packager> - 0.0.1-2
90
+ - Fixed broken dependencies
91
+ - Added new launcher for Fedora
@@ -26,4 +26,5 @@
26
26
  %td
27
27
  = instance.state
28
28
  %td
29
- = instance.actions.collect { |a| link_to(a, self.send("#{a}_instance_url", instance.id), :method => :post)}.join(' ')
29
+ -instance.actions.each do |action|
30
+ =link_to action, self.send(:"#{action}_instance_url", instance.id), :class => instance_action_method(action)
@@ -14,10 +14,10 @@
14
14
  %property{:kind => 'fixed', :name => p, :value => v, :unit => Deltacloud::HardwareProfile::unit(p)}
15
15
  %actions
16
16
  - instance.actions.compact.each do |action|
17
- %link{:rel => action, :href => self.send("#{action}_instance_url", instance.id)}
18
- - haml_tag :"public-addresses" do
17
+ %link{:rel => action, :href => self.send("#{action}_instance_url", instance.id), :method => instance_action_method(action)}
18
+ %public-addresses
19
19
  - instance.public_addresses.each do |address|
20
20
  %address #{address}
21
- - haml_tag :"private-addresses" do
21
+ %private-addresses
22
22
  - instance.private_addresses.each do |address|
23
23
  %address #{address}
@@ -5,9 +5,15 @@
5
5
 
6
6
  %form{ :action => instances_url, :method => :post }
7
7
  %input{ :name => :image_id, :type => :hidden, :value => @instance.image_id }/
8
- %label
9
- Instance Name:
10
- %input{ :name => 'name', :size => 30 }/
8
+ %p
9
+ %label
10
+ Instance Name:
11
+ %input{ :name => 'name', :size => 30 }/
12
+ -if driver_has_feature?(:authentication_key)
13
+ %p
14
+ %label
15
+ Instance Keyname:
16
+ %input{:name => 'keyname', :size => 30 }
11
17
  - if !@hardware_profiles.empty?
12
18
  %h3 What size machine?
13
19
  - for hwp in @hardware_profiles
@@ -39,4 +39,5 @@
39
39
  %di
40
40
  %dt
41
41
  %dd
42
- = @instance.actions.collect { |action| link_to(action, "/api/instances/#{@instance.id}/#{action}") }.join("&nbsp;")
42
+ -@instance.actions.each do |action|
43
+ =link_to action, self.send(:"#{action}_instance_url", @instance.id), :class => instance_action_method(action)
@@ -17,12 +17,25 @@
17
17
  %property{:kind => 'fixed', :name => p, :value => v, :unit => Deltacloud::HardwareProfile::unit(p)}
18
18
  %actions
19
19
  - @instance.actions.compact.each do |instance_action|
20
- %link{:rel => instance_action, :href => self.send("#{instance_action}_instance_url", @instance.id)}
21
- - haml_tag :"public-addresses" do
20
+ %link{:rel => instance_action, :method => instance_action_method(instance_action), :href => self.send("#{instance_action}_instance_url", @instance.id)}
21
+ %public-addresses
22
22
  - @instance.public_addresses.each do |address|
23
23
  %address<
24
24
  =address
25
- - haml_tag :"private-addresses" do
25
+ %private-addresses
26
26
  - @instance.private_addresses.each do |address|
27
27
  %address<
28
28
  =address
29
+ - if driver_has_auth_features?
30
+ %authentication{ :type => driver_auth_feature_name }
31
+ - if @instance.authn_feature_failed?
32
+ %error #{@instance.authn_error}
33
+ - else
34
+ - if driver_auth_feature_name == 'password'
35
+ %login
36
+ %username #{@instance.username}
37
+ %password #{@instance.password}
38
+ - if driver_auth_feature_name == 'key'
39
+ %login
40
+ %keyname #{@instance.keyname}
41
+
@@ -8,6 +8,8 @@
8
8
  /[if lt IE 8]
9
9
  = stylesheet_link_tag '/stylesheets/compiled/ie.css', :media => 'screen, projection'
10
10
  = stylesheet_link_tag '/stylesheets/compiled/application.css', :media => 'screen, projection'
11
+ %script{:type => "text/javascript", :src => "/javascripts/jquery-1.4.2.min.js" }
12
+ %script{:type => "text/javascript", :src => "/javascripts/application.js" }
11
13
  %body
12
14
  #wrapper
13
15
  #header
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deltacloud-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Red Hat, Inc.
@@ -9,19 +9,9 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-04-23 00:00:00 +02:00
12
+ date: 2010-06-09 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: rake
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 0.8.7
24
- version:
25
15
  - !ruby/object:Gem::Dependency
26
16
  name: eventmachine
27
17
  type: :runtime
@@ -73,44 +63,34 @@ dependencies:
73
63
  version: 1.2.5
74
64
  version:
75
65
  - !ruby/object:Gem::Dependency
76
- name: rerun
77
- type: :runtime
78
- version_requirement:
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - ">="
82
- - !ruby/object:Gem::Version
83
- version: 0.5.2
84
- version:
85
- - !ruby/object:Gem::Dependency
86
- name: builder
66
+ name: json
87
67
  type: :runtime
88
68
  version_requirement:
89
69
  version_requirements: !ruby/object:Gem::Requirement
90
70
  requirements:
91
71
  - - ">="
92
72
  - !ruby/object:Gem::Version
93
- version: 2.1.2
73
+ version: 1.2.3
94
74
  version:
95
75
  - !ruby/object:Gem::Dependency
96
- name: json
76
+ name: rerun
97
77
  type: :runtime
98
78
  version_requirement:
99
79
  version_requirements: !ruby/object:Gem::Requirement
100
80
  requirements:
101
81
  - - ">="
102
82
  - !ruby/object:Gem::Version
103
- version: 1.2.3
83
+ version: 0.5.2
104
84
  version:
105
85
  - !ruby/object:Gem::Dependency
106
- name: rack-accept-media-types
107
- type: :runtime
86
+ name: rake
87
+ type: :development
108
88
  version_requirement:
109
89
  version_requirements: !ruby/object:Gem::Requirement
110
90
  requirements:
111
91
  - - ">="
112
92
  - !ruby/object:Gem::Version
113
- version: "0.9"
93
+ version: 0.8.7
114
94
  version:
115
95
  - !ruby/object:Gem::Dependency
116
96
  name: compass
@@ -175,10 +155,13 @@ files:
175
155
  - config.ru
176
156
  - server.rb
177
157
  - deltacloud.rb
178
- - lib/converters/xml_converter.rb
158
+ - support/fedora/deltacloudd
159
+ - support/fedora/rubygem-deltacloud-core.spec
160
+ - lib/drivers.rb
179
161
  - lib/deltacloud/base_driver.rb
180
162
  - lib/deltacloud/base_driver/base_driver.rb
181
163
  - lib/deltacloud/base_driver/features.rb
164
+ - lib/deltacloud/base_driver/mock_driver.rb
182
165
  - lib/deltacloud/drivers/ec2/ec2_driver.rb
183
166
  - lib/deltacloud/drivers/ec2/ec2_mock_driver.rb
184
167
  - lib/deltacloud/drivers/gogrid/gogrid_client.rb
@@ -190,8 +173,9 @@ files:
190
173
  - lib/deltacloud/drivers/rackspace/rackspace_client.rb
191
174
  - lib/deltacloud/drivers/rackspace/rackspace_driver.rb
192
175
  - lib/deltacloud/drivers/rhevm/rhevm_driver.rb
193
- - lib/deltacloud/drivers/rimu/rimu_hosting_client.rb
194
- - lib/deltacloud/drivers/rimu/rimu_hosting_driver.rb
176
+ - lib/deltacloud/drivers/terremark/terremark_driver.rb
177
+ - lib/deltacloud/drivers/rimuhosting/rimuhosting_client.rb
178
+ - lib/deltacloud/drivers/rimuhosting/rimuhosting_driver.rb
195
179
  - lib/deltacloud/hardware_profile.rb
196
180
  - lib/deltacloud/helpers.rb
197
181
  - lib/deltacloud/helpers/application_helper.rb
@@ -206,12 +190,13 @@ files:
206
190
  - lib/deltacloud/models/instance_profile.rb
207
191
  - lib/deltacloud/state_machine.rb
208
192
  - lib/deltacloud/validation.rb
193
+ - lib/deltacloud/method_serializer.rb
209
194
  - lib/sinatra/lazy_auth.rb
210
195
  - lib/sinatra/rabbit.rb
211
196
  - lib/sinatra/respond_to.rb
212
197
  - lib/sinatra/static_assets.rb
213
198
  - lib/sinatra/url_for.rb
214
- - lib/drivers.rb
199
+ - lib/sinatra/accept_media_types.rb
215
200
  - views/accounts/index.html.haml
216
201
  - views/accounts/show.html.haml
217
202
  - views/api/show.html.haml
@@ -264,10 +249,7 @@ files:
264
249
  - public/images/rails.png
265
250
  - public/images/topbar-bg.png
266
251
  - public/javascripts/application.js
267
- - public/javascripts/controls.js
268
- - public/javascripts/dragdrop.js
269
- - public/javascripts/effects.js
270
- - public/javascripts/prototype.js
252
+ - public/javascripts/jquery-1.4.2.min.js
271
253
  - public/stylesheets/compiled/application.css
272
254
  - public/stylesheets/compiled/ie.css
273
255
  - public/stylesheets/compiled/print.css
@@ -1,133 +0,0 @@
1
- #
2
- # Copyright (C) 2009 Red Hat, Inc.
3
- #
4
- # This library is free software; you can redistribute it and/or
5
- # modify it under the terms of the GNU Lesser General Public
6
- # License as published by the Free Software Foundation; either
7
- # version 2.1 of the License, or (at your option) any later version.
8
- #
9
- # This library is distributed in the hope that it will be useful,
10
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
- # Lesser General Public License for more details.
13
- #
14
- # You should have received a copy of the GNU Lesser General Public
15
- # License along with this library; if not, write to the Free Software
16
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
-
18
- module Converters
19
-
20
- ( ALIASES = {
21
- :owner=>nil,
22
- :volume=>:storage_volume,
23
- } ) unless defined?( ALIASES )
24
-
25
- def self.url_type(type)
26
- type = type.to_sym
27
- return ALIASES[type] if ( ALIASES.keys.include?( type ) )
28
- type
29
- end
30
-
31
- def self.tag_name(type)
32
- tag_name = type.to_s
33
- tag_name.gsub( /_/, '-' )
34
- end
35
-
36
- class XMLConverter
37
- def initialize(link_builder, type)
38
- @link_builder = link_builder
39
- @type = type
40
- end
41
-
42
- def convert(obj, builder=nil)
43
- builder ||= Builder::XmlMarkup.new( :indent=>2 )
44
- if ( obj.is_a?( Array ) )
45
- builder.__send__( @type.to_s.pluralize.gsub( /_/, '-' ).to_sym ) do
46
- obj.each do |e|
47
- convert( e, builder )
48
- end
49
- end
50
- else
51
- case ( obj )
52
- when Image
53
- builder.image( :href=>@link_builder.send( :image_url, obj.id ) ) {
54
- builder.id( obj.id )
55
- builder.owner_id( obj.owner_id )
56
- builder.name( obj.name )
57
- builder.description( obj.description )
58
- builder.architecture( obj.architecture )
59
- }
60
- when Realm
61
- builder.realm( :href=>@link_builder.send( :realm_url, obj.id ) ) {
62
- builder.id( obj.id )
63
- builder.name( obj.name )
64
- builder.state( obj.state )
65
- if ( obj.limit == :unlimited )
66
- builder.limit()
67
- else
68
- builder.limit( obj.limit )
69
- end
70
- }
71
- when Instance
72
- builder.instance( :href=>@link_builder.send( :instance_url, obj.id ) ) {
73
- builder.id( obj.id )
74
- builder.name( obj.name )
75
- builder.owner_id( obj.owner_id )
76
- builder.image( :href=>@link_builder.send( :image_url, obj.image_id ) )
77
- builder.__send__( 'hardware-profile', :href=>@link_builder.send( :hardware_profile_url, obj.instance_profile.name) ) do
78
- builder.id( obj.instance_profile.name )
79
- obj.instance_profile.overrides.each do |p, v|
80
- u = ::Deltacloud::HardwareProfile::unit(p)
81
- builder.property( :kind=>:fixed, :name=>p, :unit=>u, :value=>v )
82
- end
83
- end
84
- builder.realm( :href=>@link_builder.send( :realm_url, obj.realm_id ) ) if obj.realm_id
85
- builder.state( obj.state )
86
- builder.actions {
87
- if ( obj.actions )
88
- obj.actions.each do |action|
89
- builder.link( :rel=>action, :href=>@link_builder.send( "#{action}_instance_url", obj.id ) )
90
- end
91
- end
92
- }
93
- builder.__send__( 'public-addresses' ) {
94
- obj.public_addresses.each do |address|
95
- builder.address( address )
96
- end
97
- }
98
- builder.__send__( 'private-addresses' ) {
99
- obj.private_addresses.each do |address|
100
- builder.address( address )
101
- end
102
- }
103
- }
104
- when StorageVolume
105
- builder.__send__('storage-volume', :href=>@link_builder.send( :storage_volume_url, obj.id )) {
106
- builder.id( obj.id )
107
- builder.created( obj.created )
108
- builder.state( obj.state )
109
- builder.capacity( obj.capacity )
110
- builder.device( obj.device )
111
- if ( obj.instance_id )
112
- builder.instance( :href=>@link_builder.send( :instance_url, obj.instance_id ) )
113
- else
114
- builder.instance()
115
- end
116
- }
117
- when StorageSnapshot
118
- builder.__send__('storage-snapshot', :href=>@link_builder.send( :storage_snapshot_url, obj.id )) {
119
- builder.id( obj.id )
120
- builder.created( obj.created )
121
- builder.state( obj.state )
122
- if ( obj.storage_volume_id )
123
- builder.__send__('storage-volume', :href=>@link_builder.send( :storage_volume_url, obj.storage_volume_id ) )
124
- else
125
- builder.__send( 'storage-volume' )
126
- end
127
- }
128
- end
129
- end
130
- return builder.target!
131
- end
132
- end
133
- end