class Fog::Generators::Compute::VcloudDirector::Disks
This is the data structure it accepts, this is the output of get_vm_disks:
{:disks=> [{:address=>0, :description=>"SCSI Controller", :name=>"SCSI Controller 0", :id=>2, :resource_sub_type=>"VirtualSCSI", :resource_type=>6}, {:address_on_parent=>0, :description=>"Hard disk", :name=>"Hard disk 1", :id=>2000, :parent=>2, :resource_type=>17, :capacity=>16384, :bus_sub_type=>"VirtualSCSI", :bus_type=>6}, {:address=>0, :description=>"IDE Controller", :name=>"IDE Controller 0", :id=>3, :resource_type=>5}]}
This is what it generates:
<vcloud:RasdItemsList xmlns:vcloud="http://www.vmware.com/vcloud/v1.5" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" type="application/vnd.vmware.vcloud.rasdItemsList+xml"> <vcloud:Item> <rasd:Address>0</rasd:Address> <rasd:Description>SCSI Controller</rasd:Description> <rasd:ElementName>SCSI Controller 0</rasd:ElementName> <rasd:InstanceID>2</rasd:InstanceID> <rasd:ResourceSubType>VirtualSCSI</rasd:ResourceSubType> <rasd:ResourceType>6</rasd:ResourceType> </vcloud:Item> <vcloud:Item> <rasd:AddressOnParent>0</rasd:AddressOnParent> <rasd:Description>Hard disk</rasd:Description> <rasd:ElementName>Hard disk 1</rasd:ElementName> <rasd:HostResource vcloud:capacity="16384" vcloud:busSubType="VirtualSCSI" vcloud:busType="6"></rasd:HostResource> <rasd:InstanceID>2000</rasd:InstanceID> <rasd:Parent>2</rasd:Parent> <rasd:ResourceType>17</rasd:ResourceType> </vcloud:Item> <vcloud:Item> <rasd:Address>0</rasd:Address> <rasd:Description>IDE Controller</rasd:Description> <rasd:ElementName>IDE Controller 0</rasd:ElementName> <rasd:InstanceID>3</rasd:InstanceID> <rasd:ResourceType>5</rasd:ResourceType> </vcloud:Item> </vcloud:RasdItemsList>
@see pubs.vmware.com/vcd-51/topic/com.vmware.vcloud.api.reference.doc_51/doc/types/RasdItemsListType.html
Public Class Methods
new(items=[])
click to toggle source
# File lib/fog/vcloud_director/generators/compute/disks.rb, line 63 def initialize(items=[]) @items = items[:disks] end
Public Instance Methods
add_hard_disk(size)
click to toggle source
# File lib/fog/vcloud_director/generators/compute/disks.rb, line 82 def add_hard_disk(size) new_hard_disk = last_hard_disk.dup new_hard_disk[:capacity] = size new_hard_disk[:name] = increase_hard_disk_name(new_hard_disk[:name]) new_hard_disk[:address_on_parent] += 1 new_hard_disk[:id] += 1 @items << new_hard_disk end
delete_hard_disk(disk_number)
click to toggle source
# File lib/fog/vcloud_director/generators/compute/disks.rb, line 91 def delete_hard_disk(disk_number) @items.delete_if {|item| item[:resource_type] == 17 && item[:name] =~ /#{disk_number}$/ } end
disks()
click to toggle source
# File lib/fog/vcloud_director/generators/compute/disks.rb, line 95 def disks { :disks => @items } end
generate_xml()
click to toggle source
# File lib/fog/vcloud_director/generators/compute/disks.rb, line 99 def generate_xml output = "" output << header @items.each do |item| output << case item[:resource_type] when 6 scsi_controller(item) when 17 hard_disk_item(item) when 5 ide_controller_item(item) end end output << tail output end
hard_disk_item(opts={})
click to toggle source
# File lib/fog/vcloud_director/generators/compute/disks.rb, line 130 def hard_disk_item(opts={}) <<-END <vcloud:Item> <rasd:AddressOnParent>#{opts[:address_on_parent]}</rasd:AddressOnParent> <rasd:Description>#{opts[:description]}</rasd:Description> <rasd:ElementName>#{opts[:name]}</rasd:ElementName> <rasd:HostResource vcloud:capacity=\"#{opts[:capacity]}\" vcloud:busSubType=\"#{opts[:bus_sub_type]}\" vcloud:busType=\"#{opts[:bus_type]}\"></rasd:HostResource> <rasd:InstanceID>#{opts[:id]}</rasd:InstanceID> <rasd:Parent>#{opts[:parent]}</rasd:Parent> <rasd:ResourceType>17</rasd:ResourceType> </vcloud:Item> END end
header()
click to toggle source
# File lib/fog/vcloud_director/generators/compute/disks.rb, line 116 def header <<-END <vcloud:RasdItemsList xmlns:vcloud="http://www.vmware.com/vcloud/v1.5" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" type="application/vnd.vmware.vcloud.rasdItemsList+xml"> END end
ide_controller_item(opts={})
click to toggle source
# File lib/fog/vcloud_director/generators/compute/disks.rb, line 144 def ide_controller_item(opts={}) <<-END <vcloud:Item> <rasd:Address>#{opts[:address]}</rasd:Address> <rasd:Description>#{opts[:description]}</rasd:Description> <rasd:ElementName>#{opts[:name]}</rasd:ElementName> <rasd:InstanceID>#{opts[:id]}</rasd:InstanceID> <rasd:ResourceType>5</rasd:ResourceType> </vcloud:Item> END end
increase_hard_disk_name(hard_disk_name)
click to toggle source
# File lib/fog/vcloud_director/generators/compute/disks.rb, line 179 def increase_hard_disk_name(hard_disk_name) hard_disk_name.gsub(/(\d+)$/) { $1.to_i + 1 } end
last_hard_disk()
click to toggle source
helpers
# File lib/fog/vcloud_director/generators/compute/disks.rb, line 171 def last_hard_disk hard_disks = @items.select{|item| item[:resource_type] == 17} names = hard_disks.map{|item| item[:name] } only_numbers = names.map{|b| b.scan(/\d+/).first.to_i} # extract numbers last_number = only_numbers.sort.last # get the last number hard_disks.find{|hard_disk| hard_disk[:name] =~ /#{last_number}$/ } end
modify_hard_disk_size(disk_number, new_size)
click to toggle source
# File lib/fog/vcloud_director/generators/compute/disks.rb, line 67 def modify_hard_disk_size(disk_number, new_size) found = false @items.each do |item| if item[:resource_type] == 17 if item[:name] == "Hard disk #{disk_number}" found = true raise "Hard disk size can't be reduced" if item[:capacity].to_i > new_size.to_i item[:capacity] = new_size end end end raise "Hard disk #{disk_number} not found" unless found true end
scsi_controller(opts={})
click to toggle source
# File lib/fog/vcloud_director/generators/compute/disks.rb, line 156 def scsi_controller(opts={}) <<-END <vcloud:Item> <rasd:Address>#{opts[:address]}</rasd:Address> <rasd:Description>#{opts[:description]}</rasd:Description> <rasd:ElementName>#{opts[:name]}</rasd:ElementName> <rasd:InstanceID>#{opts[:id]}</rasd:InstanceID> <rasd:ResourceSubType>#{opts[:resource_sub_type]}</rasd:ResourceSubType> <rasd:ResourceType>6</rasd:ResourceType> </vcloud:Item> END end
tail()
click to toggle source
# File lib/fog/vcloud_director/generators/compute/disks.rb, line 124 def tail <<-END </vcloud:RasdItemsList> END end