Search in sources :

Example 56 with Task

use of com.vmware.vim25.mo.Task in project photon-model by vmware.

the class VSphereVMSnapshotEnumerationHelper method processSnapshot.

static void processSnapshot(VSphereIncrementalEnumerationService service, VirtualMachineSnapshotTree current, String parentLink, EnumerationProgress enumerationProgress, VmOverlay vm, String vmSelfLink) {
    enumerationProgress.getSnapshotTracker().register();
    QueryTask task = queryForSnapshot(enumerationProgress, current.getId().toString(), vmSelfLink);
    VsphereEnumerationHelper.withTaskResults(service, task, (ServiceDocumentQueryResult result) -> {
        VsphereEnumerationHelper.submitWorkToVSpherePool(service, () -> {
            SnapshotState snapshotState = constructSnapshot(service, current, parentLink, vmSelfLink, enumerationProgress, vm);
            if (result.documentLinks.isEmpty()) {
                VSphereVirtualMachineEnumerationHelper.createSnapshot(service, snapshotState).thenCompose(createdSnapshotState -> trackAndProcessChildSnapshots(service, current, enumerationProgress, vm, vmSelfLink, createdSnapshotState)).whenComplete((ss, e) -> {
                    if (e != null) {
                        service.log(Level.SEVERE, "Creation of snapshot with name {%s} failed.", snapshotState.name);
                    }
                    enumerationProgress.getSnapshotTracker().arrive();
                });
            } else {
                SnapshotState oldState = VsphereEnumerationHelper.convertOnlyResultToDocument(result, SnapshotState.class);
                updateSnapshot(service, enumerationProgress, vm, oldState, snapshotState, current.getId().toString()).thenCompose(updatedSnapshotState -> trackAndProcessChildSnapshots(service, current, enumerationProgress, vm, vmSelfLink, updatedSnapshotState)).whenComplete((ss, e) -> {
                    if (e != null) {
                        service.logSevere("Updating of snapshot with name {%s}, selfLink {%s} failed", snapshotState.name, oldState.documentSelfLink);
                    }
                    enumerationProgress.getSnapshotTracker().arrive();
                });
            }
        });
    });
}
Also used : ComputeEnumerateResourceRequest(com.vmware.photon.controller.model.adapterapi.ComputeEnumerateResourceRequest) Operation(com.vmware.xenon.common.Operation) QueryTask(com.vmware.xenon.services.common.QueryTask) QueryUtils(com.vmware.photon.controller.model.query.QueryUtils) SnapshotState(com.vmware.photon.controller.model.resources.SnapshotService.SnapshotState) Level(java.util.logging.Level) HashSet(java.util.HashSet) List(java.util.List) CollectionUtils(org.apache.commons.collections.CollectionUtils) ComputeState(com.vmware.photon.controller.model.resources.ComputeService.ComputeState) VirtualMachineSnapshotTree(com.vmware.vim25.VirtualMachineSnapshotTree) DeferredResult(com.vmware.xenon.common.DeferredResult) UriUtils(com.vmware.xenon.common.UriUtils) ServiceDocumentQueryResult(com.vmware.xenon.common.ServiceDocumentQueryResult) Builder(com.vmware.xenon.services.common.QueryTask.Query.Builder) QueryTask(com.vmware.xenon.services.common.QueryTask) SnapshotState(com.vmware.photon.controller.model.resources.SnapshotService.SnapshotState) ServiceDocumentQueryResult(com.vmware.xenon.common.ServiceDocumentQueryResult)

Example 57 with Task

use of com.vmware.vim25.mo.Task in project photon-model by vmware.

the class VsphereFolderEnumerationHelper method handleFolderChanges.

