From: Michal Fojtik <[email protected]> * For disks, subcollection class was not generated yet * Fixed capacity in Volumes * Use generated VolumeCollection as subcollection
Signed-off-by: Michal fojtik <[email protected]> --- server/lib/cimi/collections/machines.rb | 2 +- server/lib/cimi/models/disk.rb | 7 ++++++- server/lib/cimi/models/volume.rb | 16 +++++++++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/server/lib/cimi/collections/machines.rb b/server/lib/cimi/collections/machines.rb index 1ae71e6..6a896f3 100644 --- a/server/lib/cimi/collections/machines.rb +++ b/server/lib/cimi/collections/machines.rb @@ -135,7 +135,7 @@ module CIMI::Collections description "Retrieve the Machine's MachineVolumeCollection" param :id, :string, :required control do - volumes = MachineVolumeCollection.default(params[:id], self) + volumes = CIMI::Model::Volume.collection_for_instance(params[:id], self) respond_to do |format| format.json {volumes.to_json} format.xml {volumes.to_xml} diff --git a/server/lib/cimi/models/disk.rb b/server/lib/cimi/models/disk.rb index 40bd6e1..218143f 100644 --- a/server/lib/cimi/models/disk.rb +++ b/server/lib/cimi/models/disk.rb @@ -57,7 +57,12 @@ class CIMI::Model::Disk < CIMI::Model::Base def self.collection_for_instance(instance_id, context) instance = context.driver.instance(context.credentials, :id => instance_id) disks = find(instance, nil, context) - CIMI::Model::DiskCollection.new( + unless CIMI::Model.const_defined?('DiskCollection') + collection_class = CIMI::Model::Collection.generate(self) + else + collection_class = CIMI::Model::DiskCollection + end + collection_class.new( :id => context.url("/machines/#{instance_id}/disks"), :name => 'default', :count => disks.size, diff --git a/server/lib/cimi/models/volume.rb b/server/lib/cimi/models/volume.rb index 5ce0fbc..eca5cc1 100644 --- a/server/lib/cimi/models/volume.rb +++ b/server/lib/cimi/models/volume.rb @@ -94,7 +94,7 @@ class CIMI::Model::Volume < CIMI::Model::Base :description => volume.id, :created => Time.parse(volume.created).xmlschema, :id => context.volume_url(volume.id), - :capacity => { :quantity=>volume.capacity, :units=>"gibibyte" }, #FIXME... units will vary + :capacity => context.to_kibibyte(volume.capacity, 'MB'), :bootable => "false", #fixme ... will vary... ec2 doesn't expose this :snapshots => [], #fixme... :type => 'http://schemas.dmtf.org/cimi/1/mapped', @@ -103,4 +103,18 @@ class CIMI::Model::Volume < CIMI::Model::Base } ) end + def self.collection_for_instance(instance_id, context) + instance = context.driver.instance(context.credentials, :id => instance_id) + volumes = instance.storage_volumes.map do |mappings| + mappings.keys.map { |volume_id| from_storage_volume(context.driver.storage_volume(context.credentials, :id => volume_id), context) } + end.flatten + CIMI::Model::VolumeCollection.new( + :id => context.url("/machines/#{instance_id}/volumes"), + :name => 'default', + :count => volumes.size, + :description => "Volume collection for Machine #{instance_id}", + :entries => volumes + ) + end + end -- 1.8.0
