You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by lu...@apache.org on 2010/07/09 01:48:14 UTC

svn commit: r962346 - /incubator/deltacloud/trunk/client/lib/dcloud/hardware_profile.rb

Author: lutter
Date: Thu Jul  8 23:48:14 2010
New Revision: 962346

URL: http://svn.apache.org/viewvc?rev=962346&view=rev
Log:
update to hardware profile client to include new property metadata.

Hardware Profile client was missing the attributes to handle range and enum properties.

Modified:
    incubator/deltacloud/trunk/client/lib/dcloud/hardware_profile.rb

Modified: incubator/deltacloud/trunk/client/lib/dcloud/hardware_profile.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/client/lib/dcloud/hardware_profile.rb?rev=962346&r1=962345&r2=962346&view=diff
==============================================================================
--- incubator/deltacloud/trunk/client/lib/dcloud/hardware_profile.rb (original)
+++ incubator/deltacloud/trunk/client/lib/dcloud/hardware_profile.rb Thu Jul  8 23:48:14 2010
@@ -22,7 +22,33 @@ module DCloud
     class HardwareProfile < BaseModel
 
       class Property
-        attr_reader :name, :unit, :value
+        class Range
+          attr_reader :first, :last
+          def initialize(element)
+            if element
+              @first = element.attributes['first']
+              @last = element.attributes['last']
+            end
+          end
+          def present?
+            ! @first.nil?
+          end
+        end
+        class Enum
+          attr_reader :entries
+          def initialize(element)
+            @entries = []
+            if element
+              element.get_elements( 'entry' ).each do |entry|
+                @entries << entry.attributes['value']
+              end
+            end
+          end
+          def present?
+            ! @entries.empty?
+          end
+        end
+        attr_reader :name, :kind, :unit, :value, :range, :enum
 
         def initialize(xml, name)
           @name = name
@@ -30,6 +56,9 @@ module DCloud
           if p
             @value = p.attributes['value']
             @unit = p.attributes['unit']
+            @kind = p.attributes['kind']
+            @range = Range.new(p.get_elements('range')[0]) if @kind=='range'
+            @enum = Enum.new(p.get_elements('enum')[0]) if @kind=='enum'
           end
         end
 
@@ -37,6 +66,7 @@ module DCloud
           ! @value.nil?
         end
 
+        # FIXME: how to  range/enum/kind bits fit into this?
         def to_s
           v = @value || "---"
           u = @unit || ""
@@ -52,10 +82,18 @@ module DCloud
         end
       end
 
+      class IntegerProperty < Property
+        def initialize(xml, name)
+          super(xml, name)
+          @value = @value.to_i if @value
+        end
+      end
+
       xml_tag_name :hardware_profile
 
       attribute :memory
       attribute :storage
+      attribute :cpu
       attribute :architecture
 
       def initialize(client, uri, xml=nil)
@@ -67,6 +105,7 @@ module DCloud
         unless xml.nil?
           @memory = FloatProperty.new(xml, 'memory')
           @storage = FloatProperty.new(xml, 'storage')
+          @cpu = IntegerProperty.new(xml, 'cpu')
           @architecture = Property.new(xml, 'architecture')
         end
       end