mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 01:58:41 -05:00
Remove propertyCollector from add_disk
This commit updates add_disk to remove propertyCollector, which was used to back the find_vmdks method to locate the disk file on datastore and then use its length to name the new disk. Instead, the number of disks on the VM is used to ensure a unique disk resource title. Without this change add_disk can take 10-50x longer due to the propertyCollector method. Additionally, without this change propertyCollector is used in a non threadsafe manner, which may cause stability issues for vsphere provider backends.
This commit is contained in:
parent
00970ffc9e
commit
d1ae85c8af
2 changed files with 8 additions and 73 deletions
|
|
@ -465,9 +465,12 @@ module Vmpooler
|
|||
|
||||
vmdk_datastore = find_datastore(datastore, connection, datacentername)
|
||||
raise("Datastore '#{datastore}' does not exist in datacenter '#{datacentername}'") if vmdk_datastore.nil?
|
||||
vmdk_file_name = "#{vm['name']}/#{vm['name']}_#{find_vmdks(vm['name'], datastore, connection, datacentername).length + 1}.vmdk"
|
||||
|
||||
datacenter = connection.serviceInstance.find_datacenter(datacentername)
|
||||
controller = find_disk_controller(vm)
|
||||
disk_unit_number = find_disk_unit_number(vm, controller)
|
||||
disk_count = vm.config.hardware.device.grep(RbVmomi::VIM::VirtualDisk).count
|
||||
vmdk_file_name = "#{vm['name']}/#{vm['name']}_#{disk_count}.vmdk"
|
||||
|
||||
vmdk_spec = RbVmomi::VIM::FileBackedVirtualDiskSpec(
|
||||
capacityKb: size.to_i * 1024 * 1024,
|
||||
|
|
@ -478,7 +481,7 @@ module Vmpooler
|
|||
vmdk_backing = RbVmomi::VIM::VirtualDiskFlatVer2BackingInfo(
|
||||
datastore: vmdk_datastore,
|
||||
diskMode: DISK_MODE,
|
||||
fileName: "[#{vmdk_datastore.name}] #{vmdk_file_name}"
|
||||
fileName: "[#{datastore}] #{vmdk_file_name}"
|
||||
)
|
||||
|
||||
device = RbVmomi::VIM::VirtualDisk(
|
||||
|
|
@ -486,7 +489,7 @@ module Vmpooler
|
|||
capacityInKB: size.to_i * 1024 * 1024,
|
||||
controllerKey: controller.key,
|
||||
key: -1,
|
||||
unitNumber: find_disk_unit_number(vm, controller)
|
||||
unitNumber: disk_unit_number
|
||||
)
|
||||
|
||||
device_config_spec = RbVmomi::VIM::VirtualDeviceConfigSpec(
|
||||
|
|
@ -499,8 +502,8 @@ module Vmpooler
|
|||
)
|
||||
|
||||
connection.serviceContent.virtualDiskManager.CreateVirtualDisk_Task(
|
||||
datacenter: connection.serviceInstance.find_datacenter(datacentername),
|
||||
name: "[#{vmdk_datastore.name}] #{vmdk_file_name}",
|
||||
datacenter: datacenter,
|
||||
name: "[#{datastore}] #{vmdk_file_name}",
|
||||
spec: vmdk_spec
|
||||
).wait_for_completion
|
||||
|
||||
|
|
@ -840,23 +843,6 @@ module Vmpooler
|
|||
vms
|
||||
end
|
||||
|
||||
def find_vmdks(vmname, datastore, connection, datacentername)
|
||||
disks = []
|
||||
|
||||
vmdk_datastore = find_datastore(datastore, connection, datacentername)
|
||||
|
||||
vm_files = connection.serviceContent.propertyCollector.collectMultiple vmdk_datastore.vm, 'layoutEx.file'
|
||||
vm_files.keys.each do |f|
|
||||
vm_files[f]['layoutEx.file'].each do |l|
|
||||
if l.name =~ /^\[#{vmdk_datastore.name}\] #{vmname}\/#{vmname}_([0-9]+).vmdk/
|
||||
disks.push(l)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
disks
|
||||
end
|
||||
|
||||
def get_base_vm_container_from(connection)
|
||||
view_manager = connection.serviceContent.viewManager
|
||||
view_manager.CreateContainerView(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue