Housekeeping wrt comments;Several code optimizations
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
969e3b385b
commit
074865ab61
@ -50,53 +50,46 @@ $NS = [System.Xml.XmlNamespaceManager]$XML.NameTable
|
|||||||
[void]$NS.AddNamespace('ns', $XML.DocumentElement.xmlns)
|
[void]$NS.AddNamespace('ns', $XML.DocumentElement.xmlns)
|
||||||
[void]$NS.AddNamespace('ovf', $XML.DocumentElement.ovf)
|
[void]$NS.AddNamespace('ovf', $XML.DocumentElement.ovf)
|
||||||
[void]$NS.AddNamespace('rasd', $XML.DocumentElement.rasd)
|
[void]$NS.AddNamespace('rasd', $XML.DocumentElement.rasd)
|
||||||
|
[void]$NS.AddNamespace('vmw', $XML.DocumentElement.vmw)
|
||||||
|
|
||||||
# Create copy of default resourceType=17 (=Harddisk) node
|
# Create copy of existing 'Item/ResourceType'=17 (=Hard disk) node
|
||||||
$XMLDiskTemplate = $XML.SelectSingleNode("//ns:VirtualHardwareSection/ns:Item/rasd:ResourceType[.='17']", $NS).ParentNode.CloneNode($True)
|
$XMLDiskTemplate = $XML.SelectSingleNode("//ns:VirtualHardwareSection/ns:Item/rasd:ResourceType[.='17']", $NS).ParentNode.CloneNode($True)
|
||||||
|
|
||||||
ForEach ($Disk in $OVFConfig.DynamicDisks) {
|
ForEach ($Disk in $OVFConfig.DynamicDisks) {
|
||||||
# Determine next free available diskId
|
# Determine next free available 'diskId'
|
||||||
$XMLDisks = $XML.SelectNodes("//ns:DiskSection/ns:Disk[contains(@ovf:diskId,'vmdisk')]", $NS)
|
$XMLDisks = $XML.SelectNodes("//ns:DiskSection/ns:Disk[contains(@ovf:diskId,'vmdisk')]", $NS)
|
||||||
$DiskId = $XMLDisks.Count + 1
|
$DiskId = 1
|
||||||
While ($XMLDisks.DiskId -contains "vmdisk$($DiskId)") {
|
While ($XMLDisks.DiskId -contains "vmdisk$($DiskId)") {
|
||||||
$DiskId++
|
$DiskId++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Add new 'Disk' node (under 'DiskSection')
|
||||||
$XMLDisk = $XML.CreateElement('Disk', $XML.DocumentElement.xmlns)
|
$XMLDisk = $XML.CreateElement('Disk', $XML.DocumentElement.xmlns)
|
||||||
Switch ($Disk.UnitSize) {
|
$PowersMap = @{
|
||||||
'KB' {
|
KB = 10
|
||||||
$Powers = 10
|
MB = 20
|
||||||
|
GB = 30
|
||||||
|
TB = 40
|
||||||
|
PB = 50
|
||||||
}
|
}
|
||||||
'MB' {
|
If ($PowersMap.Keys -notcontains $Disk.UnitSize) {
|
||||||
$Powers = 20
|
# Invalid UnitSize; skipping adding new disk
|
||||||
}
|
|
||||||
'GB' {
|
|
||||||
$Powers = 30
|
|
||||||
}
|
|
||||||
'TB' {
|
|
||||||
$Powers = 40
|
|
||||||
}
|
|
||||||
'PB' {
|
|
||||||
$Powers = 50
|
|
||||||
}
|
|
||||||
default {
|
|
||||||
# Invalid UnitSize; skipping modification of existing disk
|
|
||||||
Continue
|
Continue
|
||||||
}
|
}
|
||||||
}
|
|
||||||
[void]$XMLDisk.SetAttribute('capacityAllocationUnits', $NS.LookupNamespace('ovf'), "byte * 2^$($Powers)")
|
[void]$XMLDisk.SetAttribute('capacityAllocationUnits', $NS.LookupNamespace('ovf'), "byte * 2^$($PowersMap[$Disk.UnitSize])")
|
||||||
[void]$XMLDisk.SetAttribute('format', $NS.LookupNamespace('ovf'), 'http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized')
|
[void]$XMLDisk.SetAttribute('format', $NS.LookupNamespace('ovf'), 'http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized')
|
||||||
[void]$XMLDisk.SetAttribute('diskId', $NS.LookupNamespace('ovf'), "vmdisk$($DiskId)")
|
[void]$XMLDisk.SetAttribute('diskId', $NS.LookupNamespace('ovf'), "vmdisk$($DiskId)")
|
||||||
[void]$XMLDisk.SetAttribute('capacity', $NS.LookupNamespace('ovf'), '${{vmconfig.disksize.{0}}}' -f $DiskId)
|
[void]$XMLDisk.SetAttribute('capacity', $NS.LookupNamespace('ovf'), '${{vmconfig.disksize.{0}}}' -f $DiskId)
|
||||||
[void]$XMLDisk.SetAttribute('populatedSize', $NS.LookupNamespace('ovf'), 0)
|
[void]$XMLDisk.SetAttribute('populatedSize', $NS.LookupNamespace('ovf'), 0)
|
||||||
[void]$XML.SelectSingleNode('//ns:DiskSection', $NS).AppendChild($XMLDisk)
|
[void]$XML.SelectSingleNode('//ns:DiskSection', $NS).AppendChild($XMLDisk)
|
||||||
|
|
||||||
# Add new resourceType nodes
|
# Add new 'Item/ResourceType' node (under 'VirtualHardwareSection')
|
||||||
$XMLDiskItem = $XMLDiskTemplate.CloneNode($True)
|
$XMLDiskItem = $XMLDiskTemplate.CloneNode($True)
|
||||||
$XMLDiskItem.SelectSingleNode('rasd:AddressOnParent', $NS).InnerText = ($DiskId - 1)
|
$XMLDiskItem.SelectSingleNode('rasd:AddressOnParent', $NS).InnerText = ($DiskId - 1)
|
||||||
$XMLDiskItem.SelectSingleNode('rasd:ElementName', $NS).InnerText = "Hard Disk $($DiskId)"
|
$XMLDiskItem.SelectSingleNode('rasd:ElementName', $NS).InnerText = "Hard Disk $($DiskId)"
|
||||||
$XMLDiskItem.SelectSingleNode('rasd:HostResource', $NS).InnerText = "ovf:/disk/vmdisk$($DiskId)"
|
$XMLDiskItem.SelectSingleNode('rasd:HostResource', $NS).InnerText = "ovf:/disk/vmdisk$($DiskId)"
|
||||||
# Determine next free available InstanceID
|
# Determine next free available 'InstanceID'
|
||||||
$InstanceIDs = $XML.SelectNodes('//ns:VirtualHardwareSection/ns:Item/rasd:InstanceID', $NS)
|
$InstanceIDs = $XML.SelectNodes('//ns:VirtualHardwareSection/ns:Item/rasd:InstanceID', $NS)
|
||||||
$InstanceID = 1
|
$InstanceID = 1
|
||||||
While ($InstanceIDs.InnerText -contains $InstanceID) {
|
While ($InstanceIDs.InnerText -contains $InstanceID) {
|
||||||
@ -147,14 +140,14 @@ If ($OVFConfig.DeploymentConfigurations.Count -gt 0) {
|
|||||||
Write-Host "Inserted 'DeploymentOptionSection' with $($Configuration.Count) nodes"
|
Write-Host "Inserted 'DeploymentOptionSection' with $($Configuration.Count) nodes"
|
||||||
|
|
||||||
If ($OVFConfig.DeploymentConfigurations.Count -eq $OVFConfig.DeploymentConfigurations.Size.Count) {
|
If ($OVFConfig.DeploymentConfigurations.Count -eq $OVFConfig.DeploymentConfigurations.Size.Count) {
|
||||||
# Create copies of default resourceType nodes
|
# Create copies of existing 'Item/ResourceType' nodes
|
||||||
$XMLCPUTemplate = $XML.SelectSingleNode("//ns:VirtualHardwareSection/ns:Item/rasd:ResourceType[.='3']", $NS).ParentNode.CloneNode($True)
|
$XMLCPUTemplate = $XML.SelectSingleNode("//ns:VirtualHardwareSection/ns:Item/rasd:ResourceType[.='3']", $NS).ParentNode.CloneNode($True)
|
||||||
$XMLMemoryTemplate = $XML.SelectSingleNode("//ns:VirtualHardwareSection/ns:Item/rasd:ResourceType[.='4']", $NS).ParentNode.CloneNode($True)
|
$XMLMemoryTemplate = $XML.SelectSingleNode("//ns:VirtualHardwareSection/ns:Item/rasd:ResourceType[.='4']", $NS).ParentNode.CloneNode($True)
|
||||||
# Delete default resourceType nodes
|
# Delete existing nodes
|
||||||
ForEach ($Node in $XML.SelectNodes("//ns:VirtualHardwareSection/ns:Item/rasd:ResourceType[.='3' or .='4']", $NS).ParentNode) {
|
ForEach ($Node in $XML.SelectNodes("//ns:VirtualHardwareSection/ns:Item/rasd:ResourceType[.='3' or .='4']", $NS).ParentNode) {
|
||||||
[void]$Node.ParentNode.RemoveChild($Node)
|
[void]$Node.ParentNode.RemoveChild($Node)
|
||||||
}
|
}
|
||||||
# Add updated resourceType nodes
|
# Add adjusted 'Item/ResourceType' nodes
|
||||||
ForEach ($Configuration in $OVFConfig.DeploymentConfigurations) {
|
ForEach ($Configuration in $OVFConfig.DeploymentConfigurations) {
|
||||||
$XMLCPU = $XMLCPUTemplate.CloneNode($True)
|
$XMLCPU = $XMLCPUTemplate.CloneNode($True)
|
||||||
[void]$XMLCPU.SetAttribute('configuration', $NS.LookupNamespace('ovf'), $Configuration.Id)
|
[void]$XMLCPU.SetAttribute('configuration', $NS.LookupNamespace('ovf'), $Configuration.Id)
|
||||||
@ -182,7 +175,7 @@ ForEach ($ExtraConfig in $OVFConfig.AdvancedOptions) {
|
|||||||
|
|
||||||
[void]$XML.SelectSingleNode('//ns:VirtualHardwareSection', $NS).AppendChild($XMLExtraConfig)
|
[void]$XML.SelectSingleNode('//ns:VirtualHardwareSection', $NS).AppendChild($XMLExtraConfig)
|
||||||
}
|
}
|
||||||
Write-Host "Added $($OVFConfig.AdvancedOptions.Count) 'vmw:ExtraConfig' nodes"
|
Write-Host "Added $($OVFConfig.AdvancedOptions.Count) 'vmw:ExtraConfig' node(s)"
|
||||||
|
|
||||||
$XMLProductSection = $XML.SelectSingleNode('//ns:ProductSection', $NS)
|
$XMLProductSection = $XML.SelectSingleNode('//ns:ProductSection', $NS)
|
||||||
If ($XMLProductSection -eq $Null) {
|
If ($XMLProductSection -eq $Null) {
|
||||||
@ -211,7 +204,7 @@ ForEach ($Category in $OVFConfig.PropertyCategories) {
|
|||||||
ForEach ($Property in $Category.ProductProperties) {
|
ForEach ($Property in $Category.ProductProperties) {
|
||||||
$XMLProperty = $XML.CreateElement('Property', $XML.DocumentElement.xmlns)
|
$XMLProperty = $XML.CreateElement('Property', $XML.DocumentElement.xmlns)
|
||||||
|
|
||||||
$XMLProperty.SetAttribute('key', $NS.LookupNamespace('ovf'), $Property.Key)
|
[void]$XMLProperty.SetAttribute('key', $NS.LookupNamespace('ovf'), $Property.Key)
|
||||||
Switch -regex ($Property.Type) {
|
Switch -regex ($Property.Type) {
|
||||||
'^boolean' {
|
'^boolean' {
|
||||||
[void]$XMLProperty.SetAttribute('type', $NS.LookupNamespace('ovf'), 'boolean')
|
[void]$XMLProperty.SetAttribute('type', $NS.LookupNamespace('ovf'), 'boolean')
|
||||||
|
Loading…
Reference in New Issue
Block a user