deltacloud-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oved Ourfalli <ov...@redhat.com>
Subject Re: [PATCH core] CIMI: Initial implementation of 'attributes' in ResourceMetadata
Date Sun, 06 Jan 2013 12:47:23 GMT
Thank you for the quick response!
Today some drivers support the "realms" function, so I guess it should be somehow connected
to the resource metadata.
(Don't know if that's what you meant by "attribute constraints")

Oved


----- Original Message -----
> From: "Michal Fojtik" <mi@mifo.sk>
> To: dev@deltacloud.apache.org
> Sent: Sunday, January 6, 2013 2:38:48 PM
> Subject: Re: [PATCH core] CIMI: Initial implementation of 'attributes' in ResourceMetadata
> 
> When creating a new Machine, you can pass 'realm' like this:
> 
> <MachineCreate>
>   ....
>   <realm>us</realm>
> </MachineCreate>
> 
> Currently I have no answer how to get list of possible realms. They
> could
> be probably advertised in resourceMetada as 'realm' attribute
> constrains.
> 
> 
> On Sun, Jan 6, 2013 at 1:35 PM, Oved Ourfalli <ovedo@redhat.com>
> wrote:
> 
> > iiuc, you added a new realm resource_attr, and if the provider
> > returns a
> > realm_id then it will be reflected in the CIMI machine resource,
> > under
> > resource metadata.
> > What I didn't understand is how do you pass this realm id when
> > creating a
> > new machine via CIMI?
> > Also, how can I request for a list of realms? Will it be there when
> > I
> > request for list of realms using the CIMI API? (so that i would
> > know what's
> > the realm_id I wish to create the machine on?)
> >
> > Thank you,
> > Oved
> >
> > ----- Original Message -----
> > > From: mfojtik@redhat.com
> > > To: dev@deltacloud.apache.org
> > > Sent: Friday, January 4, 2013 3:05:16 PM
> > > Subject: [PATCH core] CIMI: Initial implementation of
> > > 'attributes' in
> > ResourceMetadata
> > >
> > > From: Michal Fojtik <mfojtik@redhat.com>
> > >
> > > Provider can define an extra attributes for each resource. In
> > > case
> > > of Deltacloud API we do need provide Consumer a way how to define
> > > the 'realm_id' when creating Machine.
> > >
> > > This patch will add 'realm' attribute that hold information about
> > > the 'realm' (eg. where Machine is located).
> > >
> > > This patch also add 'machineImage' attribute to Machine that
> > > point
> > > client to MachineImage that was used for creating Machine
> > >
> > > Signed-off-by: Michal fojtik <mfojtik@redhat.com>
> > > ---
> > >  server/lib/cimi/models/machine.rb           |  5 +++++
> > >  server/lib/cimi/models/resource_metadata.rb | 30
> > >  ++++++++++++++++++++++++++++-
> > >  server/lib/cimi/models/schema.rb            | 10 ++++++++++
> > >  3 files changed, 44 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/server/lib/cimi/models/machine.rb
> > > b/server/lib/cimi/models/machine.rb
> > > index e9d774b..1b1c77e 100644
> > > --- a/server/lib/cimi/models/machine.rb
> > > +++ b/server/lib/cimi/models/machine.rb
> > > @@ -17,6 +17,9 @@ class CIMI::Model::Machine < CIMI::Model::Base
> > >
> > >    acts_as_root_entity
> > >
> > > +  resource_attr :realm, :required => false
> > > +  resource_attr :machine_image, :required => false, :type =>
> > > :href
> > > +
> > >    text :state
> > >    text :cpu
> > >
> > > @@ -159,6 +162,8 @@ class CIMI::Model::Machine <
> > > CIMI::Model::Base
> > >      if context.expand? :volumes
> > >        machine_spec[:volumes] =
> > >        CIMI::Model::MachineVolume.find(instance.id, context,
> > >        :all)
> > >      end
> > > +    machine_spec[:realm] = instance.realm_id if
> > > instance.realm_id
> > > +    machine_spec[:machine_image] = { :href =>
> > > context.machine_image_url(instance.image_id) } if
> > > instance.image_id
> > >      machine = self.new(machine_spec)
> > >      machine
> > >    end
> > > diff --git a/server/lib/cimi/models/resource_metadata.rb
> > > b/server/lib/cimi/models/resource_metadata.rb
> > > index 858fcdc..6976515 100644
> > > --- a/server/lib/cimi/models/resource_metadata.rb
> > > +++ b/server/lib/cimi/models/resource_metadata.rb
> > > @@ -81,10 +81,29 @@ class CIMI::Model::ResourceMetadata <
> > > CIMI::Model::Base
> > >      })
> > >    end
> > >
> > > +  def self.resource_attributes
> > > +    @resource_attributes ||= {}
> > > +  end
> > > +
> > > +  def self.add_resource_attribute!(klass, name, opts={})
> > > +    resource_attributes[klass.name] ||= {}
> > > +    resource_attributes[klass.name][name] = opts
> > > +  end
> > > +
> > >    private
> > >
> > >    def self.rm_attributes_for(resource_class, context)
> > > -    []
> > > +    return [] if resource_attributes[resource_class.name].nil?
> > > +    resource_attributes[resource_class.name].map do |attr_name,
> > > attr_def|
> > > +      {
> > > +        :name => attr_name.to_s,
> > > +        # TODO: We need to make this URI return description of
> > > this
> > > 'non-CIMI'
> > > +        # attribute
> > > +        :namespace =>
> > > "
> > http://deltacloud.org/cimi/#{resource_class.name.split('::').last}/#{attr_name}
> > ",
> > > +        :type => translate_attr_type(attr_def[:type]),
> > > +        :required => attr_def[:required] ? 'true' : 'false'
> > > +      }
> > > +    end
> > >    end
> > >
> > >    def self.rm_capabilities_for(resource_class,context)
> > > @@ -108,6 +127,15 @@ class CIMI::Model::ResourceMetadata <
> > > CIMI::Model::Base
> > >      []
> > >    end
> > >
> > > +  def self.translate_attr_type(type)
> > > +    case type
> > > +      when :href then 'URI'
> > > +      when :text then 'string'
> > > +      when :boolean then 'boolean'
> > > +      else 'text'
> > > +    end
> > > +  end
> > > +
> > >    def self.none_defined(metadata)
> > >      return true if metadata.capabilities.empty? &&
> > >      metadata.capabilities.empty? && metadata.attributes.empty?
> > >      return false
> > > diff --git a/server/lib/cimi/models/schema.rb
> > > b/server/lib/cimi/models/schema.rb
> > > index b86fb08..4acd2dc 100644
> > > --- a/server/lib/cimi/models/schema.rb
> > > +++ b/server/lib/cimi/models/schema.rb
> > > @@ -334,6 +334,16 @@ class CIMI::Model::Schema
> > >    # Requires that the class into which this is included has a
> > >    # +add_attributes!+ method
> > >    module DSL
> > > +
> > > +    def resource_attr(name, opts={})
> > > +
> > >      CIMI::Model::ResourceMetadata.add_resource_attribute!(self,
> > > name, opts)
> > > +      if opts[:type]
> > > +        send(opts[:type], name)
> > > +      else
> > > +        text name
> > > +      end
> > > +    end
> > > +
> > >      def href(*args)
> > >        opts = args.extract_opts!
> > >        args.each { |arg| struct(arg, opts) { scalar :href } }
> > > --
> > > 1.8.0.2
> > >
> > >
> >
> 
> 
> 
> --
> -----------------------------------------------
> Michal Fojtik <mfojtik@mifo.sk>
> Enthusiastic Ruby programmer.
> 

Mime
View raw message