Я построил цикл, который находит все VMDK для виртуальной виртуальной машины и затем создает хэш вывода, а затем проверяет, присутствует ли диск на самом деле, путем поиска параметра в файле VMX.Затем, если диск отсутствует, он удаляет его из хэша.Проблема, с которой я сталкиваюсь, заключается в том, как удалить ключ хеша, для которого не определены диски.
Вот блок кода;
while ($vmx_file =~ m/^(ide(?<PORT>[0-1])\:(?<DISK>[0-1]))\.present\s+=\s+"(?<PRESENT>[^"]+)["]/xmg) {
$ide_port = "$+{PORT}";
$ide_disk = "$+{DISK}";
$present = "$+{PRESENT}";
if ($present eq 'FALSE') {
delete $virtual_disks{$vm}{"IDE$ide_port"}{"Disk$ide_disk"}
}
}
Это то, что я получаю как хеш, когдаВышеприведенное утверждение верно и удаляет отсутствующие диски.
$VAR1 = {
'Test01' => {
'SCSI0' => {
'Disk0' => '/vmfs/volumes/4c8fd27b-5876fc36-80f4-0015179fd63c/Test01/Test01.vmdk',
'Type' => 'lsilogic',
'Disk1' => '/vmfs/volumes/4c8fd27b-5876fc36-80f4-0015179fd63c/Test01/Test01_1.vmdk'
},
'IDE1' => {
'Disk0' => '/vmfs/volumes/4c8fd27b-5876fc36-80f4-0015179fd63c/ubuntu-10.10-desktop-i386.iso'
},
'IDE0' => {}
}
Как видите, вспомогательный хэш 'IDE0' пуст, поскольку указанный в списке диск не присутствовал в файле VMX.Я хотел бы сделать, это удалить весь хэш 'IDE0', потому что в нем ничего нет. Но я хочу, чтобы он удалял его только в том случае, если он ничего не хэширует. Потому что он может иметь до 2 дисков в соответствии со спецификациями IDE.