mirror of https://github.com/apache/cloudstack.git
CLOUDSTACK-4352. In VMWare, to resize an offline volume we create a worker vm. When a volume is being shrinked or when it is resized to the same size delete the vm before returning.
This commit is contained in:
parent
25f15bd355
commit
2e0ad8e573
|
|
@ -657,6 +657,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
|
|||
}
|
||||
VirtualDisk disk = vdisk.first();
|
||||
long oldSize = disk.getCapacityInKB();
|
||||
if (newSize <= oldSize && useWorkerVm == true) {
|
||||
deleteWorkerVm(vmMo, vmdkDataStorePath);
|
||||
}
|
||||
if (newSize < oldSize){
|
||||
throw new Exception("VMware doesn't support shrinking volume from larger size: " + oldSize+ " MB to a smaller size: " + newSize + " MB");
|
||||
} else if(newSize == oldSize){
|
||||
|
|
@ -671,14 +674,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
|
|||
vmConfigSpec.getDeviceChange().add(deviceConfigSpec);
|
||||
if (!vmMo.configureVm(vmConfigSpec)) {
|
||||
if (useWorkerVm == true) {
|
||||
vmMo.detachDisk(vmdkDataStorePath, false);
|
||||
vmMo.destroy();
|
||||
deleteWorkerVm(vmMo, vmdkDataStorePath);
|
||||
}
|
||||
throw new Exception("Failed to configure VM to resize disk. vmName: " + vmName);
|
||||
}
|
||||
if (useWorkerVm == true) {
|
||||
vmMo.detachDisk(vmdkDataStorePath, false);
|
||||
vmMo.destroy();
|
||||
deleteWorkerVm(vmMo, vmdkDataStorePath);
|
||||
}
|
||||
return new ResizeVolumeAnswer(cmd, true, "success", newSize*1024);
|
||||
} catch (Exception e) {
|
||||
|
|
@ -688,6 +689,18 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
|
|||
}
|
||||
}
|
||||
|
||||
private void deleteWorkerVm(VirtualMachineMO vmMo, String vmdkDataStorePath) {
|
||||
try {
|
||||
if (vmMo != null) {
|
||||
s_logger.info("Delete worker VM " + vmMo.getVmName());
|
||||
vmMo.detachDisk(vmdkDataStorePath, false);
|
||||
vmMo.destroy();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
s_logger.error("Unable to destroy worker vm", e);
|
||||
}
|
||||
}
|
||||
|
||||
protected Answer execute(CheckNetworkCommand cmd) {
|
||||
if (s_logger.isInfoEnabled()) {
|
||||
s_logger.info("Executing resource CheckNetworkCommand " + _gson.toJson(cmd));
|
||||
|
|
|
|||
Loading…
Reference in New Issue