mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
add disk implemented
This commit is contained in:
parent
73f4a44112
commit
4137a76d7a
2 changed files with 88 additions and 23 deletions
|
@ -1,16 +1,64 @@
|
|||
# This is the data structure it accepts, this is the output of get_vm_disks
|
||||
#
|
||||
# {"disks"=>
|
||||
# [{"address"=>0,
|
||||
# "description"=>"SCSI Controller",
|
||||
# "element_name"=>"SCSI Controller 0",
|
||||
# "instance_id"=>2,
|
||||
# "resource_sub_type"=>"VirtualSCSI",
|
||||
# "resource_type"=>6},
|
||||
# {"address_on_parent"=>0,
|
||||
# "description"=>"Hard disk",
|
||||
# "element_name"=>"Hard disk 1",
|
||||
# "instance_id"=>2000,
|
||||
# "parent"=>2,
|
||||
# "resource_type"=>17,
|
||||
# "capacity"=>16384,
|
||||
# "bus_sub_type"=>"VirtualSCSI",
|
||||
# "bus_type"=>6},
|
||||
# {"address"=>0,
|
||||
# "description"=>"IDE Controller",
|
||||
# "element_name"=>"IDE Controller 0",
|
||||
# "instance_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>
|
||||
#
|
||||
module Fog
|
||||
module Generators
|
||||
module Compute
|
||||
module Vcloudng
|
||||
|
||||
class Disks
|
||||
def self.generate_xml(items=[])
|
||||
disks = self.class.new(items)
|
||||
disk.generate
|
||||
end
|
||||
|
||||
def initialize(items=[])
|
||||
@items = items
|
||||
@items = items['disks']
|
||||
end
|
||||
|
||||
def modify_hard_disk_size(disk_number, new_size)
|
||||
|
@ -28,7 +76,20 @@ module Fog
|
|||
true
|
||||
end
|
||||
|
||||
def generate
|
||||
def add_hard_disk(size)
|
||||
new_hard_disk = last_hard_disk.dup
|
||||
new_hard_disk['capacity'] = size
|
||||
new_hard_disk['element_name'] = increase_hard_disk_name(new_hard_disk['element_name'])
|
||||
new_hard_disk['address_on_parent'] += 1
|
||||
new_hard_disk['instance_id'] += 1
|
||||
@items << new_hard_disk
|
||||
end
|
||||
|
||||
def disks
|
||||
{ 'disks' => @items }
|
||||
end
|
||||
|
||||
def generate_xml
|
||||
output = ""
|
||||
output << header
|
||||
@items.each do |item|
|
||||
|
@ -46,19 +107,9 @@ module Fog
|
|||
end
|
||||
|
||||
def header
|
||||
'
|
||||
<vcloud:RasdItemsList xmlns:vcloud="http://www.vmware.com/vcloud/v1.5"
|
||||
'<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"
|
||||
href="https://devlab.mdsol.com/api/vApp/vm-8b74d95a-ee91-4f46-88d8-fc92be0dbaae/virtualHardwareSection/disks"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
|
||||
xsi:schemaLocation="http://www.vmware.com/vcloud/v1.5 http://10.194.1.65/api/v1.5/schema/master.xsd http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2.22.0/CIM_ResourceAllocationSettingData.xsd">
|
||||
<vcloud:Link
|
||||
href="https://devlab.mdsol.com/api/vApp/vm-8b74d95a-ee91-4f46-88d8-fc92be0dbaae/virtualHardwareSection/disks"
|
||||
rel="edit"
|
||||
type="application/vnd.vmware.vcloud.rasdItemsList+xml"/>
|
||||
'
|
||||
type="application/vnd.vmware.vcloud.rasdItemsList+xml">'
|
||||
end
|
||||
|
||||
def tail
|
||||
|
@ -98,6 +149,20 @@ module Fog
|
|||
</vcloud:Item>"
|
||||
end
|
||||
|
||||
# helpers
|
||||
|
||||
def last_hard_disk
|
||||
hard_disks = @items.select{|item| item['resource_type'] == 17}
|
||||
element_names = hard_disks.map{|item| item['element_name'] }
|
||||
only_numbers = element_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 =! /#{last_number}/ }
|
||||
end
|
||||
|
||||
def increase_hard_disk_name(hard_disk_name)
|
||||
hard_disk_name.gsub(/(\d+)$/) { $1.to_i + 1 }
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -4,12 +4,12 @@ module Fog
|
|||
class Real
|
||||
require 'fog/vcloudng/generators/compute/disks'
|
||||
|
||||
def put_vm_disks(vm_id, items=[])
|
||||
data = Fog::Generators::Compute::Vcloudng::Disks.new(items)
|
||||
data.modify_hard_disk_size(1, 8192*2)
|
||||
puts data.generate
|
||||
# disks is the body of get_vm_disks
|
||||
def put_vm_disks(vm_id, disks=[])
|
||||
data = Fog::Generators::Compute::Vcloudng::Disks.new(disks)
|
||||
|
||||
request(
|
||||
:body => data.generate,
|
||||
:body => data.generate_xml,
|
||||
:expects => 202,
|
||||
:headers => { 'Content-Type' => 'application/vnd.vmware.vcloud.rasdItemsList+xml',
|
||||
'Accept' => 'application/*+xml;version=1.5' },
|
||||
|
|
Loading…
Add table
Reference in a new issue