Я пытаюсь программно включить флэш-кеш для коллекции виртуальных машин в vmware 6.5 U2.Я хочу установить флэш-кеш на 10% от размера тома.Сценарий успешно обновляет vm-версию до версии, которая поддерживает флэш-кэш, но затем настройка флэш-кэша не удалась.Что разочаровывает, так это то, что нет ошибки в том, почему он не работает.
python версия 2.7.5 pyvmomi Версия: 6.5.0.2017.5.post1
Вот моя функция, которая устанавливает флэш-кеш:
def vmEnableFlashCache(vmuuid):
try:
vcstuff = vcenter.RetrieveContent()
except:
global vcenter
vcenter = refreshVcenter()
vcstuff = vcenter.RetrieveContent()
custvm = vcstuff.searchIndex.FindByUuid(None, vmuuid, True)
disk_spec = []
for device in custvm.config.hardware.device:
if isinstance(device, vim.vm.device.VirtualDisk):
flashcapacity = (device.capacityInKB * .10)/1024
diskspec = vim.vm.device.VirtualDeviceSpec()
diskspec.operation = vim.vm.device.VirtualDeviceSpec.Operation.edit
diskspec.device = device
flashcacheconfig = vim.vm.device.VirtualDisk.VFlashCacheConfigInfo()
flashcacheconfig.reservationInMB = int(flashcapacity)
flashcacheconfig.blockSizeInKB = 4
flashcacheconfig.cacheMode = "write_thru"
flashcacheconfig.cacheConsistencyType = "strong"
diskspec.device.vFlashCacheConfigInfo = flashcacheconfig
disk_spec.append(diskspec)
print disk_spec
newconfig = vim.vm.ConfigSpec(deviceChange=disk_spec)
status = custvm.ReconfigVM_Task(newconfig)
print status
raw_input("check to see if Flash worked.")
Vmware показывает задачу «Переконфигурировать» в списке задач как выполняющуюся и успешно завершающую.Vmware hostd.logs также показывает действия без ошибок:
2019-02-27T14: 42: 59.510Z info hostd [2E503B70] [Originator @ 6876 sub = Vmsvc.vm: / vmfs/volumes/3018cbbe-f56a4b92/<>/<>.vmx] Активировано обновление конфигурации отправки 2019-02-27T14: 43: 10.544Z info hostd [2D7C1B70] [Originator @ 6876 sub = Vmsvc.vm: / vmfs / volume / 3018cbbe-f56a4b92 / <> / <>. vmx opID = 270b4c43-33-9354 user = vpxuser: <>] Переход состояния (VM_STATE_OFF -> VM_STATE_RECONFIGURING) 2019-02-27T14: 43: 12.140Z информация hostd [2E8CAB70] [Originator @6876 sub = Vmsvc.vm: / vmfs / volume / 3018cbbe-f56a4b92 / <> / <>. Vmx opID = 270b4c43-33-9354 user = vpxuser: <>] Переход состояния (VM_STATE_RECONFIGURING -> VM_STATE_OFF) 101 * * **
Из документации по pyVmomi это должно работать, нужно ли использовать VirtualDiskManager вместо ReconfigVM?Как бы я применил эту конфигурацию?
------ EDIT -------
Я могу выполнять эту же функцию, используя perl.Возможно, это ошибка в реализации вызова pyvmomi?
Вот код perl:
if($operation eq "query") {
if(defined($vmdk->vFlashCacheConfigInfo)) {
my $vflashConfig = $vmdk->vFlashCacheConfigInfo;
print "\nVM Disk: " . $vmdk->deviceInfo->label . "\n";
print "vFlash Module: " . $vflashConfig->vFlashModule . "\n";
print "vFlash Cache Mode: " . $vflashConfig->cacheMode . "\n";
print "vFlash Cache Consistency Type: " . $vflashConfig->cacheConsistencyType . "\n";
print "vFlash Blocksize: " . $vflashConfig->blockSizeInKB . " KB\n";
print "vFlash Reservation: " . $vflashConfig->reservationInMB . " MB\n\n";
} else {
print "vSphere Flash Read Cache is not configured on this VM\n\n";
}
} elsif($operation eq "enable" || $operation eq "disable") {
if($operation eq "disable") {
$reservation = 0;
} else {
unless($reservation) {
print "Error: You need to specify the reservation (MB) using --reservation for amount of vSphere Read Cache to assign to VM\n\n";
Util::disconnect();
exit 1;
}
}
$vfrcConfiguration = VirtualDiskVFlashCacheConfigInfo->new(blockSizeInKB => $blocksize, reservationInMB => $reservation, cacheConsistencyType => $cachetype, cacheMode => $mode{$cachemode}, vFlashModule => "vfc");
my $diskSpec = VirtualDisk->new(controllerKey => $vmdk->controllerKey,
unitNumber => $vmdk->unitNumber,
key => $vmdk->key,
backing => $vmdk->backing,
deviceInfo => $vmdk->deviceInfo,
capacityInKB => $vmdk->capacityInKB,
vFlashCacheConfigInfo => $vfrcConfiguration,
);
my $devspec = VirtualDeviceConfigSpec->new(operation => VirtualDeviceConfigSpecOperation->new('edit'),
device => $diskSpec,
);
my $vmspec = VirtualMachineConfigSpec->new(deviceChange => [$devspec]);
print Dumper($vmspec);
print Dumper($diskSpec);
eval {
print $vmspec;
print "space\n";
print $diskSpec;
print $operation . " vFlash for " . $vm->name . " with blocksize of " . $blocksize . " KB and reservation of " . $reservation . " MB \n";
my $task = $vm->ReconfigVM_Task(spec => $vmspec);
my $msg = "\tSucessfully reconfigured " . $vm->name . "\n";
&getStatus($task,$msg);
};
if($@) {
print "ERROR " . $@ . "\n";
}
} else {
print "Invalid Selection!\n";
exit 1;
}