public static void handleFolderChanges(VSphereIncrementalEnumerationService service, List<FolderOverlay> folderOverlays, EnumerationProgress enumerationProgress, EnumerationClient client) {
    enumerationProgress.expectFolderCount(folderOverlays.size());
    for (FolderOverlay folderOverlay : folderOverlays) {
        try {
            if (ObjectUpdateKind.ENTER == folderOverlay.getObjectUpdateKind()) {
                createFolder(service, enumerationProgress, folderOverlay, Collections.emptyList(), client);
            } else {
                QueryTask task = queryForFolder(enumerationProgress, folderOverlay);
                withTaskResults(service, task, result -> {
                    if (!result.documentLinks.isEmpty()) {
                        ResourceGroupState oldDocument = convertOnlyResultToDocument(result, ResourceGroupState.class);
                        if (ObjectUpdateKind.MODIFY.equals(folderOverlay.getObjectUpdateKind())) {
                            try {
                                updateFolder(service, enumerationProgress, folderOverlay, oldDocument, Collections.emptyList(), client, false);
                            } catch (Exception e) {
                                service.logSevere("Error occurred while processing folder!", e);
                                enumerationProgress.getFolderTracker().track(folderOverlay.getId(), ResourceTracker.ERROR);
                            }
                        } else {
                            Operation.createDelete(PhotonModelUriUtils.createInventoryUri(service.getHost(), oldDocument.documentSelfLink)).setCompletion((o, e) -> {
                                enumerationProgress.getFolderTracker().track();
                            }).sendWith(service);
                        }
                    } else {
                        enumerationProgress.getFolderTracker().track();
                    }
                });
            }
        } catch (Exception e) {
            service.logSevere("Error occurred while processing folder!", e);
            enumerationProgress.getFolderTracker().track(folderOverlay.getId(), ResourceTracker.ERROR);
        }
    }
}
Also used : AdapterUtils(com.vmware.photon.controller.model.adapters.util.AdapterUtils) ComputeProperties(com.vmware.photon.controller.model.ComputeProperties) ResourceState(com.vmware.photon.controller.model.resources.ResourceState) PhotonModelUriUtils(com.vmware.photon.controller.model.util.PhotonModelUriUtils) Operation(com.vmware.xenon.common.Operation) QueryTask(com.vmware.xenon.services.common.QueryTask) QueryUtils(com.vmware.photon.controller.model.query.QueryUtils) ObjectUpdateKind(com.vmware.vim25.ObjectUpdateKind) RuntimeFaultFaultMsg(com.vmware.vim25.RuntimeFaultFaultMsg) ResourceGroupState(com.vmware.photon.controller.model.resources.ResourceGroupService.ResourceGroupState) VimNames(com.vmware.photon.controller.model.adapters.vsphere.util.VimNames) ManagedObjectReference(com.vmware.vim25.ManagedObjectReference) VsphereEnumerationHelper.getSelfLinkFromOperation(com.vmware.photon.controller.model.adapters.vsphere.VsphereEnumerationHelper.getSelfLinkFromOperation) ResourceGroupService(com.vmware.photon.controller.model.resources.ResourceGroupService) List(java.util.List) InvalidPropertyFaultMsg(com.vmware.vim25.InvalidPropertyFaultMsg) VsphereEnumerationHelper.convertOnlyResultToDocument(com.vmware.photon.controller.model.adapters.vsphere.VsphereEnumerationHelper.convertOnlyResultToDocument) CompletionHandler(com.vmware.xenon.common.Operation.CompletionHandler) VsphereEnumerationHelper.withTaskResults(com.vmware.photon.controller.model.adapters.vsphere.VsphereEnumerationHelper.withTaskResults) ServiceDocumentQueryResult(com.vmware.xenon.common.ServiceDocumentQueryResult) Builder(com.vmware.xenon.services.common.QueryTask.Query.Builder) Collections(java.util.Collections) QueryTask(com.vmware.xenon.services.common.QueryTask) ResourceGroupState(com.vmware.photon.controller.model.resources.ResourceGroupService.ResourceGroupState)

Example 58 with Task

use of com.vmware.vim25.mo.Task in project photon-model by vmware.

the class VSphereNetworkEnumerationHelper method handleNetworkChanges.

/**
 * Handles incremental changes on networks.
 *
 * @param service             the incremental service
 * @param networks            the filtered network overlays
 * @param enumerationProgress the context for enumeration.
 * @param client              the enumeration client
 */
public static void handleNetworkChanges(VSphereIncrementalEnumerationService service, MoRefKeyedMap<NetworkOverlay> networks, EnumerationProgress enumerationProgress, EnumerationClient client) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
    enumerationProgress.expectNetworkCount(networks.values().size());
    for (NetworkOverlay netOverlay : networks.values()) {
        // if a network | DVS | DV port group is added.
        if (ObjectUpdateKind.ENTER == netOverlay.getObjectUpdateKind()) {
            // if DV port group is added
            if (netOverlay.getParentSwitch() != null) {
                // check if the parent switch is present as part of this enumeration
                NetworkOverlay parentSwitch = networks.get(netOverlay.getParentSwitch());
                String dvsUUID;
                if (parentSwitch == null) {
                    // retrieve the uuid from vCenter
                    dvsUUID = client.getUUIDForDVS(netOverlay);
                } else {
                    dvsUUID = parentSwitch.getDvsUuid();
                }
                createNewSubnet(service, enumerationProgress, netOverlay, dvsUUID);
            } else {
                createNewNetwork(service, enumerationProgress, netOverlay);
            }
        } else {
            // if DV port group is changed
            if (netOverlay.getId().getType().equals(VimNames.TYPE_PORTGROUP)) {
                ManagedObjectReference parentSwitch = netOverlay.getParentSwitch();
                // if parent is not retrieved, Retrieve it.
                if (null == parentSwitch && ObjectUpdateKind.MODIFY.equals(netOverlay.getObjectUpdateKind())) {
                    parentSwitch = client.getParentSwitchForDVPortGroup(netOverlay.getId());
                }
                QueryTask task = queryForSubnet(enumerationProgress, netOverlay, parentSwitch);
                withTaskResults(service, task, (ServiceDocumentQueryResult result) -> {
                    if (!result.documentLinks.isEmpty()) {
                        SubnetState oldDocument = convertOnlyResultToDocument(result, SubnetState.class);
                        if (ObjectUpdateKind.MODIFY.equals(netOverlay.getObjectUpdateKind())) {
                            updateSubnet(service, oldDocument, enumerationProgress, netOverlay, false);
                        } else {
                            // DV port group has been removed. Remove the subnet state document.
                            deleteNetwork(service, enumerationProgress, netOverlay, oldDocument);
                        }
                    } else {
                        enumerationProgress.getNetworkTracker().track();
                    }
                });
            } else {
                // DVS or Opaque network.
                QueryTask task = queryForNetwork(enumerationProgress, netOverlay);
                VsphereEnumerationHelper.withTaskResults(service, task, result -> {
                    if (!result.documentLinks.isEmpty()) {
                        NetworkState oldDocument = convertOnlyResultToDocument(result, NetworkState.class);
                        if (ObjectUpdateKind.MODIFY.equals(netOverlay.getObjectUpdateKind())) {
                            updateNetwork(service, oldDocument, enumerationProgress, netOverlay);
                        } else {
                            deleteNetwork(service, enumerationProgress, netOverlay, oldDocument);
                        }
                    } else {
                        enumerationProgress.getNetworkTracker().track();
                    }
                });
            }
        }
    }
    try {
        enumerationProgress.getNetworkTracker().await();
    } catch (InterruptedException e) {
        service.logSevere("Interrupted during incremental enumeration for networks!", e);
    }
}
Also used : QueryTask(com.vmware.xenon.services.common.QueryTask) NetworkState(com.vmware.photon.controller.model.resources.NetworkService.NetworkState) SubnetState(com.vmware.photon.controller.model.resources.SubnetService.SubnetState) ServiceDocumentQueryResult(com.vmware.xenon.common.ServiceDocumentQueryResult) ManagedObjectReference(com.vmware.vim25.ManagedObjectReference)

