ack - solution looks good. only issue is to clarify the format (i.e. array of constraints with <value> for each?)
On 07/01/13 14:57, [email protected] wrote: > From: Michal Fojtik <[email protected]> > > Currently there is now way how to advertise available 'realms to > the client. This patch will make it possible through 'constraints' > defined for the 'realm' resourceMetadata atrribute defined for > the Machine resource. > > This will allow to pass ':constraints' option to 'resource_attr' like: > > resource_attr :realm, :required => false, > :constraints => lambda { |c| c.driver.realms(c.credentials).map { |r| > r.id } } > > The 'lamda' function must always return 'array' of possible values. > > Signed-off-by: Michal fojtik <[email protected]> > --- > server/lib/cimi/models/machine.rb | 4 +++- > server/lib/cimi/models/resource_metadata.rb | 8 +++++++- > 2 files changed, 10 insertions(+), 2 deletions(-) > > diff --git a/server/lib/cimi/models/machine.rb > b/server/lib/cimi/models/machine.rb > index 1b1c77e..7ac8f83 100644 > --- a/server/lib/cimi/models/machine.rb > +++ b/server/lib/cimi/models/machine.rb > @@ -17,7 +17,9 @@ class CIMI::Model::Machine < CIMI::Model::Base > > acts_as_root_entity > > - resource_attr :realm, :required => false > + resource_attr :realm, :required => false, > + :constraints => lambda { |c| c.driver.realms(c.credentials).map { |r| > r.id } } > + > resource_attr :machine_image, :required => false, :type => :href > > text :state > diff --git a/server/lib/cimi/models/resource_metadata.rb > b/server/lib/cimi/models/resource_metadata.rb > index 6976515..30e65d6 100644 > --- a/server/lib/cimi/models/resource_metadata.rb > +++ b/server/lib/cimi/models/resource_metadata.rb > @@ -95,13 +95,19 @@ class CIMI::Model::ResourceMetadata < CIMI::Model::Base > 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| > + if attr_def.has_key? :constraints > + constraints = attr_def[:constraints].call(context) > + else > + constraints = [] > + end > { > :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' > + :required => attr_def[:required] ? 'true' : 'false', > + :constraints => constraints.map { |v| { :value => v }} > } > end > end >
