deltacloud-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Koper, Dies" <di...@fast.au.fujitsu.com>
Subject RE: [PATCH] CIMI: adding system support
Date Fri, 08 Feb 2013 12:10:48 GMT
This is a work in progress. At the moment I'm not making any progress
though:

When listing systems or system templates, I get the following trace:

>> Listening on localhost:3001, CTRL+C to stop
list(#<CIMI::Collections::SystemTemplates:0xc4c2690>) called.
system_template#self.find called
reached mock's system_templates with opts:
env#<CIMI::Collections::SystemTemplates:0xc4c2690>
dir: /var/tmp/deltacloud-mock-diesk/cimi/system_template/*.json
model_files:
/var/tmp/deltacloud-mock-diesk/cimi/system_template/template1.json
raw templates from files: #<CIMI::Model::SystemTemplate:0xc3b28f0>
cimi_object.name = system template 1
context = #<CIMI::Collections::SystemTemplates:0xc4c2690>
Templates from driver 1
entries:
entries:
E, [2013-02-08T22:36:49.092238 #8748] ERROR -- 500: [NoMethodError]
undefined method `size' for nil:NilClass

d:/sources/OSS/cloud/deltacloud/server/lib/cimi/models/collection.rb:142
:in `list'
d:/sources/OSS/cloud/deltacloud/server/lib/cimi/collections/system_templ
ates.rb:26
D:/programs/Ruby187/lib/ruby/gems/1.8/gems/sinatra-rabbit-1.1.3/lib/sina
tra/rabbit/base.rb:396:in `instance_eval'
D:/programs/Ruby187/lib/ruby/gems/1.8/gems/sinatra-rabbit-1.1.3/lib/sina
tra/rabbit/base.rb:396:in `GET /system_templates'

It seems 'entries' is nil. It is supposed to be set in the find method.
But I don't know which find method. I've put puts methods in all system
related model's find methods but none get called.
My model's system(_template).find does get called once at the beginning
of the stack (see debug output above) so I'm wondering what find method
it is trying to call anyway.

Many of the system_ subcollections are copied and pasted from existing
classes (network.rb ?) and may still have original code.
I believe in most cases those methods wouldn't be called anyway and can
be removed.

Regards,
Dies Koper


> -----Original Message-----
> From: diesk@fast.au.fujitsu.com [mailto:diesk@fast.au.fujitsu.com]
> Sent: Friday, 8 February 2013 10:44 PM
> To: dev@deltacloud.apache.org
> Subject: [PATCH] CIMI: adding system support
> 
> From: Dies Koper <diesk@fast.au.fujitsu.com>
> 
> ---
>  server/lib/cimi/collections/addresses.rb           |   2 +-
>  server/lib/cimi/collections/machines.rb            |   2 +-
>  server/lib/cimi/collections/system_templates.rb    |  72 ++++++++
>  server/lib/cimi/collections/systems.rb             | 198
> +++++++++++++++++++++
>  server/lib/cimi/models.rb                          |  10 ++
>  server/lib/cimi/models/base.rb                     |   4 +-
>  server/lib/cimi/models/collection.rb               |   3 +
>  server/lib/cimi/models/system.rb                   |  78 ++++++++
>  server/lib/cimi/models/system_address.rb           |  90 ++++++++++
>  server/lib/cimi/models/system_forwarding_group.rb  |  90 ++++++++++
>  server/lib/cimi/models/system_machine.rb           |  90 ++++++++++
>  server/lib/cimi/models/system_network.rb           |  90 ++++++++++
>  server/lib/cimi/models/system_system.rb            |  32 ++++
>  server/lib/cimi/models/system_template.rb          |  66 +++++++
>  server/lib/cimi/models/system_volume.rb            |  90 ++++++++++
>  .../drivers/mock/data/cimi/system/system1.json     |  12 ++
>  .../mock/data/cimi/system_template/template1.json  |  27 +++
>  server/lib/deltacloud/drivers/mock/mock_client.rb  |   2 +
>  .../drivers/mock/mock_driver_cimi_methods.rb       |  27 +++
>  19 files changed, 981 insertions(+), 4 deletions(-)
>  create mode 100644 server/lib/cimi/collections/system_templates.rb
>  create mode 100644 server/lib/cimi/collections/systems.rb
>  create mode 100644 server/lib/cimi/models/system.rb
>  create mode 100644 server/lib/cimi/models/system_address.rb
>  create mode 100644 server/lib/cimi/models/system_forwarding_group.rb
>  create mode 100644 server/lib/cimi/models/system_machine.rb
>  create mode 100644 server/lib/cimi/models/system_network.rb
>  create mode 100644 server/lib/cimi/models/system_system.rb
>  create mode 100644 server/lib/cimi/models/system_template.rb
>  create mode 100644 server/lib/cimi/models/system_volume.rb
>  create mode 100644
> server/lib/deltacloud/drivers/mock/data/cimi/system/system1.json
>  create mode 100644
> server/lib/deltacloud/drivers/mock/data/cimi/system_template/templat
> e1.json
> 
> diff --git a/server/lib/cimi/collections/addresses.rb
> b/server/lib/cimi/collections/addresses.rb
> index 9ea1764..a51e658 100644
> --- a/server/lib/cimi/collections/addresses.rb
> +++ b/server/lib/cimi/collections/addresses.rb
> @@ -20,7 +20,7 @@ module CIMI::Collections
> 
>      collection :addresses do
> 
> -      description 'An Address represents an IP address, and its
> associated metdata, for a particular Network.'
> +      description 'An Address represents an IP address, and its
> associated metadata, for a particular Network.'
> 
>        operation :index, :with_capability => :addresses do
>          description 'List all Addresses in the AddressCollection'
> diff --git a/server/lib/cimi/collections/machines.rb
> b/server/lib/cimi/collections/machines.rb
> index 5718f46..9a71bb1 100644
> --- a/server/lib/cimi/collections/machines.rb
> +++ b/server/lib/cimi/collections/machines.rb
> @@ -85,7 +85,7 @@ module CIMI::Collections
>        end
> 
>        action :restart, :with_capability => :reboot_instance do
> -        description "Start specific machine."
> +        description "Restart specific machine."
>          param :id,          :string,    :required
>          control do
>            machine = Machine.find(params[:id], self)
> diff --git a/server/lib/cimi/collections/system_templates.rb
> b/server/lib/cimi/collections/system_templates.rb
> new file mode 100644
> index 0000000..88fbe30
> --- /dev/null
> +++ b/server/lib/cimi/collections/system_templates.rb
> @@ -0,0 +1,72 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed
with
> +# this work for additional information regarding copyright ownership.
> The
> +# ASF licenses this file to you under the Apache License, Version 2.0
> (the
> +# "License"); you may not use this file except in compliance with the
> +# License.  You may obtain a copy of the License at
> +#
> +#       http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> WITHOUT
> +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See
> the
> +# License for the specific language governing permissions and
> limitations
> +# under the License.
> +
> +module CIMI::Collections
> +  class SystemTemplates < Base
> +
> +    set :capability, lambda { |t| true }
> +
> +    collection :system_templates do
> +
> +      operation :index do
> +        description "List all system templates"
> +        control do
> +          system_templates =
> CIMI::Model::SystemTemplate.list(self).select_by(params['$select'])
> +          respond_to do |format|
> +            format.xml { system_templates.to_xml }
> +            format.json { system_templates.to_json }
> +          end
> +        end
> +      end
> +
> +      operation :show do
> +        description "Show specific system template"
> +        control do
> +          system_template =
> CIMI::Model::SystemTemplate.find(params[:id], self)
> +          respond_to do |format|
> +            format.xml { system_template.to_xml }
> +            format.json { system_template.to_json }
> +          end
> +        end
> +      end
> +
> +      operation :create do
> +        description "Create new system template"
> +        control do
> +          if grab_content_type(request.content_type, request.body)
> == :json
> +            new_system_template =
> CIMI::Model::SystemTemplate.create_from_json(request.body.read, self)
> +          else
> +            new_system_template =
> CIMI::Model::SystemTemplate.create_from_xml(request.body.read, self)
> +          end
> +          headers_for_create new_system_template
> +          respond_to do |format|
> +            format.json { new_system_template.to_json }
> +            format.xml { new_system_template.to_xml }
> +          end
> +        end
> +      end
> +
> +      operation :destroy do
> +        description "Delete a specified system template"
> +        control do
> +          CIMI::Model::SystemTemplate.delete!(params[:id], self)
> +          no_content_with_status(200)
> +        end
> +      end
> +
> +    end
> +
> +  end
> +end
> diff --git a/server/lib/cimi/collections/systems.rb
> b/server/lib/cimi/collections/systems.rb
> new file mode 100644
> index 0000000..250b1d2
> --- /dev/null
> +++ b/server/lib/cimi/collections/systems.rb
> @@ -0,0 +1,198 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed
with
> +# this work for additional information regarding copyright ownership.
> The
> +# ASF licenses this file to you under the Apache License, Version 2.0
> (the
> +# "License"); you may not use this file except in compliance with the
> +# License.  You may obtain a copy of the License at
> +#
> +#       http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> WITHOUT
> +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See
> the
> +# License for the specific language governing permissions and
> limitations
> +# under the License.
> +
> +module CIMI::Collections
> +  class Systems < Base
> +
> +    set :capability, lambda { |m| driver.respond_to? m }
> +
> +    collection :systems do
> +      description 'List all systems'
> +
> +      operation :index, :with_capability => :systems do
> +        description "List all systems"
> +        control do
> +          systems =
> System.list(self).select_by(params['$select']).filter_by(params['$fi
> lter'])
> +          respond_to do |format|
> +            format.xml { systems.to_xml }
> +            format.json { systems.to_json }
> +          end
> +        end
> +      end
> +
> +      operation :show, :with_capability => :system do
> +        description "Show specific system."
> +        control do
> +          system = System.find(params[:id], self)
> +          respond_to do |format|
> +            format.xml { system.to_xml }
> +            format.json { system.to_json }
> +          end
> +        end
> +      end
> +
> +      operation :create, :with_capability => :create_system do
> +        description "Create a new System entity."
> +        control do
> +          if grab_content_type(request.content_type, request.body)
> == :json
> +            new_system = System.create_from_json(request.body.read,
> self)
> +          else
> +            new_system = System.create_from_xml(request.body.read,
> self)
> +          end
> +          headers_for_create new_system
> +          respond_to do |format|
> +            format.json { new_system.to_json }
> +            format.xml { new_system.to_xml }
> +          end
> +        end
> +      end
> +
> +      operation :destroy, :with_capability => :destroy_system do
> +        description "Delete a specified system."
> +        control do
> +          System.delete!(params[:id], self)
> +          no_content_with_status(200)
> +        end
> +      end
> +
> +      action :stop, :with_capability => :stop_system do
> +        description "Stop specific system."
> +        param :id,          :string,    :required
> +        control do
> +          system = System.find(params[:id], self)
> +          if grab_content_type(request.content_type, request.body)
> == :json
> +            action = Action.from_json(request.body.read)
> +          else
> +            action = Action.from_xml(request.body.read)
> +          end
> +          system.perform(action, self) do |operation|
> +            no_content_with_status(202) if operation.success?
> +            # Handle errors using operation.failure?
> +          end
> +        end
> +      end
> +
> +      action :restart, :with_capability => :reboot_system do
> +        description "Restart specific system."
> +        param :id,          :string,    :required
> +        control do
> +          system = System.find(params[:id], self)
> +          if  grab_content_type(request.content_type, request.body)
> == :json
> +            action =
> Action.from_json(request.body.read.gsub("restart", "reboot"))
> +          else
> +            action =
> Action.from_xml(request.body.read.gsub("restart", "reboot"))
> +          end
> +          system.perform(action, self) do |operation|
> +            no_content_with_status(202) if operation.success?
> +            # Handle errors using operation.failure?
> +          end
> +        end
> +      end
> +
> +      action :start, :with_capability => :start_system do
> +        description "Start specific system."
> +        param :id,          :string,    :required
> +        control do
> +          system = System.find(params[:id], self)
> +          if  grab_content_type(request.content_type, request.body)
> == :json
> +            action = Action.from_json(request.body.read)
> +          else
> +            action = Action.from_xml(request.body.read)
> +          end
> +          system.perform(action, self) do |operation|
> +            no_content_with_status(202) if operation.success?
> +            # Handle errors using operation.failure?
> +          end
> +        end
> +      end
> +
> +      action :pause, :with_capability => :pause_system do
> +        description "Pause specific system."
> +        param :id,          :string,    :required
> +        control do
> +          system = System.find(params[:id], self)
> +          if  grab_content_type(request.content_type, request.body)
> == :json
> +            action = Action.from_json(request.body.read)
> +          else
> +            action = Action.from_xml(request.body.read)
> +          end
> +          system.perform(action, self) do |operation|
> +            no_content_with_status(202) if operation.success?
> +            # Handle errors using operation.failure?
> +          end
> +        end
> +      end
> +
> +      action :suspend, :with_capability => :suspend_system do
> +        description "Suspend specific system."
> +        param :id,          :string,    :required
> +        control do
> +          system = System.find(params[:id], self)
> +          if  grab_content_type(request.content_type, request.body)
> == :json
> +            action = Action.from_json(request.body.read)
> +          else
> +            action = Action.from_xml(request.body.read)
> +          end
> +          system.perform(action, self) do |operation|
> +            no_content_with_status(202) if operation.success?
> +            # Handle errors using operation.failure?
> +          end
> +        end
> +      end
> +
> +      #use rabbit subcollections for volumes index/show:
> +      collection :volumes, :with_id => :vol_id do
> +
> +        operation :index, :with_capability => :storage_volumes do
> +          description "Retrieve the System's SystemVolumeCollection"
> +          control do
> +            volumes =
> CIMI::Model::SystemVolume.collection_for_instance(params[:id], self)
> +            respond_to do |format|
> +              format.json {volumes.to_json}
> +              format.xml  {volumes.to_xml}
> +            end
> +          end
> +        end
> +
> +        operation :show, :with_capability => :storage_volumes do
> +          description "Retrieve a System's specific SystemVolume"
> +          control do
> +            volume = CIMI::Model::SystemVolume.find(params[:id],
self,
> params[:vol_id])
> +            respond_to do |format|
> +              format.json {volume.to_json}
> +              format.xml  {volume.to_xml}
> +            end
> +          end
> +        end
> +
> +        operation :destroy, :with_capability
> => :detach_storage_volume do
> +          description "Remove/detach a volume from the System's
> SystemVolumeCollection"
> +          control do
> +            system_volume =
> CIMI::Model::SystemVolume.find(params[:id], self, params[:vol_id])
> +            location = system_volume.initial_location
> +            system_volumes = System.detach_volume(params[:vol_id],
> location, self)
> +            respond_to do |format|
> +              format.json{ system_volumes.to_json}
> +              format.xml{ system_volumes.to_xml}
> +            end
> +          end
> +        end
> +
> +      end
> +
> +    end
> +
> +  end
> +end
> diff --git a/server/lib/cimi/models.rb b/server/lib/cimi/models.rb
> index 20c0ef1..ec1a1c9 100644
> --- a/server/lib/cimi/models.rb
> +++ b/server/lib/cimi/models.rb
> @@ -81,3 +81,13 @@ require_relative './models/address'
>  require_relative './models/address_template'
>  require_relative './models/forwarding_group'
>  require_relative './models/forwarding_group_template'
> +require_relative './models/system_system'
> +require_relative './models/system_volume'
> +require_relative './models/system_machine'
> +require_relative './models/system_template'
> +#require_relative './models/system_credential'
> +#require_relative './models/system_network_port'
> +require_relative './models/system_network'
> +require_relative './models/system_address'
> +require_relative './models/system_forwarding_group'
> +require_relative './models/system'
> diff --git a/server/lib/cimi/models/base.rb
> b/server/lib/cimi/models/base.rb
> index c74b8c3..2c49c75 100644
> --- a/server/lib/cimi/models/base.rb
> +++ b/server/lib/cimi/models/base.rb
> @@ -63,7 +63,7 @@ require_relative '../helpers/database_helper'
>  #   [struct(name, opts, &block)]
>  #     A structured subobject; the block defines the schema of the
>  #     subobject. The +:content+ option can be used to specify the
> attribute
> -#     that should receive the content of hte corresponding XML
element
> +#     that should receive the content of the corresponding XML
element
>  #   [array(name, opts, &block)]
>  #     An array of structured subobjects; the block defines the schema
> of
>  #     the subobjects.
> @@ -86,7 +86,7 @@ module CIMI::Model
>      #
>      # Common attributes for all resources
>      #
> -    text :id, :name, :description, :created
> +    text :id, :name, :description, :created, :updated
>      hash :property
>    end
> 
> diff --git a/server/lib/cimi/models/collection.rb
> b/server/lib/cimi/models/collection.rb
> index f36c081..17ad95b 100644
> --- a/server/lib/cimi/models/collection.rb
> +++ b/server/lib/cimi/models/collection.rb
> @@ -121,7 +121,9 @@ module CIMI::Model
> 
>      # Return a collection of entities
>      def list(context)
> +	  puts "list(#{context}) called."
>        entries = find(:all, context)
> +	  puts "entries: #{entries}"
>        desc = "#{self.name.split("::").last} Collection for the
> #{context.driver.name.capitalize} driver"
>        acts_as_root_entity unless collection_class
>        id = context.send("#{collection_class.entry_name}_url")
> @@ -135,6 +137,7 @@ module CIMI::Model
>          url = context.send(cimi_create)
>          ops << { :rel => "add", :href => url }
>        end
> +	  puts "entries: #{entries}"
>        collection_class.new(:id => id,
>                             :count => entries.size,
>                             :entries => entries,
> diff --git a/server/lib/cimi/models/system.rb
> b/server/lib/cimi/models/system.rb
> new file mode 100644
> index 0000000..619e7a9
> --- /dev/null
> +++ b/server/lib/cimi/models/system.rb
> @@ -0,0 +1,78 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed
with
> +# this work for additional information regarding copyright ownership.
> The
> +# ASF licenses this file to you under the Apache License, Version 2.0
> (the
> +# "License"); you may not use this file except in compliance with the
> +# License.  You may obtain a copy of the License at
> +#
> +#       http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> WITHOUT
> +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See
> the
> +# License for the specific language governing permissions and
> limitations
> +# under the License.
> +
> +class CIMI::Model::System < CIMI::Model::Base
> +
> +  acts_as_root_entity
> +
> +  text :state
> +
> +  collection :systems, :class => CIMI::Model::SystemSystem
> +  collection :machines, :class => CIMI::Model::SystemMachine
> +#  collection :credentials, :class => CIMI::Model::SystemCredential
> +  collection :volumes, :class => CIMI::Model::SystemVolume
> +  collection :networks, :class => CIMI::Model::SystemNetwork
> +#  collection :network_ports, :class =>
> CIMI::Model::SystemNetworkPort
> +  collection :addresses, :class => CIMI::Model::SystemAddress
> +  collection :forwarding_groups, :class =>
> CIMI::Model::SystemForwardingGroup
> +
> +  array :meters do
> +    scalar :href
> +  end
> +
> +  href :event_log
> +
> +  array :operations do
> +    scalar :rel, :href
> +  end
> +
> +  def self.find(id, context)
> +  puts "system#self.find called"
> +    systems = []
> +    if id == :all
> +      systems = context.driver.systems(context.credentials,
> {:env=>context})
> +puts "systems from driver #{systems.size}"
> +    else
> +      system = context.driver.system(context.credentials,
> {:env=>context, :id=>id})
> +      raise CIMI::Model::NotFound unless system
> +      system
> +    end
> +  end
> +
> +  def self.create_from_json(body, context)
> +    #todo: mfojtik and lutter are refactoring this mechanism
> +  end
> +
> +  def self.create_from_xml(body, context)
> +      #todo: mfojtik and lutter are refactoring this mechanism
> +  end
> +
> +  def perform(action, context, &block)
> +    begin
> +      if context.driver.send(:"#{action.name}_system",
> context.credentials, self.id.split("/").last)
> +        block.callback :success
> +      else
> +        raise "Operation failed to execute on given System"
> +      end
> +    rescue => e
> +      block.callback :failure, e.message
> +    end
> +  end
> +
> +  def self.delete!(id, context)
> +    context.driver.destroy_system(context.credentials, id)
> +  end
> +
> +end
> diff --git a/server/lib/cimi/models/system_address.rb
> b/server/lib/cimi/models/system_address.rb
> new file mode 100644
> index 0000000..a4c88bf
> --- /dev/null
> +++ b/server/lib/cimi/models/system_address.rb
> @@ -0,0 +1,90 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed
with
> +# this work for additional information regarding copyright ownership.
> The
> +# ASF licenses this file to you under the Apache License, Version 2.0
> (the
> +# "License"); you may not use this file except in compliance with the
> +# License.  You may obtain a copy of the License at
> +#
> +#       http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> WITHOUT
> +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See
> the
> +# License for the specific language governing permissions and
> limitations
> +# under the License.
> +
> +class CIMI::Model::SystemAddress < CIMI::Model::Base
> +
> +  href :address
> +
> +  array :operations do
> +    scalar :rel, :href
> +  end
> +
> +  def self.find(instance_id, context, id=:all)
> +    puts "system_address#self.find called"
> +    if id == :all
> +      addresses =
> context.driver.storage_addresses(context.credentials)
> +      addresses.inject([]) do |attached, vol|
> +        id = context.system_url(instance_id)+"/addresses/#{vol.id}"
> +        attached <<  self.new(
> +          :id => id,
> +          :name => vol.id,
> +          :description => "SystemAddress #{vol.id} for System
> #{instance_id}",
> +          :created => vol.created.nil? ? nil :
> Time.parse(vol.created).xmlschema,
> +          :initial_location => vol.device,
> +          :address => {:href=>context.address_url(vol.id)},
> +          :operations => [{:href=>id, :rel => "delete" }]
> +          ) if vol.instance_id == instance_id
> +        attached
> +      end
> +    else
> +      vol = context.driver.storage_address(context.credentials,
> {:id=>id})
> +      id = context.system_url(instance_id)+"/addresses/#{vol.id}"
> +      raise CIMI::Model::NotFound unless vol.instance_id ==
> instance_id
> +      self.new(
> +        :id => id,
> +        :name => vol.id,
> +        :description => "SystemAddress #{vol.id} for System
> #{instance_id}",
> +        :created => vol.created.nil? ? nil :
> Time.parse(vol.created).xmlschema,
> +        :initial_location => vol.device,
> +        :address => {:href=>context.address_url(vol.id)},
> +        :operations => [{:href=>id, :rel => "delete" }]
> +        )
> +    end
> +  end
> +
> +  def self.find_to_attach_from_xml(xml_in, context)
> +    xml = XmlSimple.xml_in(xml_in)
> +    vol_id = xml["address"].first["href"].split("/").last
> +    location = xml["initialLocation"].first.strip
> +    [vol_id, location]
> +  end
> +
> +  def self.find_to_attach_from_json(json_in, context)
> +    json = JSON.parse(json_in)
> +    vol_id = json["address"]["href"].split("/").last
> +    location = json["initialLocation"]
> +    [vol_id, location]
> +  end
> +
> +
> +  def self.collection_for_instance(instance_id, context)
> +    system_addresses = self.find(instance_id, context)
> +    addresses_url = context.url("/systems/#{instance_id}/addresses")
> +    unless CIMI::Model.const_defined?('SystemAddressCollection')
> +      collection_class = CIMI::Model::Collection.generate(self)
> +    else
> +      collection_class = CIMI::Model::SystemAddressCollection
> +    end
> +    collection_class.new(
> +      :id => addresses_url,
> +      :name => 'default',
> +      :count => system_addresses.size,
> +      :description => "Address collection for System #{instance_id}",
> +      :entries => system_addresses,
> +      :operations => [{ :href =>
> addresses_url.singularize+"_attach", :rel => "add" }]
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/models/system_forwarding_group.rb
> b/server/lib/cimi/models/system_forwarding_group.rb
> new file mode 100644
> index 0000000..95c148c
> --- /dev/null
> +++ b/server/lib/cimi/models/system_forwarding_group.rb
> @@ -0,0 +1,90 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed
with
> +# this work for additional information regarding copyright ownership.
> The
> +# ASF licenses this file to you under the Apache License, Version 2.0
> (the
> +# "License"); you may not use this file except in compliance with the
> +# License.  You may obtain a copy of the License at
> +#
> +#       http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> WITHOUT
> +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See
> the
> +# License for the specific language governing permissions and
> limitations
> +# under the License.
> +
> +class CIMI::Model::SystemForwardingGroup < CIMI::Model::Base
> +
> +  href :forwarding_group
> +
> +  array :operations do
> +    scalar :rel, :href
> +  end
> +
> +  def self.find(instance_id, context, id=:all)
> +    puts "system_machine#self.find called"
> +    if id == :all
> +      forwarding_groups =
> context.driver.storage_forwarding_groups(context.credentials)
> +      forwarding_groups.inject([]) do |attached, vol|
> +        id =
> context.system_url(instance_id)+"/forwarding_groups/#{vol.id}"
> +        attached <<  self.new(
> +          :id => id,
> +          :name => vol.id,
> +          :description => "SystemForwardingGroup #{vol.id} for System
> #{instance_id}",
> +          :created => vol.created.nil? ? nil :
> Time.parse(vol.created).xmlschema,
> +          :initial_location => vol.device,
> +          :forwarding_group =>
> {:href=>context.forwarding_group_url(vol.id)},
> +          :operations => [{:href=>id, :rel => "delete" }]
> +          ) if vol.instance_id == instance_id
> +        attached
> +      end
> +    else
> +      vol =
> context.driver.storage_forwarding_group(context.credentials,
> {:id=>id})
> +      id =
> context.system_url(instance_id)+"/forwarding_groups/#{vol.id}"
> +      raise CIMI::Model::NotFound unless vol.instance_id ==
> instance_id
> +      self.new(
> +        :id => id,
> +        :name => vol.id,
> +        :description => "SystemForwardingGroup #{vol.id} for System
> #{instance_id}",
> +        :created => vol.created.nil? ? nil :
> Time.parse(vol.created).xmlschema,
> +        :initial_location => vol.device,
> +        :forwarding_group =>
> {:href=>context.forwarding_group_url(vol.id)},
> +        :operations => [{:href=>id, :rel => "delete" }]
> +        )
> +    end
> +  end
> +
> +  def self.find_to_attach_from_xml(xml_in, context)
> +    xml = XmlSimple.xml_in(xml_in)
> +    vol_id = xml["forwarding_group"].first["href"].split("/").last
> +    location = xml["initialLocation"].first.strip
> +    [vol_id, location]
> +  end
> +
> +  def self.find_to_attach_from_json(json_in, context)
> +    json = JSON.parse(json_in)
> +    vol_id = json["forwarding_group"]["href"].split("/").last
> +    location = json["initialLocation"]
> +    [vol_id, location]
> +  end
> +
> +
> +  def self.collection_for_instance(instance_id, context)
> +    system_forwarding_groups = self.find(instance_id, context)
> +    forwarding_groups_url =
> context.url("/systems/#{instance_id}/forwarding_groups")
> +    unless
> CIMI::Model.const_defined?('SystemForwardingGroupCollection')
> +      collection_class = CIMI::Model::Collection.generate(self)
> +    else
> +      collection_class =
> CIMI::Model::SystemForwardingGroupCollection
> +    end
> +    collection_class.new(
> +      :id => forwarding_groups_url,
> +      :name => 'default',
> +      :count => system_forwarding_groups.size,
> +      :description => "ForwardingGroup collection for System
> #{instance_id}",
> +      :entries => system_forwarding_groups,
> +      :operations => [{ :href =>
> forwarding_groups_url.singularize+"_attach", :rel => "add" }]
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/models/system_machine.rb
> b/server/lib/cimi/models/system_machine.rb
> new file mode 100644
> index 0000000..5c96ded
> --- /dev/null
> +++ b/server/lib/cimi/models/system_machine.rb
> @@ -0,0 +1,90 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed
with
> +# this work for additional information regarding copyright ownership.
> The
> +# ASF licenses this file to you under the Apache License, Version 2.0
> (the
> +# "License"); you may not use this file except in compliance with the
> +# License.  You may obtain a copy of the License at
> +#
> +#       http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> WITHOUT
> +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See
> the
> +# License for the specific language governing permissions and
> limitations
> +# under the License.
> +
> +class CIMI::Model::SystemMachine < CIMI::Model::Base
> +
> +  href :machine
> +
> +  array :operations do
> +    scalar :rel, :href
> +  end
> +
> +  def self.find(instance_id, context, id=:all)
> +    puts "system_machine#self.find called"
> +    if id == :all
> +      machines =
> context.driver.storage_machines(context.credentials)
> +      machines.inject([]) do |attached, vol|
> +        id = context.system_url(instance_id)+"/machines/#{vol.id}"
> +        attached <<  self.new(
> +          :id => id,
> +          :name => vol.id,
> +          :description => "SystemMachine #{vol.id} for System
> #{instance_id}",
> +          :created => vol.created.nil? ? nil :
> Time.parse(vol.created).xmlschema,
> +          :initial_location => vol.device,
> +          :machine => {:href=>context.machine_url(vol.id)},
> +          :operations => [{:href=>id, :rel => "delete" }]
> +          ) if vol.instance_id == instance_id
> +        attached
> +      end
> +    else
> +      vol = context.driver.storage_machine(context.credentials,
> {:id=>id})
> +      id = context.system_url(instance_id)+"/machines/#{vol.id}"
> +      raise CIMI::Model::NotFound unless vol.instance_id ==
> instance_id
> +      self.new(
> +        :id => id,
> +        :name => vol.id,
> +        :description => "SystemMachine #{vol.id} for System
> #{instance_id}",
> +        :created => vol.created.nil? ? nil :
> Time.parse(vol.created).xmlschema,
> +        :initial_location => vol.device,
> +        :machine => {:href=>context.machine_url(vol.id)},
> +        :operations => [{:href=>id, :rel => "delete" }]
> +        )
> +    end
> +  end
> +
> +  def self.find_to_attach_from_xml(xml_in, context)
> +    xml = XmlSimple.xml_in(xml_in)
> +    vol_id = xml["machine"].first["href"].split("/").last
> +    location = xml["initialLocation"].first.strip
> +    [vol_id, location]
> +  end
> +
> +  def self.find_to_attach_from_json(json_in, context)
> +    json = JSON.parse(json_in)
> +    vol_id = json["machine"]["href"].split("/").last
> +    location = json["initialLocation"]
> +    [vol_id, location]
> +  end
> +
> +
> +  def self.collection_for_instance(instance_id, context)
> +    system_machines = self.find(instance_id, context)
> +    machines_url = context.url("/systems/#{instance_id}/machines")
> +    unless CIMI::Model.const_defined?('SystemMachineCollection')
> +      collection_class = CIMI::Model::Collection.generate(self)
> +    else
> +      collection_class = CIMI::Model::SystemMachineCollection
> +    end
> +    collection_class.new(
> +      :id => machines_url,
> +      :name => 'default',
> +      :count => system_machines.size,
> +      :description => "Machine collection for System #{instance_id}",
> +      :entries => system_machines,
> +      :operations => [{ :href =>
> machines_url.singularize+"_attach", :rel => "add" }]
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/models/system_network.rb
> b/server/lib/cimi/models/system_network.rb
> new file mode 100644
> index 0000000..df3f831
> --- /dev/null
> +++ b/server/lib/cimi/models/system_network.rb
> @@ -0,0 +1,90 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed
with
> +# this work for additional information regarding copyright ownership.
> The
> +# ASF licenses this file to you under the Apache License, Version 2.0
> (the
> +# "License"); you may not use this file except in compliance with the
> +# License.  You may obtain a copy of the License at
> +#
> +#       http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> WITHOUT
> +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See
> the
> +# License for the specific language governing permissions and
> limitations
> +# under the License.
> +
> +class CIMI::Model::SystemNetwork < CIMI::Model::Base
> +
> +  href :network
> +
> +  array :operations do
> +    scalar :rel, :href
> +  end
> +
> +  def self.find(instance_id, context, id=:all)
> +    puts "SystemNetwork#self.find called"
> +    if id == :all
> +      networks =
> context.driver.storage_networks(context.credentials)
> +      networks.inject([]) do |attached, vol|
> +        id = context.system_url(instance_id)+"/networks/#{vol.id}"
> +        attached <<  self.new(
> +          :id => id,
> +          :name => vol.id,
> +          :description => "SystemNetwork #{vol.id} for System
> #{instance_id}",
> +          :created => vol.created.nil? ? nil :
> Time.parse(vol.created).xmlschema,
> +          :initial_location => vol.device,
> +          :network => {:href=>context.network_url(vol.id)},
> +          :operations => [{:href=>id, :rel => "delete" }]
> +          ) if vol.instance_id == instance_id
> +        attached
> +      end
> +    else
> +      vol = context.driver.storage_network(context.credentials,
> {:id=>id})
> +      id = context.system_url(instance_id)+"/networks/#{vol.id}"
> +      raise CIMI::Model::NotFound unless vol.instance_id ==
> instance_id
> +      self.new(
> +        :id => id,
> +        :name => vol.id,
> +        :description => "SystemNetwork #{vol.id} for System
> #{instance_id}",
> +        :created => vol.created.nil? ? nil :
> Time.parse(vol.created).xmlschema,
> +        :initial_location => vol.device,
> +        :network => {:href=>context.network_url(vol.id)},
> +        :operations => [{:href=>id, :rel => "delete" }]
> +        )
> +    end
> +  end
> +
> +  def self.find_to_attach_from_xml(xml_in, context)
> +    xml = XmlSimple.xml_in(xml_in)
> +    vol_id = xml["network"].first["href"].split("/").last
> +    location = xml["initialLocation"].first.strip
> +    [vol_id, location]
> +  end
> +
> +  def self.find_to_attach_from_json(json_in, context)
> +    json = JSON.parse(json_in)
> +    vol_id = json["network"]["href"].split("/").last
> +    location = json["initialLocation"]
> +    [vol_id, location]
> +  end
> +
> +
> +  def self.collection_for_instance(instance_id, context)
> +    system_networks = self.find(instance_id, context)
> +    networks_url = context.url("/systems/#{instance_id}/networks")
> +    unless CIMI::Model.const_defined?('SystemNetworkCollection')
> +      collection_class = CIMI::Model::Collection.generate(self)
> +    else
> +      collection_class = CIMI::Model::SystemNetworkCollection
> +    end
> +    collection_class.new(
> +      :id => networks_url,
> +      :name => 'default',
> +      :count => system_networks.size,
> +      :description => "Network collection for System #{instance_id}",
> +      :entries => system_networks,
> +      :operations => [{ :href =>
> networks_url.singularize+"_attach", :rel => "add" }]
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/models/system_system.rb
> b/server/lib/cimi/models/system_system.rb
> new file mode 100644
> index 0000000..41f9ae7
> --- /dev/null
> +++ b/server/lib/cimi/models/system_system.rb
> @@ -0,0 +1,32 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed
with
> +# this work for additional information regarding copyright ownership.
> The
> +# ASF licenses this file to you under the Apache License, Version 2.0
> (the
> +# "License"); you may not use this file except in compliance with the
> +# License.  You may obtain a copy of the License at
> +#
> +#       http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> WITHOUT
> +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See
> the
> +# License for the specific language governing permissions and
> limitations
> +# under the License.
> +
> +class CIMI::Model::SystemSystem < CIMI::Model::Base
> +
> +  href :system
> +
> +  array :operations do
> +    scalar :rel, :href
> +  end
> +
> +  def self.find(instance_id, context, id=:all)
> +    puts "SystemSystem#self.find called"
> +  end
> +
> +
> +  def self.collection_for_instance(instance_id, context)
> +  end
> +
> +end
> diff --git a/server/lib/cimi/models/system_template.rb
> b/server/lib/cimi/models/system_template.rb
> new file mode 100644
> index 0000000..9cfc64c
> --- /dev/null
> +++ b/server/lib/cimi/models/system_template.rb
> @@ -0,0 +1,66 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed
with
> +# this work for additional information regarding copyright ownership.
> The
> +# ASF licenses this file to you under the Apache License, Version 2.0
> (the
> +# "License"); you may not use this file except in compliance with the
> +# License.  You may obtain a copy of the License at
> +#
> +#       http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> WITHOUT
> +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See
> the
> +# License for the specific language governing permissions and
> limitations
> +# under the License.
> +
> +class CIMI::Model::SystemTemplate < CIMI::Model::Base
> +
> +  acts_as_root_entity
> +
> +  array :component_descriptors do
> +    text :name, :description
> +    hash :properties
> +    text :type
> +    scalar :component_template #or :class => CIMI::Model::Base ?
> +    text :quantity
> +  end
> +
> +  array :meter_templates do
> +    scalar :href
> +  end
> +
> +  href :event_log_template
> +
> +  array :operations do
> +    scalar :rel, :href
> +  end
> +
> +  class << self
> +    def find(id, context)
> +  puts "system_template#self.find called"
> +      templates = []
> +      if id == :all
> +        templates =
> context.driver.system_templates(context.credentials, {:env=>context})
> +puts "Templates from driver #{templates.size}"
> +      else
> +        template =
> context.driver.system_templates(context.credentials,
> {:env=>context, :id=>id})
> +        raise CIMI::Model::NotFound unless template
> +        template
> +      end
> +    end
> +
> +    def create_from_json(body, context)
> +      #todo: mfojtik and lutter are refactoring this mechanism
> +    end
> +
> +    def create_from_xml(body, context)
> +      #todo: mfojtik and lutter are refactoring this mechanism
> +    end
> +
> +    def delete!(id, context)
> +      context.driver.destroy_system_template(context.credentials,
> id)
> +    end
> +
> +  end
> +
> +end
> diff --git a/server/lib/cimi/models/system_volume.rb
> b/server/lib/cimi/models/system_volume.rb
> new file mode 100644
> index 0000000..3433402
> --- /dev/null
> +++ b/server/lib/cimi/models/system_volume.rb
> @@ -0,0 +1,90 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed
with
> +# this work for additional information regarding copyright ownership.
> The
> +# ASF licenses this file to you under the Apache License, Version 2.0
> (the
> +# "License"); you may not use this file except in compliance with the
> +# License.  You may obtain a copy of the License at
> +#
> +#       http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> WITHOUT
> +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See
> the
> +# License for the specific language governing permissions and
> limitations
> +# under the License.
> +
> +class CIMI::Model::SystemVolume < CIMI::Model::Base
> +
> +  href :volume
> +
> +  array :operations do
> +    scalar :rel, :href
> +  end
> +
> +  def self.find(instance_id, context, id=:all)
> +    puts "system_volume#self.find called"
> +    if id == :all
> +      volumes = context.driver.storage_volumes(context.credentials)
> +      volumes.inject([]) do |attached, vol|
> +        id = context.system_url(instance_id)+"/volumes/#{vol.id}"
> +        attached <<  self.new(
> +          :id => id,
> +          :name => vol.id,
> +          :description => "SystemVolume #{vol.id} for System
> #{instance_id}",
> +          :created => vol.created.nil? ? nil :
> Time.parse(vol.created).xmlschema,
> +          :initial_location => vol.device,
> +          :volume => {:href=>context.volume_url(vol.id)},
> +          :operations => [{:href=>id, :rel => "delete" }]
> +          ) if vol.instance_id == instance_id
> +        attached
> +      end
> +    else
> +      vol = context.driver.storage_volume(context.credentials,
> {:id=>id})
> +      id = context.system_url(instance_id)+"/volumes/#{vol.id}"
> +      raise CIMI::Model::NotFound unless vol.instance_id ==
> instance_id
> +      self.new(
> +        :id => id,
> +        :name => vol.id,
> +        :description => "SystemVolume #{vol.id} for System
> #{instance_id}",
> +        :created => vol.created.nil? ? nil :
> Time.parse(vol.created).xmlschema,
> +        :initial_location => vol.device,
> +        :volume => {:href=>context.volume_url(vol.id)},
> +        :operations => [{:href=>id, :rel => "delete" }]
> +        )
> +    end
> +  end
> +
> +  def self.find_to_attach_from_xml(xml_in, context)
> +    xml = XmlSimple.xml_in(xml_in)
> +    vol_id = xml["volume"].first["href"].split("/").last
> +    location = xml["initialLocation"].first.strip
> +    [vol_id, location]
> +  end
> +
> +  def self.find_to_attach_from_json(json_in, context)
> +    json = JSON.parse(json_in)
> +    vol_id = json["volume"]["href"].split("/").last
> +    location = json["initialLocation"]
> +    [vol_id, location]
> +  end
> +
> +
> +  def self.collection_for_instance(instance_id, context)
> +    system_volumes = self.find(instance_id, context)
> +    volumes_url = context.url("/systems/#{instance_id}/volumes")
> +    unless CIMI::Model.const_defined?('SystemVolumeCollection')
> +      collection_class = CIMI::Model::Collection.generate(self)
> +    else
> +      collection_class = CIMI::Model::SystemVolumeCollection
> +    end
> +    collection_class.new(
> +      :id => volumes_url,
> +      :name => 'default',
> +      :count => system_volumes.size,
> +      :description => "Volume collection for System #{instance_id}",
> +      :entries => system_volumes,
> +      :operations => [{ :href =>
> volumes_url.singularize+"_attach", :rel => "add" }]
> +    )
> +  end
> +
> +end
> diff --git
> a/server/lib/deltacloud/drivers/mock/data/cimi/system/system1.json
> b/server/lib/deltacloud/drivers/mock/data/cimi/system/system1.json
> new file mode 100644
> index 0000000..450233d
> --- /dev/null
> +++
> b/server/lib/deltacloud/drivers/mock/data/cimi/system/system1.json
> @@ -0,0 +1,12 @@
> +{ "id": "http://cimi.example.org/systems/template1",
> +  "name": "system1",
> +  "description": "the first system",
> +  "created": "Fri Feb 08 15:25:41 EET 2013",
> +  "state": "STOPPED",
> +  "machines": { "href":
> "http://cimi.example.org/systems/87654/machines"},
> +  "networks": { "href":
> "http://cimi.example.org/systems/87654/networks"},
> +  "operations": [
> +    { "rel": "edit", "href":
> "http://cimi.example.org/networks/network1" },
> +    { "rel": "delete", "href":
> "http://cimi.example.org/networks/network1" }
> +  ]
> +}
> diff --git
> a/server/lib/deltacloud/drivers/mock/data/cimi/system_template/templ
> ate1.json
> b/server/lib/deltacloud/drivers/mock/data/cimi/system_template/templ
> ate1.json
> new file mode 100644
> index 0000000..0672df1
> --- /dev/null
> +++
> b/server/lib/deltacloud/drivers/mock/data/cimi/system_template/templ
> ate1.json
> @@ -0,0 +1,27 @@
> +{ "id": "http://cimi.example.org/system_templates/template1",
> +  "name": "system template 1",
> +  "description": "A mock system template",
> +  "created": "Fri Feb 08 12:15:15 EET 2013",
> +  "componentDescriptors": [
> +    { "name": "my machine",
> +      "description": "an inline mock machine template",
> +      "type": "http://schemas.dmtf.org/cimi/1/Machine",
> +      "machineTemplate": {
> +        "name": "machine in mock system",
> +        "description": "machine in ststem",
> +        "machineConfig": "http://example.com/configs/m1-small",
> +        "machineImage": "http://example.com/images/img1"
> +      }
> +    },
> +    { "name": "my network",
> +      "description": "a reference to an existing mock network
template",
> +      "type": "http://schemas.dmtf.org/cimi/1/Network",
> +      "networkTemplate": {
> +        "href":
> "http://cimi.example.org/network_templates/template1"
> +      }
> +    }
> +  ],
> +  "operations": [
> +    { "rel": "edit", "href":
> "http://cimi.example.org/network_templates/template1" },
> +    { "rel": "delete", "href":
> "http://cimi.example.org/network_templates/template1" }]
> +}
> diff --git a/server/lib/deltacloud/drivers/mock/mock_client.rb
> b/server/lib/deltacloud/drivers/mock/mock_client.rb
> index 449b6a8..d7796a2 100644
> --- a/server/lib/deltacloud/drivers/mock/mock_client.rb
> +++ b/server/lib/deltacloud/drivers/mock/mock_client.rb
> @@ -92,7 +92,9 @@ module Deltacloud::Drivers::Mock
>      end
> 
>      def load_all_cimi(model_name)
> +    puts "dir: #{File::join(cimi_dir(model_name), "*.json")}"
>          model_files = Dir[File::join(cimi_dir(model_name), "*.json")]
> +        puts "model_files: #{model_files}"
>          model_files.map{|f| File.read(f)}
>      end
> 
> diff --git
> a/server/lib/deltacloud/drivers/mock/mock_driver_cimi_methods.rb
> b/server/lib/deltacloud/drivers/mock/mock_driver_cimi_methods.rb
> index 336f77b..57ea5ef 100644
> --- a/server/lib/deltacloud/drivers/mock/mock_driver_cimi_methods.rb
> +++ b/server/lib/deltacloud/drivers/mock/mock_driver_cimi_methods.rb
> @@ -20,6 +20,31 @@
>  module Deltacloud::Drivers::Mock
> 
>    class MockDriver < Deltacloud::BaseDriver
> +
> +    def systems(credentials, opts={})
> +      check_credentials(credentials)
> +      if opts[:id].nil?
> +        systems = @client.load_all_cimi(:system).map{|sys|
> CIMI::Model::System.from_json(sys)}
> +        systems.map{|sys|convert_cimi_mock_urls(:system,
> sys ,opts[:env])}.flatten
> +      else
> +        system =
> CIMI::Model::System.from_json(@client.load_cimi(:system, opts[:id]))
> +        convert_cimi_mock_urls(:system, system, opts[:env])
> +      end
> +    end
> +
> +    def system_templates(credentials, opts={})
> +      check_credentials(credentials)
> +      puts "reached mock's system_templates with opts: #{opts}"
> +      if opts[:id].nil?
> +        system_templates =
> @client.load_all_cimi(:system_template).map{|sys_templ|
> CIMI::Model::SystemTemplate.from_json(sys_templ)}
> +        puts "raw templates from files: #{system_templates}"
> +
> system_templates.map{|sys_templ|convert_cimi_mock_urls(:system_templ
> ate, sys_templ, opts[:env])}.flatten
> +      else
> +        system_template =
> CIMI::Model::SystemTemplate.from_json(@client.load_cimi(:system_temp
> late, opts[:id]))
> +        convert_cimi_mock_urls(:system_template, system_template,
> opts[:env])
> +      end
> +    end
> +
>      def networks(credentials, opts={})
>        check_credentials(credentials)
>        if opts[:id].nil?
> @@ -138,6 +163,8 @@ module Deltacloud::Drivers::Mock
>              end
>          end
>        end
> +      puts "cimi_object.name = #{cimi_object.name}"
> +      puts "context = #{context}"
>        object_url = context.send(:"#{model_name}_url",
> cimi_object.name)
>        cimi_object.id=object_url
>        cimi_object.operations.each{|op| op.href=object_url  }
> --
> 1.8.0.msysgit.0
> 
> 



Mime
View raw message