Example 59 with Task

use of com.vmware.vim25.mo.Task in project photon-model by vmware.

the class PowerStateClient method hardPowerOff.

private void hardPowerOff(ManagedObjectReference vm) throws Exception {
    ManagedObjectReference task = getVimPort().powerOffVMTask(vm);
    awaitTaskEnd(task);
}
Also used : ManagedObjectReference(com.vmware.vim25.ManagedObjectReference)

Example 60 with Task

use of com.vmware.vim25.mo.Task in project photon-model by vmware.

the class PowerStateClient method changePowerState.

/**
 * @param vm
 * @param targetState
 * @param transition
 * @param politenessDeadlineMicros Used only when doing a soft power-off,
 *         how long to be polite before doing hard power-off.
 * @throws Exception
 */
public void changePowerState(ManagedObjectReference vm, PowerState targetState, PowerTransition transition, long politenessDeadlineMicros) throws Exception {
    PowerState currentState = getPowerState(vm);
    if (currentState == targetState) {
        return;
    }
    ManagedObjectReference task;
    if (targetState == PowerState.ON) {
        task = getVimPort().powerOnVMTask(vm, null);
        awaitTaskEnd(task);
        return;
    }
    if (currentState == PowerState.ON && targetState == PowerState.SUSPEND) {
        task = getVimPort().suspendVMTask(vm);
        awaitTaskEnd(task);
        return;
    }
    if (currentState == PowerState.SUSPEND && targetState == PowerState.OFF) {
        // In SUSPENDED state only "Power.Off" and "Power.On" operations are valid, "Power.Off" corresponds to HardPowerOff
        hardPowerOff(vm);
    }
    if (currentState == PowerState.ON && targetState == PowerState.OFF) {
        if (transition == PowerTransition.SOFT) {
            softPowerOff(vm, politenessDeadlineMicros);
        } else {
            hardPowerOff(vm);
        }
    }
}
Also used : PowerState(com.vmware.photon.controller.model.resources.ComputeService.PowerState) VirtualMachinePowerState(com.vmware.vim25.VirtualMachinePowerState) ManagedObjectReference(com.vmware.vim25.ManagedObjectReference)

Aggregations

ManagedObjectReference (com.vmware.vim25.ManagedObjectReference)39 Task (com.vmware.vim25.mo.Task)27 TaskInfo (com.vmware.vim25.TaskInfo)21 RemoteException (java.rmi.RemoteException)17 ArrayList (java.util.ArrayList)15 QueryTask (com.vmware.xenon.services.common.QueryTask)14 Operation (com.vmware.xenon.common.Operation)13 List (java.util.List)12 PhotonModelUriUtils (com.vmware.photon.controller.model.util.PhotonModelUriUtils)11 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 TaskInfoState (com.vmware.vim25.TaskInfoState)9 ComputeService (com.vmware.photon.controller.model.resources.ComputeService)8 ArrayOfManagedObjectReference (com.vmware.vim25.ArrayOfManagedObjectReference)8 RuntimeFaultFaultMsg (com.vmware.vim25.RuntimeFaultFaultMsg)8 DeferredResult (com.vmware.xenon.common.DeferredResult)8 ComputeProperties (com.vmware.photon.controller.model.ComputeProperties)7 InvalidPropertyFaultMsg (com.vmware.vim25.InvalidPropertyFaultMsg)7