2016-08-23 8 views
0

Я пытаюсь клонировать виртуальную машину, и я хочу изменить емкость диска.Изменение размера виртуального диска с использованием Java API Java

int virtualDisksCount = 0; 
    VirtualDisk virtualDisk = null; 
    for (VirtualDevice virtualDevice : virtualHardware.getDevice()) { 
     if (virtualDevice instanceof VirtualDisk) { 
      virtualDisksCount++; 
      virtualDisk = (VirtualDisk) virtualDevice; 
     } 
    } 
    if (virtualDisksCount == 1) { 
     VirtualDeviceConfigSpec discSpec = new VirtualDeviceConfigSpec(); 
     discSpec.setOperation(VirtualDeviceConfigSpecOperation.EDIT); 

     virtualDisk.setCapacityInBytes(155500000000l); 
     virtualDisk.setCapacityInKB(155500000000000000l); 


     discSpec.setDevice(virtualDisk); 

     return discSpec; 
    } 

Исключение кода исключает: Недействительная операция для устройства «0». Я передал эти параметры в CloneVm_Task и в ReconfigureVM_Task, произошли те же ошибки

Как я могу изменить емкость виртуального диска? Использование Vsphere 5.5

+1

Столкнутые Аналогичный вопрос – bopomofu

+0

я нашел исправить. Вы можете создать изображение с минимальным необходимым жестким диском, например 10 ГБ, тогда вы должны использовать DiskManager для расширения размера. Таким образом, мы делаем только расширение жесткого диска без сжатия –

+0

Вы имеете в виду использование объекта данных virtualDiskManager? Можете ли вы помочь в разработке, как это сделать, мы даже не захватили DiskObjectId из VirtualDevice - он вернулся NULL – bopomofu

ответ

1

Я не кодирую на Java, но для меня это достаточно близко к C#. Прежде всего для этого вам нужно получить информацию о диске, а затем вытащить файл virtualdeviceconfigspec, изменить его, а затем добавить к нему обратно. Вы создаете новую спецификацию, а затем устанавливаете свойства. Кроме того, почему вы устанавливаете размер в байтах, тогда kb ???

Вот все Java я мог собрать ...

myDisk.setCapacityInKB(Long.parseLong(50)*1024*1024); 
VirtualDeviceConfigSpec vdConfigSpec = new VirtualDeviceConfigSpec(); 
vdConfigSpec.setDevice(myDisk); 
vdConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.edit); 
VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); 
vmConfigSpec.setDeviceChange(new VirtualDeviceConfigSpec[]{vdConfigSpec}); 
Task task = vm.reconfigVM_Task(vmConfigSpec); 
+0

Можете ли вы, пожалуйста, поделиться частью своего кода, пожалуйста. –

+0

Я не буду публиковать свой код, потому что он слишком длинный и является C#. Это лучший код, который я мог бы собрать на Java (прошло много лет с тех пор, как я использовал Java). После того, как вы получите диск, который хотите изменить, это код, который вам нужен. Я обозначил диск «myDisk». Я добавил код к моему ответу выше. Я надеюсь, что это помогает. Дайте знать, если у вас появятся вопросы. –

+0

Я пробовал то же самое, но говорит, что редактирование операции не разрешено. Я пытался использовать DiskManager API, и он работает. Какую версию vsphere вы используете? –