From: David Lutterkort <[email protected]>
---
server/lib/converters/xml_converter.rb | 7 ++++
.../deltacloud/helpers/hardware_profiles_helper.rb | 17 +++++++++-
server/server.rb | 6 ++++
server/views/instances/new.html.haml | 32 +++++++++++++++----
server/views/instances/show.html.haml | 6 ++++
5 files changed, 59 insertions(+), 9 deletions(-)
diff --git a/server/lib/converters/xml_converter.rb
b/server/lib/converters/xml_converter.rb
index 0b11fd7..4b8e78e 100644
--- a/server/lib/converters/xml_converter.rb
+++ b/server/lib/converters/xml_converter.rb
@@ -82,6 +82,13 @@ module Converters
builder.owner_id( obj.owner_id )
builder.image( :href=>@link_builder.send( :image_url,
obj.image_id ) )
builder.flavor( :href=>@link_builder.send( :flavor_url,
obj.flavor_id ) )
+ builder.__send__( 'hardware-profile', :href=>@link_builder.send(
:hardware_profile_url, obj.instance_profile.name) ) do
+ builder.id( obj.instance_profile.name )
+ obj.instance_profile.overrides.each do |p, v|
+ u = ::Deltacloud::HardwareProfile::unit(p)
+ builder.property( :kind=>:fixed, :name=>p, :unit=>u,
:value=>v )
+ end
+ end
builder.realm( :href=>@link_builder.send( :realm_url,
obj.realm_id ) ) if obj.realm_id
builder.state( obj.state )
builder.actions {
diff --git a/server/lib/deltacloud/helpers/hardware_profiles_helper.rb
b/server/lib/deltacloud/helpers/hardware_profiles_helper.rb
index 6269c23..ff7f239 100644
--- a/server/lib/deltacloud/helpers/hardware_profiles_helper.rb
+++ b/server/lib/deltacloud/helpers/hardware_profiles_helper.rb
@@ -13,10 +13,23 @@ module HardwareProfilesHelper
end
end
+ def format_instance_profile(ip)
+ o = ip.overrides.collect do |p, v|
+ u = hardware_property_unit(p)
+ "#{p} = #{v} #{u}"
+ end
+ if o.empty?
+ ""
+ else
+ "with #{o.join(", ")}"
+ end
+ end
+
+ private
def hardware_property_unit(prop)
- u = prop.unit
+ u = ::Deltacloud::HardwareProfile::unit(prop)
u = "" if ["label", "count"].include?(u)
- u = "vcpus" if prop.name == :cpu
+ u = "vcpus" if prop == :cpu
u
end
end
diff --git a/server/server.rb b/server/server.rb
index 7151f47..5c1bd73 100644
--- a/server/server.rb
+++ b/server/server.rb
@@ -203,6 +203,7 @@ get "/api/instances/new" do
@instance = Instance.new( { :id=>params[:id], :image_id=>params[:image_id] }
)
@image = driver.image( credentials, :id => params[:image_id] )
@flavors = driver.flavors( credentials, { :architecture=>@image.architecture
} )
+ @hardware_profiles = driver.hardware_profiles(credentials, :architecture =>
@image.architecture )
@realms = driver.realms(credentials)
respond_to do |format|
format.html { haml :"instances/new" }
@@ -238,7 +239,12 @@ collection :instances do
param :image_id, :string, :required
param :realm_id, :string, :optional
param :flavor_id, :string, :optional
+ param :hwp_id, :string, :optional
control do
+ # FIXME: Strictly speaking, we'd need to check that only either
+ # hwp_id or flavor_id are set, but not both. Since flavors will go
+ # away shortly, we can be a little sloppy
+ params[:hwp_id] = params[:flavor_id] if params[:flavor_id]
@image = driver.image(credentials, :id => params[:image_id])
instance = driver.create_instance(credentials, @image.id, params)
respond_to do |format|
diff --git a/server/views/instances/new.html.haml
b/server/views/instances/new.html.haml
index ded9106..c746475 100644
--- a/server/views/instances/new.html.haml
+++ b/server/views/instances/new.html.haml
@@ -8,16 +8,34 @@
%label
Instance Name:
%input{ :name => 'name', :size => 30 }/
- - if [email protected]?
- %h3 What flavor of machine?
- - for flavor in @flavors
+ - if !...@hardware_profiles.empty?
+ %h3 What size machine?
+ - for hwp in @hardware_profiles
.radio-group
- %label{ :for => "flavor_id_#{flavor.id}" }
- %input{ :type => :radio, :name => 'flavor_id', :value => flavor.id }/
- = flavor.id
+ %label{ :for => "hwp_id_#{hwp.name}" }
+ %input{ :type => :radio, :name => 'hwp_id', :value => hwp.name }/
+ = hwp.name
%br/
%span.radio-group-details
- = "#{flavor.architecture}, #{flavor.memory} GB, #{flavor.storage}
GB"
+ - first = true
+ - hwp.properties.select { |prop| prop.fixed? }.each do |prop|
+ - unless first
+ ,
+ - first = false
+ = format_hardware_property prop
+ - hwp.properties.reject { |prop| prop.fixed? }.each do |prop|
+ %span.radio-group-details
+ %label{ :for => "#{prop.param}_#{hwp.name}" }
+ = prop.name
+ - if prop.kind == :enum
+ %select{ :size => 1, :name => prop.param }
+ - for v in prop.values
+ %option= v
+ = prop.unit
+ - else
+ %input{ :name => prop.param, :size => 10, :value =>
"#{prop.default}" }
+ = prop.unit
+ (value must be between #{prop.first} #{prop.unit} and
#{prop.last} #{prop.unit})
- if [email protected]?
%h3 Where do you want it?
- for realm in @realms
diff --git a/server/views/instances/show.html.haml
b/server/views/instances/show.html.haml
index aa285e8..2a81c12 100644
--- a/server/views/instances/show.html.haml
+++ b/server/views/instances/show.html.haml
@@ -19,6 +19,12 @@
%dd
= @instance.flavor_id ? link_to(@instance.flavor_id,
flavor_url(@instance.flavor_id)) : 'default'
%di
+ %dt Hardware Profile
+ %dd
+ - prof = @instance.instance_profile
+ = link_to(prof.name, hardware_profile_url(prof.name))
+ = format_instance_profile(prof)
+ %di
%dt Realm
%dd
= @instance.realm_id ? link_to(@instance.realm_id,
realm_url(@instance.realm_id)) : 'default'
--
1.6.6.1
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel