Search in sources :

Example 91 with Task

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());
    }
}
Also used : HostMO(com.cloud.hypervisor.vmware.mo.HostMO) HostInternetScsiHba(com.vmware.vim25.HostInternetScsiHba) ExecutorService(java.util.concurrent.ExecutorService) ArrayList(java.util.ArrayList) HostStorageSystemMO(com.cloud.hypervisor.vmware.mo.HostStorageSystemMO) HostHostBusAdapter(com.vmware.vim25.HostHostBusAdapter) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) RemoteException(java.rmi.RemoteException) UnsupportedEncodingException(java.io.UnsupportedEncodingException)

Example 92 with Task

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'.");
    }
}
Also used : HostMO(com.cloud.hypervisor.vmware.mo.HostMO) HostInternetScsiHbaStaticTarget(com.vmware.vim25.HostInternetScsiHbaStaticTarget) ArrayList(java.util.ArrayList) HostDatastoreSystemMO(com.cloud.hypervisor.vmware.mo.HostDatastoreSystemMO) DatastoreMO(com.cloud.hypervisor.vmware.mo.DatastoreMO) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) RemoteException(java.rmi.RemoteException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) ExecutorService(java.util.concurrent.ExecutorService) ArrayList(java.util.ArrayList) List(java.util.List) Map(java.util.Map) HashMap(java.util.HashMap) ManagedObjectReference(com.vmware.vim25.ManagedObjectReference)

Example 93 with Task

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));
        }
    });
}
Also used : VirtualMachineCloneSpec(com.vmware.vim25.VirtualMachineCloneSpec) UniverseException(org.corfudb.universe.universe.UniverseException) Properties(java.util.Properties) Folder(com.vmware.vim25.mo.Folder) ManagedObjectReference(com.vmware.vim25.ManagedObjectReference)

Example 94 with Task

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"));
}
Also used : VmInputs(io.cloudslang.content.vmware.entities.VmInputs) CustomizationSpec(com.vmware.vim25.CustomizationSpec) ConnectionResources(io.cloudslang.content.vmware.connection.ConnectionResources) Matchers.anyString(org.mockito.Matchers.anyString) GuestInputs(io.cloudslang.content.vmware.entities.GuestInputs) ManagedObjectReference(com.vmware.vim25.ManagedObjectReference) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 95 with Task

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"));
}
Also used : VmInputs(io.cloudslang.content.vmware.entities.VmInputs) CustomizationSpec(com.vmware.vim25.CustomizationSpec) ConnectionResources(io.cloudslang.content.vmware.connection.ConnectionResources) Matchers.anyString(org.mockito.Matchers.anyString) GuestInputs(io.cloudslang.content.vmware.entities.GuestInputs) ManagedObjectReference(com.vmware.vim25.ManagedObjectReference) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Aggregations

ManagedObjectReference (com.vmware.vim25.ManagedObjectReference)59 Task (com.vmware.vim25.mo.Task)28 TaskInfo (com.vmware.vim25.TaskInfo)23 ArrayList (java.util.ArrayList)21 RemoteException (java.rmi.RemoteException)19 QueryTask (com.vmware.xenon.services.common.QueryTask)14 Operation (com.vmware.xenon.common.Operation)13 List (java.util.List)13 ArrayOfManagedObjectReference (com.vmware.vim25.ArrayOfManagedObjectReference)11 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)10 QueryUtils (com.vmware.photon.controller.model.query.QueryUtils)10 ComputeState (com.vmware.photon.controller.model.resources.ComputeService.ComputeState)10 ComputeDescriptionService (com.vmware.photon.controller.model.resources.ComputeDescriptionService)9 DiskService (com.vmware.photon.controller.model.resources.DiskService)9 PhotonModelUriUtils (com.vmware.photon.controller.model.util.PhotonModelUriUtils)9 TaskInfoState (com.vmware.vim25.TaskInfoState)9 ComputeService (com.vmware.photon.controller.model.resources.ComputeService)8 RuntimeFaultFaultMsg (com.vmware.vim25.RuntimeFaultFaultMsg)8 InvalidPropertyFaultMsg (com.vmware.vim25.InvalidPropertyFaultMsg)7 VirtualMachine (com.vmware.vim25.mo.VirtualMachine)7