python pyvmomi set vflash cache - PullRequest
       19

python pyvmomi set vflash cache

0 голосов
/ 27 февраля 2019

Я пытаюсь программно включить флэш-кеш для коллекции виртуальных машин в 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;
}
...