I'm looking for help with this one.

I'm trying to support the listing of a system_template with a
machine_template for a machine with an attached volume of 10 GB.
I added volumeTemplates to the 2nd machine in the mock json data file in
the patch:

    { "name": "my second machine",
      "description": "another inline mock machine template",
      "type": "http://schemas.dmtf.org/cimi/1/Machine";,
      "machineTemplate": {
        "name": "machine in mock system",
        "description": "machine in system",
        "machineConfig": { "href": "http://example.com/configs/m1-small";
},
        "machineImage": { "href": "http://example.com/images/img1"; },
        "volumeTemplates": [
          { "volumeConfig": {"capacity": 10240} }
        ]
      }
    },

Then run d:\>curl --user mockuser:mockpassword
http://localhost:3001/cimi/system_templates/template1?format=xml
The result has the following for the second machine:

    <machineTemplate>
      <name>machine in mock system</name>
      <description>machine in system</description>
      <machineConfig href="http://example.com/configs/m1-small"; />
      <machineImage href="http://example.com/images/img1"; />
      <volumeTemplate></volumeTemplate>
    </machineTemplate>

No volumeConfig element with capacity info. Why?

Cheers,
Dies Koper


> -----Original Message-----
> From: [email protected] [mailto:[email protected]]
> Sent: Monday, 25 February 2013 11:38 PM
> To: [email protected]
> Subject: [PATCH] added MachineTemplate subcollection of SystemTemplate
> 
> From: Dies Koper <[email protected]>
> 
> ---
>  server/lib/cimi/models/system.rb                   |  4 ++-
>  server/lib/cimi/models/system_template.rb          | 19 ++++++------
>  server/lib/deltacloud/drivers/fgcp/fgcp_client.rb  |  4 +++
>  .../drivers/fgcp/fgcp_driver_cimi_methods.rb       | 36
> ++++++++++++++++++++--
>  .../mock/data/cimi/system_template/template1.json  | 25
> ++++++++++-----
>  .../drivers/mock/mock_driver_cimi_methods.rb       | 32
> +++++++++++++++++++
>  6 files changed, 100 insertions(+), 20 deletions(-)
> 
> diff --git a/server/lib/cimi/models/system.rb
> b/server/lib/cimi/models/system.rb
> index e238259..2d5b656 100644
> --- a/server/lib/cimi/models/system.rb
> +++ b/server/lib/cimi/models/system.rb
> @@ -17,7 +17,9 @@ class CIMI::Model::System < CIMI::Model::Base
> 
>    acts_as_root_entity
> 
> -  text :state
> +  resource_attr :system_template, :required => false, :type => :href
> +
> +  text :state, :required => true
> 
>  #  collection :systems, :class => CIMI::Model::SystemSystem
>  #  collection :machines, :class => CIMI::Model::SystemMachine
> diff --git a/server/lib/cimi/models/system_template.rb
> b/server/lib/cimi/models/system_template.rb
> index 09cd9b0..49e0797 100644
> --- a/server/lib/cimi/models/system_template.rb
> +++ b/server/lib/cimi/models/system_template.rb
> @@ -20,16 +20,17 @@ class CIMI::Model::SystemTemplate <
> CIMI::Model::Base
>    array :component_descriptors do
>      text :name, :description
>      hash :properties
> -    text :type
> +    text :type, :required => true
>      #component_template, comprises:
> -#    struct :machine_template, :class => CIMI::Model::MachineTemplate
> -#    struct :system_template, :class => CIMI::Model::SystemTemplate
> -#    struct :credential_template, :class =>
> CIMI::Model::CredentialTemplate
> -#    struct :volume_template, :class => CIMI::Model::VolumeTemplate
> -#    struct :network_template, :class => CIMI::Model::NetworkTemplate
> -#    struct :network_port_template, :class =>
> CIMI::Model::NetworkPortTemplate
> -#    struct :forwarding_group_template, :class =>
> CIMI::Model::ForwardingGroupTemplate
> -#    struct :address_template, :class => CIMI::Model::AddressTemplate
> +    ref :machine_template, :class => CIMI::Model::MachineTemplate
> +#TODO: add the rest
> +#    ref :system_template, :class => CIMI::Model::SystemTemplate
> +#    ref :credential_template, :class =>
> CIMI::Model::CredentialTemplate
> +#    ref :volume_template, :class => CIMI::Model::VolumeTemplate
> +#    ref :network_template, :class => CIMI::Model::NetworkTemplate
> +#    ref :network_port_template, :class =>
> CIMI::Model::NetworkPortTemplate
> +#    ref :forwarding_group_template, :class =>
> CIMI::Model::ForwardingGroupTemplate
> +#    ref :address_template, :class => CIMI::Model::AddressTemplate
>      text :quantity
>    end
> 
> diff --git a/server/lib/deltacloud/drivers/fgcp/fgcp_client.rb
> b/server/lib/deltacloud/drivers/fgcp/fgcp_client.rb
> index fed3b70..9597c13 100644
> --- a/server/lib/deltacloud/drivers/fgcp/fgcp_client.rb
> +++ b/server/lib/deltacloud/drivers/fgcp/fgcp_client.rb
> @@ -94,6 +94,10 @@ class FgcpClient
>      request('ListVSYSDescriptor')
>    end
> 
> +  def get_vsys_descriptor_configuration(vsys_descriptor_id)
> +    request('GetVSYSDescriptorConfiguration', {'vsysDescriptorId' =>
> vsys_descriptor_id})
> +  end
> +
>    def list_vservers(vsys_id)
>      request('ListVServer', {'vsysId' => vsys_id})
>    end
> diff --git
> a/server/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb
> b/server/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb
> index b4d31f6..9f94ad5 100644
> --- a/server/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb
> +++ b/server/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb
> @@ -57,11 +57,41 @@ module Deltacloud::Drivers::Fgcp
>      def system_templates(credentials, opts={})
>        safely do
>          client = new_client(credentials)
> +        context = opts[:env]
>          templates =
> client.list_vsys_descriptor['vsysdescriptors'][0]['vsysdescriptor'].
> collect do |desc|
> +          conf =
> client.get_vsys_descriptor_configuration(desc['vsysdescriptorId'][0]
> )['vsysdescriptor'][0]
> +          components = conf['vservers'][0]['vserver'].collect do
> |vserver|
> +            next if vserver['vserverType'][0] == 'firewall'
> +            volume_templates = vserver['vdisks'][0]['vdisk'].collect
> do |vdisk|
> +              {
> +                :volume_config => {:capacity =>
> "#{vdisk['size'][0].to_i}"}
> +              }
> +#
> {:href=>context.volume_url(snapshot.storage_volume_id)},
> +#              {
> +#                :volume_template => "#{vdisk['size'][0].to_i}"
> +#              }
> +#              CIMI::Model::VolumeTemplate.new(
> +#                :volume_config =>
> CIMI::Model::VolumeConfiguration.new(:capacity =>
> vdisk['size'][0].to_i)
> +#              )
> +            end if vserver['vdisks']
> +            puts "volume_templates: #{volume_templates}"
> +            {
> +              :name             => desc['vsysdescriptorName'][0],
> +              :description      => desc['description'][0],
> +              :type             =>
> "http://schemas.dmtf.org/cimi/1/Machine";,
> +              :machine_template => CIMI::Model::MachineTemplate.new(
> +                :name             => vserver['vserverName'][0],
> +                :machine_config   =>
> CIMI::Model::MachineConfiguration.find(vserver['vserverType'][0],
> context),
> +                :machine_image    => { :href =>
> context.machine_image_url(vserver['diskimageId'][0]) },
> +                :volume_templates => volume_templates
> +              )
> +            }
> +          end
>            CIMI::Model::SystemTemplate.new(
> -            :id           => desc['vsysdescriptorId'][0],
> -            :name         => desc['vsysdescriptorName'][0],
> -            :description  => desc['description'][0]
> +            :id                    => desc['vsysdescriptorId'][0],
> +            :name                  => desc['vsysdescriptorName'][0],
> +            :description           => desc['description'][0],
> +            :component_descriptors => components.compact
>            )
>          end
>          templates = templates.select { |t| opts[:id] == t[:id] } if
> opts[:id]
> 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
> index 495fc24..c8c095b 100644
> ---
> 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
> @@ -4,21 +4,32 @@
>    "created": "Fri Feb 08 12:15:15 EET 2013",
>    "componentDescriptors": [
>      { "name": "my machine",
> -      "type": "http://schemas.dmtf.org/cimi/1/Machine";,
>        "description": "an inline mock machine template",
> +      "type": "http://schemas.dmtf.org/cimi/1/Machine";,
>        "machineTemplate": {
>          "name": "machine in mock system",
>          "description": "machine in system",
>          "machineConfig": { "href":
> "http://example.com/configs/m1-small"; },
> -        "machineImage": { "href": "http://example.com/images/img1"; }
> +        "machineImage": { "href": "http://example.com/images/img1"; },
> +        "volumeTemplates": [
> +       { "href": "http://example.com/volumes/sysvol1"; }
> +     ]
>        }
>      },
> -    { "name": "my network",
> -      "type": "http://schemas.dmtf.org/cimi/1/Network";,
> -      "description": "a reference to an existing mock network
template",
> -      "networkTemplate": {
> -        "href":
> "http://cimi.example.org/network_templates/template1";
> +    { "name": "my second machine",
> +      "description": "another inline mock machine template",
> +      "type": "http://schemas.dmtf.org/cimi/1/Machine";,
> +      "machineTemplate": {
> +        "name": "machine in mock system",
> +        "description": "machine in system",
> +        "machineConfig": { "href":
> "http://example.com/configs/m1-small"; },
> +        "machineImage": { "href": "http://example.com/images/img1"; }
>        }
> +    },
> +    { "name": "my third machine",
> +      "description": "a reference to a mock machine template",
> +      "type": "http://schemas.dmtf.org/cimi/1/Machine";,
> +      "machineTemplate": { "href" :
> "http://example.com/machine_templates/template1"; }
>      }
>    ],
>    "operations": [
> 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 b1c57c8..13987f2 100644
> --- a/server/lib/deltacloud/drivers/mock/mock_driver_cimi_methods.rb
> +++ b/server/lib/deltacloud/drivers/mock/mock_driver_cimi_methods.rb
> @@ -35,6 +35,38 @@ module Deltacloud::Drivers::Mock
>        systems.map{|sys|convert_cimi_mock_urls(:system,
> sys ,opts[:env])}.flatten
>      end
> 
> +    def create_system(credentials, opts={})
> +      check_credentials(credentials)
> +      id = "#{opts[:env].send("systems_url")}/#{opts[:name]}"
> +      sys_hsh = { "id"=> id,
> +                  "name" => opts[:name],
> +                  "description" => opts[:description],
> +                  "created" => Time.now,
> +                  "state" => "STOPPED",
> +                  "systemTemplate"=> { "href" =>
> opts[:system_template].id },
> +                  "operations" => [{"rel"=>"edit", "href"=> id},
> +                                   {"rel"=>"delete", "href"=>
> id}]    }
> +      system = CIMI::Model::System.from_json(JSON.generate(sys_hsh))
> +
> +      @client.store_cimi(:system, system)
> +      system
> +    end
> +
> +    def delete_system(credentials, id)
> +      check_credentials(credentials)
> +      @client.destroy_cimi(:system, id)
> +    end
> +
> +    def start_system(credentials, id)
> +      check_credentials(credentials)
> +      update_object_state(id, "System", "STARTED")
> +    end
> +
> +    def stop_system(credentials, id)
> +      check_credentials(credentials)
> +      update_object_state(id, "System", "STOPPED")
> +    end
> +
>      def system_templates(credentials, opts={})
>        check_credentials(credentials)
>        if opts[:id].nil?
> --
> 1.8.0.msysgit.0
> 
> 


Reply via email to