use of com.vmware.vim25.mo.Task in project cloudstack by apache.
the class VmwareStorageProcessor method rescanAllHosts.
private void rescanAllHosts(List<HostMO> lstHosts, boolean rescanHba, boolean rescanVmfs) throws Exception {
if (!rescanHba && !rescanVmfs) {
// nothing to do
return;
}
ExecutorService executorService = Executors.newFixedThreadPool(lstHosts.size());
final List<Exception> exceptions = new ArrayList<>();
for (HostMO host : lstHosts) {
HostStorageSystemMO hostStorageSystem = host.getHostStorageSystemMO();
boolean iScsiHbaConfigured = false;
for (HostHostBusAdapter hba : hostStorageSystem.getStorageDeviceInfo().getHostBusAdapter()) {
if (hba instanceof HostInternetScsiHba && ((HostInternetScsiHba) hba).isIsSoftwareBased()) {
iScsiHbaConfigured = true;
final String iScsiHbaDevice = hba.getDevice();
final HostStorageSystemMO hss = hostStorageSystem;
executorService.submit(new Thread(() -> {
try {
if (rescanHba) {
hss.rescanHba(iScsiHbaDevice);
}
if (rescanVmfs) {
hss.rescanVmfs();
}
} catch (Exception ex) {
synchronized (exceptions) {
exceptions.add(ex);
}
}
}));
}
}
if (!iScsiHbaConfigured) {
throw new Exception("An iSCSI HBA must be configured before a host can use iSCSI storage.");
}
}
executorService.shutdown();
if (!executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.MINUTES)) {
throw new Exception("The system timed out before completing the task 'rescanAllHosts'.");
}
if (exceptions.size() > 0) {
throw new Exception(exceptions.get(0).getMessage());
}
}
use of com.vmware.vim25.mo.Task in project cloudstack by apache.
the class VmwareStorageProcessor method handleTargets.
public void handleTargets(boolean add, ModifyTargetsCommand.TargetTypeToRemove targetTypeToRemove, boolean isRemoveAsync, List<Map<String, String>> targets, List<HostMO> lstHosts) throws Exception {
ExecutorService executorService = Executors.newFixedThreadPool(lstHosts.size());
for (HostMO host : lstHosts) {
List<HostMO> hosts = new ArrayList<>();
hosts.add(host);
List<Map<String, String>> dynamicTargetsForHost = new ArrayList<>();
List<Map<String, String>> staticTargetsForHost = new ArrayList<>();
for (Map<String, String> target : targets) {
String storageAddress = target.get(ModifyTargetsCommand.STORAGE_HOST);
HostDiscoveryMethod hostDiscoveryMethod = getHostDiscoveryMethod(storageAddress, hosts);
List<HostMO> hostsUsingDynamicDiscovery = hostDiscoveryMethod.getHostsUsingDynamicDiscovery();
if (hostsUsingDynamicDiscovery != null && hostsUsingDynamicDiscovery.size() > 0) {
dynamicTargetsForHost.add(target);
} else {
staticTargetsForHost.add(target);
}
}
if (add) {
executorService.submit(new Thread(() -> {
try {
boolean rescan = false;
if (staticTargetsForHost.size() > 0) {
addRemoveInternetScsiTargetsToAllHosts(true, getTargets(staticTargetsForHost), hosts);
rescan = true;
}
if (dynamicTargetsForHost.size() > 0) {
rescan = true;
}
if (rescan) {
rescanAllHosts(hosts, true, false);
List<HostInternetScsiHbaStaticTarget> targetsToAdd = new ArrayList<>();
targetsToAdd.addAll(getTargets(staticTargetsForHost));
targetsToAdd.addAll(getTargets(dynamicTargetsForHost));
for (HostInternetScsiHbaStaticTarget targetToAdd : targetsToAdd) {
HostDatastoreSystemMO hostDatastoreSystemMO = host.getHostDatastoreSystemMO();
String datastoreName = waitForDatastoreName(hostDatastoreSystemMO, targetToAdd.getIScsiName());
ManagedObjectReference morDs = hostDatastoreSystemMO.findDatastoreByName(datastoreName);
DatastoreMO datastoreMO = new DatastoreMO(host.getContext(), morDs);
mountVmfsDatastore2(datastoreMO, hosts);
}
}
} catch (Exception ex) {
s_logger.warn(ex.getMessage());
}
}));
} else {
List<HostInternetScsiHbaStaticTarget> targetsToRemove = new ArrayList<>();
if (staticTargetsForHost.size() > 0 && (ModifyTargetsCommand.TargetTypeToRemove.STATIC.equals(targetTypeToRemove) || ModifyTargetsCommand.TargetTypeToRemove.BOTH.equals(targetTypeToRemove))) {
targetsToRemove.addAll(getTargets(staticTargetsForHost));
}
if (dynamicTargetsForHost.size() > 0 && (ModifyTargetsCommand.TargetTypeToRemove.DYNAMIC.equals(targetTypeToRemove) || ModifyTargetsCommand.TargetTypeToRemove.BOTH.equals(targetTypeToRemove))) {
targetsToRemove.addAll(getTargets(dynamicTargetsForHost));
}
if (targetsToRemove.size() > 0) {
if (isRemoveAsync) {
new Thread(() -> handleRemove(targetsToRemove, host, hosts)).start();
} else {
executorService.submit(new Thread(() -> handleRemove(targetsToRemove, host, hosts)));
}
}
}
}
executorService.shutdown();
if (!executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.MINUTES)) {
throw new Exception("The system timed out before completing the task 'handleTargets'.");
}
}
use of com.vmware.vim25.mo.Task in project CorfuDB by CorfuDB.
the class VmManager method cloneVm.
/**
* Clone and powerOn a vm
*
* @return result of a clone task
*/
public Result<TaskInfo, UniverseException> cloneVm() {
log.info("Clone vm: {}", vmName);
// Find the template machine in the inventory and clone/create the vm from vmTemplate
return getVm(universeParams.getTemplateVMName()).flatMap(vmTemplate -> {
log.info("Cloning the VM {} via vSphere {}", vmName, universeParams.getVSphereUrl());
try {
Properties vmPropsResult = VmConfigPropertiesLoader.loadVmProperties().get();
ImmutableMap<String, String> vmProps = Maps.fromProperties(vmPropsResult);
// Create customization for cloning process
VirtualMachineCloneSpec cloneSpec = createLinuxCustomization(vmProps);
String folderProp = String.format("vm%d.%s", vmName.getIndex(), ResourceType.FOLDER.resource);
Folder folder;
if (vmProps.containsKey(folderProp)) {
ManagedObjectReference folderR = new ManagedObjectReference();
folderR.setType(ResourceType.FOLDER.resource);
String prop = vmProps.get(folderProp);
folderR.setVal(prop);
folder = new Folder(vmTemplate.getServerConnection(), folderR);
} else {
folder = (Folder) vmTemplate.getParent();
}
return executeTask(() -> vmTemplate.cloneVM_Task(folder, vmName.getName(), cloneSpec));
} catch (RuntimeException ex) {
return Result.error(new UniverseException(ex));
}
});
}
use of com.vmware.vim25.mo.Task in project cs-actions by CloudSlang.
the class GuestServiceTest method customizeLinuxVMSuccess.
@Test
public void customizeLinuxVMSuccess() throws Exception {
whenNew(MorObjectHandler.class).withNoArguments().thenReturn(morObjectHandlerMock);
when(httpInputsMock.isCloseSession()).thenReturn(true);
when(morObjectHandlerMock.getMor(any(ConnectionResources.class), anyString(), anyString())).thenReturn(vmMorMock);
whenNew(GuestConfigSpecs.class).withNoArguments().thenReturn(guestConfigSpecsMock);
when(guestConfigSpecsMock.getLinuxCustomizationSpec(any(GuestInputs.class))).thenReturn(customizationSpecMock);
doNothing().when(vimPortMock).checkCustomizationSpec(any(ManagedObjectReference.class), any(CustomizationSpec.class));
when(vimPortMock.customizeVMTask(any(ManagedObjectReference.class), any(CustomizationSpec.class))).thenReturn(taskMock);
whenNew(ResponseHelper.class).withArguments(any(ConnectionResources.class), any(ManagedObjectReference.class)).thenReturn(getResponseHelper(connectionResourcesMock, taskMock, true));
VmInputs vmInputs = new VmInputs.VmInputsBuilder().withVirtualMachineName("testLinuxVMName").build();
GuestInputs guestInputs = new GuestInputs.GuestInputsBuilder().build();
Map<String, String> results = guestService.customizeVM(httpInputsMock, vmInputs, guestInputs, false);
verifyConnection();
verify(morObjectHandlerMock, times(1)).getMor(any(ConnectionResources.class), anyString(), anyString());
verify(guestConfigSpecsMock, times(1)).getLinuxCustomizationSpec(any(GuestInputs.class));
verify(vimPortMock, times(1)).checkCustomizationSpec(any(ManagedObjectReference.class), any(CustomizationSpec.class));
verify(vimPortMock, times(1)).customizeVMTask(any(ManagedObjectReference.class), any(CustomizationSpec.class));
verify(taskMock, times(1)).getValue();
assertNotNull(results);
assertEquals(0, Integer.parseInt(results.get("returnCode")));
assertEquals("Success: The [testLinuxVMName] VM was successfully customized. The taskId is: task-12345", results.get("returnResult"));
}
use of com.vmware.vim25.mo.Task in project cs-actions by CloudSlang.
the class GuestServiceTest method customizeWinVMSuccess.
@Test
public void customizeWinVMSuccess() throws Exception {
whenNew(MorObjectHandler.class).withNoArguments().thenReturn(morObjectHandlerMock);
when(httpInputsMock.isCloseSession()).thenReturn(true);
when(morObjectHandlerMock.getMor(any(ConnectionResources.class), anyString(), anyString())).thenReturn(vmMorMock);
whenNew(GuestConfigSpecs.class).withNoArguments().thenReturn(guestConfigSpecsMock);
when(guestConfigSpecsMock.getWinCustomizationSpec(any(GuestInputs.class))).thenReturn(customizationSpecMock);
doNothing().when(vimPortMock).checkCustomizationSpec(any(ManagedObjectReference.class), any(CustomizationSpec.class));
when(vimPortMock.customizeVMTask(any(ManagedObjectReference.class), any(CustomizationSpec.class))).thenReturn(taskMock);
whenNew(ResponseHelper.class).withArguments(any(ConnectionResources.class), any(ManagedObjectReference.class)).thenReturn(getResponseHelper(connectionResourcesMock, taskMock, true));
VmInputs vmInputs = new VmInputs.VmInputsBuilder().withVirtualMachineName("testWinVMName").build();
GuestInputs guestInputs = new GuestInputs.GuestInputsBuilder().withRebootOption("noreboot").withLicenseDataMode("perServer").build();
Map<String, String> results = guestService.customizeVM(httpInputsMock, vmInputs, guestInputs, true);
verifyConnection();
verify(morObjectHandlerMock, times(1)).getMor(any(ConnectionResources.class), anyString(), anyString());
verify(guestConfigSpecsMock, times(1)).getWinCustomizationSpec(any(GuestInputs.class));
verify(vimPortMock, times(1)).checkCustomizationSpec(any(ManagedObjectReference.class), any(CustomizationSpec.class));
verify(vimPortMock, times(1)).customizeVMTask(any(ManagedObjectReference.class), any(CustomizationSpec.class));
verify(taskMock, times(1)).getValue();
assertNotNull(results);
assertEquals(0, Integer.parseInt(results.get("returnCode")));
assertEquals("Success: The [testWinVMName] VM was successfully customized. The taskId is: task-12345", results.get("returnResult"));
}
Aggregations