You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by mf...@redhat.com on 2011/12/07 16:26:52 UTC
[PATCH core 8/8] CIMI: Added properties to Machine (machine_admin, machine_image references). Added some helpers to handle UI for properties
From: Michal Fojtik <mf...@redhat.com>
Signed-off-by: Michal fojtik <mf...@redhat.com>
---
clients/cimi/lib/cimi_frontend_helper.rb | 23 ++++++++++++++++++++++
clients/cimi/views/machines/show.haml | 31 +++++++++++++++++++++++++++++-
server/lib/cimi/model/machine.rb | 27 +++++++++++++++++++++----
3 files changed, 75 insertions(+), 6 deletions(-)
diff --git a/clients/cimi/lib/cimi_frontend_helper.rb b/clients/cimi/lib/cimi_frontend_helper.rb
index 80ae9ed..540acb9 100644
--- a/clients/cimi/lib/cimi_frontend_helper.rb
+++ b/clients/cimi/lib/cimi_frontend_helper.rb
@@ -17,6 +17,8 @@ module CIMI
module Frontend
module Helper
+ require 'uri'
+
def href_to_id(href)
href.split('/').last
end
@@ -63,6 +65,27 @@ module CIMI
end
end
+ def relativize_url(absolute_url)
+ URI.parse(absolute_url).path
+ end
+
+ def convert_urls(value)
+ value.gsub( %r{http(s?)://[^\s<]+} ) { |url| "<a href='#{relativize_url(url)}'>#{href_to_id(url)}</a>" }
+ end
+
+ def not_implemented(collection_name)
+ return unless ['machine_templates', 'volume_templates'].include?(collection_name)
+ capture_haml do
+ haml_tag :span, :class => [ :label, :warning ] do
+ haml_concat 'pending'
+ end
+ end
+ end
+
+ def struct_to_name(struct_name)
+ struct_name.class.name.split('_').last
+ end
+
end
end
end
diff --git a/clients/cimi/views/machines/show.haml b/clients/cimi/views/machines/show.haml
index a5b7638..d35a850 100644
--- a/clients/cimi/views/machines/show.haml
+++ b/clients/cimi/views/machines/show.haml
@@ -51,7 +51,7 @@
- if @machine.memory.quantity.nil?
%span.label Not specified
- else
- =[@memory.quantity, @memory.units].join(" ")
+ =[@machine.memory.quantity, @machine.memory.units].join(" ")
%dt Meters
%dd
- if @machine.meters.empty?
@@ -60,6 +60,19 @@
- @machine.meters.each do |meters|
%dd=meters.ref
+%h3 Properties
+
+%table.bordered-table
+ %thead
+ %tr
+ %th Name
+ %th Value
+ %tbody
+ - @machine.property.each do |property|
+ %tr
+ %td=property.name
+ %td=convert_urls property.value
+
%h3 Network Interfaces
%table.bordered-table
@@ -75,6 +88,11 @@
%td
%span.label.success=interface.state
%td=interface.protocol
+ - if @machine.network_interfaces.empty?
+ %tr
+ %td{ :colspan => 3 }
+ %strong
+ There are no network interfaces defined for this Machine.
%h3 Volumes
@@ -91,6 +109,12 @@
%a{:href => "/cimi/volumes/#{href_to_id(volume.href)}" }=href_to_id(volume.href)
%td=volume.attachment_point
%td=volume.protocol
+ - if @machine.volumes.empty?
+ %tr
+ %td{ :colspan => 3 }
+ %strong
+ There are no Volume entities defined for this Machine.
+
%h3 Disks
@@ -106,3 +130,8 @@
%td=[boolean_span_for(disk.capacity.quantity), disk.capacity.units].join(" ")
%td=boolean_span_for disk.format
%td=boolean_span_for disk.attachment_point
+ - if @machine.disks.empty?
+ %tr
+ %td{ :colspan => 3 }
+ %strong
+ There are no disks defined for this Machine.
diff --git a/server/lib/cimi/model/machine.rb b/server/lib/cimi/model/machine.rb
index 4aef558..4f28ea8 100644
--- a/server/lib/cimi/model/machine.rb
+++ b/server/lib/cimi/model/machine.rb
@@ -78,9 +78,16 @@ class CIMI::Model::Machine < CIMI::Model::Base
def self.create_from_xml(body, context)
xml = XmlSimple.xml_in(body)
- hardware_profile_id = xml['MachineTemplate'][0]['MachineConfig'][0]["href"].split('/').last
- image_id = xml['MachineTemplate'][0]['MachineImage'][0]["href"].split('/').last
- instance = context.driver.create_instance(context.credentials, image_id, { :hwp_id => hardware_profile_id })
+ machine_template = xml['MachineTemplate'][0]
+ hardware_profile_id = machine_template['MachineConfig'][0]["href"].split('/').last
+ image_id = machine_template['MachineImage'][0]["href"].split('/').last
+ additional_params = {}
+ if machine_template.has_key? 'MachineAdmin'
+ additional_params[:keyname] = machine_template['MachineAdmin'][0]["href"].split('/').last
+ end
+ instance = context.driver.create_instance(context.credentials, image_id, {
+ :hwp_id => hardware_profile_id
+ }.merge(additional_params))
from_instance(instance, context)
end
@@ -106,14 +113,15 @@ class CIMI::Model::Machine < CIMI::Model::Base
self.new(
:name => instance.id,
:description => instance.name,
- :created => Time.now,
+ :created => instance.launch_time,
:uri => context.machine_url(instance.id),
:state => convert_instance_state(instance.state),
:cpu => convert_instance_cpu(instance.instance_profile, context),
:memory => convert_instance_memory(instance.instance_profile, context),
:disks => convert_instance_storage(instance.instance_profile, context),
:network_interfaces => convert_instance_addresses(instance),
- :operations => convert_instance_actions(instance, context)
+ :operations => convert_instance_actions(instance, context),
+ :property => convert_instance_properties(instance, context)
)
end
@@ -124,6 +132,15 @@ class CIMI::Model::Machine < CIMI::Model::Base
('RUNNING' == state) ? 'STARTED' : state
end
+ def self.convert_instance_properties(instance, context)
+ properties = []
+ properties << { :name => :machine_image, :value => context.machine_image_url(instance.image_id) }
+ if instance.respond_to? :keyname
+ properties << { :name => :machine_admin, :value => context.machine_admin_url(instance.keyname) }
+ end
+ properties
+ end
+
def self.convert_instance_cpu(profile, context)
cpu_override = profile.overrides.find { |p, v| p == :cpu }
if cpu_override.nil?
--
1.7.4.4