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.". 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: mar...@redhat.com [mailto:mandr...@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) > > > > > > > >