Class: Fog::Generators::Compute::VcloudDirector::Disks
- Inherits:
-
Object
- Object
- Fog::Generators::Compute::VcloudDirector::Disks
- Defined in:
- lib/fog/vcloud_director/generators/compute/disks.rb
Overview
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>
Instance Method Summary collapse
- #add_hard_disk(size) ⇒ Object
- #delete_hard_disk(disk_number) ⇒ Object
- #disks ⇒ Object
- #generate_xml ⇒ Object
- #hard_disk_item(opts = {}) ⇒ Object
- #header ⇒ Object
- #ide_controller_item(opts = {}) ⇒ Object
- #increase_hard_disk_name(hard_disk_name) ⇒ Object
-
#initialize(items = []) ⇒ Disks
constructor
A new instance of Disks.
-
#last_hard_disk ⇒ Object
helpers.
- #modify_hard_disk_size(disk_number, new_size) ⇒ Object
- #scsi_controller(opts = {}) ⇒ Object
- #tail ⇒ Object
Constructor Details
#initialize(items = []) ⇒ Disks
Returns a new instance of Disks.
63 64 65 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 63 def initialize(items=[]) @items = items[:disks] end |
Instance Method Details
#add_hard_disk(size) ⇒ Object
82 83 84 85 86 87 88 89 |
# 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) ⇒ Object
91 92 93 |
# 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 ⇒ Object
95 96 97 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 95 def disks { :disks => @items } end |
#generate_xml ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# 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 = {}) ⇒ Object
130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 130 def hard_disk_item(opts={}) " <vcloud:Item>\n <rasd:AddressOnParent>\#{opts[:address_on_parent]}</rasd:AddressOnParent>\n <rasd:Description>\#{opts[:description]}</rasd:Description>\n <rasd:ElementName>\#{opts[:name]}</rasd:ElementName>\n <rasd:HostResource vcloud:capacity=\\\"\#{opts[:capacity]}\\\" vcloud:busSubType=\\\"\#{opts[:bus_sub_type]}\\\" vcloud:busType=\\\"\#{opts[:bus_type]}\\\"></rasd:HostResource>\n <rasd:InstanceID>\#{opts[:id]}</rasd:InstanceID>\n <rasd:Parent>\#{opts[:parent]}</rasd:Parent>\n <rasd:ResourceType>17</rasd:ResourceType>\n </vcloud:Item>\n END\nend\n" |
#header ⇒ Object
116 117 118 119 120 121 122 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 116 def header " <vcloud:RasdItemsList xmlns:vcloud=\"http://www.vmware.com/vcloud/v1.5\"\n xmlns:rasd=\"http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData\"\n type=\"application/vnd.vmware.vcloud.rasdItemsList+xml\">\n END\nend\n" |
#ide_controller_item(opts = {}) ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 144 def ide_controller_item(opts={}) " <vcloud:Item>\n <rasd:Address>\#{opts[:address]}</rasd:Address>\n <rasd:Description>\#{opts[:description]}</rasd:Description>\n <rasd:ElementName>\#{opts[:name]}</rasd:ElementName>\n <rasd:InstanceID>\#{opts[:id]}</rasd:InstanceID>\n <rasd:ResourceType>5</rasd:ResourceType>\n </vcloud:Item>\n END\nend\n" |
#increase_hard_disk_name(hard_disk_name) ⇒ Object
179 180 181 |
# 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 ⇒ Object
helpers
171 172 173 174 175 176 177 |
# 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) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# 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 = {}) ⇒ Object
156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 156 def scsi_controller(opts={}) " <vcloud:Item>\n <rasd:Address>\#{opts[:address]}</rasd:Address>\n <rasd:Description>\#{opts[:description]}</rasd:Description>\n <rasd:ElementName>\#{opts[:name]}</rasd:ElementName>\n <rasd:InstanceID>\#{opts[:id]}</rasd:InstanceID>\n <rasd:ResourceSubType>\#{opts[:resource_sub_type]}</rasd:ResourceSubType>\n <rasd:ResourceType>6</rasd:ResourceType>\n </vcloud:Item>\n END\nend\n" |
#tail ⇒ Object
124 125 126 127 128 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 124 def tail " </vcloud:RasdItemsList>\n END\nend\n" |