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();
});
}
});
});
}
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);
}
}
}
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);
}
}
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);
}
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);
}
}
}
Aggregations