Class: Fog::Generators::Compute::VcloudDirector::Disks
- Inherits:
-
Object
- Object
- Fog::Generators::Compute::VcloudDirector::Disks
- Defined in:
- lib/fog/vcloud_director/generators/compute/disks.rb
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.
61 62 63 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 61 def initialize(items=[]) @items = items[:disks] end |
Instance Method Details
#add_hard_disk(size) ⇒ Object
80 81 82 83 84 85 86 87 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 80 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
89 90 91 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 89 def delete_hard_disk(disk_number) @items.delete_if {|item| item[:resource_type] == 17 && item[:name] =~ /#{disk_number}$/ } end |
#disks ⇒ Object
93 94 95 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 93 def disks { :disks => @items } end |
#generate_xml ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 97 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
124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 124 def hard_disk_item(opts={}) "<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 |
#header ⇒ Object
114 115 116 117 118 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 114 def header '<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 |
#ide_controller_item(opts = {}) ⇒ Object
136 137 138 139 140 141 142 143 144 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 136 def ide_controller_item(opts={}) "<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 |
#increase_hard_disk_name(hard_disk_name) ⇒ Object
167 168 169 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 167 def increase_hard_disk_name(hard_disk_name) hard_disk_name.gsub(/(\d+)$/) { $1.to_i + 1 } end |
#last_hard_disk ⇒ Object
helpers
159 160 161 162 163 164 165 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 159 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.detect{|hard_disk| hard_disk[:name] =~ /#{last_number}$/ } end |
#modify_hard_disk_size(disk_number, new_size) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 65 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
146 147 148 149 150 151 152 153 154 155 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 146 def scsi_controller(opts={}) "<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 |
#tail ⇒ Object
120 121 122 |
# File 'lib/fog/vcloud_director/generators/compute/disks.rb', line 120 def tail '</vcloud:RasdItemsList>' end |