deltacloud-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michal Fojtik <mfoj...@redhat.com>
Subject Re: how does create_xxx_url work?
Date Wed, 29 May 2013 13:46:59 GMT
On 05/21/2013 01:19 PM, Koper, Dies wrote:
> Hi Marios, Michal,
>
> I've updated my code with Marios' feedback.
>
> https://github.com/dkoper/deltacloud-core/commit/38b09c16609219b21bb83db
> 7f4384fe016593d7e
>
> I'm much closer now, export is working as expected (advertised properly,
> parameters are passed into the driver method correctly).
> I'm still having two issues with import:
>
> A POST to /cimi/systems/import returns "Sinatra doesn't know this
> ditty.".

Yeah, this is one of the Sinatra-Rabbit design thing. If you have 
collection of resources and you define an operation, that operation must 
always be performed on 'resource', so in other words it must have the 
':id' in the route.

One workaround for this is to use the 'pure' Sinatra routes:

post '/cimi/systems/import' do
   # place the import code here...
end

This should work. Other option is to hack Rabbit to allow this kind of 
operations...

   -- Michal

> A POST to /cimi/systems/UZXC0GRT-ZG8ZJCJ07/import (which is incorrect as
> import is on systems, not a particular system) is accepted and leads to
> my driver's import_system method being invoked.
>
> Also, the advertised url is incorrect:
>
> <operation rel="http://schemas.dmtf.org/cimi/1/action/import"
> href="http://localhost:3001/cimi/systems/:id/import" />
>
> Note the ':id' in the href.
>
> I assume the two are related.
> I tried to create the import Sinatra route similar to the show action.
> What am I missing?
>
> https://github.com/dkoper/deltacloud-core/commit/38b09c16609219b21bb83db
> 7f4384fe016593d7e#L1R108
>
> Cheers,
> Dies Koper
>
>
>> -----Original Message-----
>> From: marios@redhat.com [mailto:mandreou@redhat.com]
>> Sent: Monday, 20 May 2013 5:05 PM
>> To: dev@deltacloud.apache.org
>> Cc: Koper, Dies
>> Subject: Re: how does create_xxx_url work?
>>
>> On 20/05/13 07:45, Koper, Dies wrote:
>>> Hi Michal, all
>>>
>>> I've started on the implementation of system import/export,
> advertising
>>> the operations on the collections and resources.
>>> The export operation seems to work: I can expose the url in a
> system,
>> it
>>> shows up when I retrieve the system, and when I do a POST on that
> url,
>>> my driver's export_system method is invoked.
>>>
>>>
>> https://github.com/dkoper/deltacloud-core/commit/e93def6de7b1a088d23
>> 0b32
>>> 842a349059f12e88c
>>>
>>> I'm having problems with the import operation.
>>> I'm following the add operation as example.
>>>
>>> The add operation seems to be processed in two locations:
>>> Base.rb:
>>>      def self.list(ctx)
>>> ...
>>>        params[:add_url] = create_url(ctx)
>>>        if model_class == CIMI::Model::System
>>>          params[:system] = id
>>>        end
>>>        model_class.list(id, entries,
>>>
>> params).select_by(ctx.params['$select']).filter_by(ctx.params['$filt
>> er']
>>> )
>>>
>>> with create_url:
>>>      def self.create_url(ctx)
>>>        cimi_create = "create_#{model_name}_url"
>>>        dcloud_create = ctx.deltacloud_create_method_for(model_name)
>>>        if(ctx.respond_to?(cimi_create) &&
>>>           ctx.driver.respond_to?(dcloud_create)) ||
>> provides?(model_name)
>>>          ctx.send(cimi_create)
>>>        end
>>>      end
>>>
>>> Collections.rb:
>>> ...
>>>        params[:entries] = entries
>>>        params[:count] = params[:entries].size
>>>        if params[:add_url]
>>>          params[:operations] ||= []
>>>          params[:operations] << { :rel => "add", :href =>
>>> params.delete(:add_url) }
>>>        end
>>>        collection_class.new(params)
>>> ...
>>>
>>>
>>> So I have added similar code for import (see url above), but
>>> ctx.respond_to?(cimi_import) in my self.import_url returns nil for
> me.
>>> Should I be doing this differently? Or do I need to add other code
>>> elsewhere for this operation to work?
>>>
>>> ...
>>> I just noticed that I didn't require_relative the import and export
>>> classes in service.rb. When I add that, I get an error:
>>>
>>> 18 cloud providers loaded.
>>>
>> d:/sources/OSS/cloud/deltacloud-core/server/lib/cimi/service/base.rb
>> :34:
>>> in `const_get': uninitialized constant
>> CIMI::Model::SystemTemplateImport
>>> (NameError)
>>>          from
>>>
>> d:/sources/OSS/cloud/deltacloud-core/server/lib/cimi/service/base.rb
>> :34:
>>> in `model_class'
>>>          from
>>>
>> d:/sources/OSS/cloud/deltacloud-core/server/lib/cimi/service/base.rb
>> :47:
>>> in `inherited'
>>>          from
>>>
>> d:/sources/OSS/cloud/deltacloud-core/server/lib/cimi/service/system_
>> temp
>>> late_import.rb:16:in `<top (required)>'
>>>
>>> What am I missing?
>>>
>>> Thanks,
>>> Dies Koper
>>
>> OH, and to answer $TITLE, see
>> server/lib/deltacloud/helpers/rabbit_helper.rb I *think* (i.e. I don't
>> think we have similar code defined for CIMI, it just re-uses this
>> deltacloud helper)
>>
>>>
>>>
>>>
>>
>
>


-- 

Michal Fojtik <mfojtik@redhat.com>
Deltacloud API, CloudForms

Mime
View raw message