in cloud-vmware-server/src/main/java/jetbrains/buildServer/clouds/vmware/connector/VMWareApiConnectorImpl.java [1200:1251]
public Map<VmwareCloudImage, TypedCloudErrorInfo[]> checkImages(@NotNull final Collection<VmwareCloudImage> images) {
final Set<String> imageNames = images.stream().map(img->img.getImageDetails().getSourceVmName()).collect(Collectors.toSet());
final Map<VmwareCloudImage, TypedCloudErrorInfo[]> retval = new HashMap<>();
final Map<String, VirtualMachine> imageVms;
try {
imageVms = searchVMsByNames(imageNames, null);
} catch (VmwareCheckedCloudException e) {
LOG.warnAndDebugDetails("An error occurred during seaching for VMs", e);
images.forEach(image->{
retval.put(image, new TypedCloudErrorInfo[]{TypedCloudErrorInfo.fromException(e)});
});
return retval;
}
images.forEach(image->{
final VmwareCloudImageDetails imageDetails = image.getImageDetails();
final VirtualMachine vm = imageVms.get(imageDetails.getSourceVmName());
if (vm == null){
retval.put(image, new TypedCloudErrorInfo[]{new TypedCloudErrorInfo("NoVM", "No such VM: " + imageDetails.getSourceVmName())});
return;
}
if (!imageDetails.getBehaviour().isUseOriginal() && !imageDetails.useCurrentVersion()) {
final String snapshotName = imageDetails.getSnapshotName();
final Map<String, VirtualMachineSnapshotTree> snapshotList = getSnapshotList(vm);
final String latestSnapshot = getLatestSnapshot(snapshotName, snapshotList);
if (StringUtil.isNotEmpty(snapshotName) && latestSnapshot == null) {
retval.put(image, new TypedCloudErrorInfo[]{new TypedCloudErrorInfo("NoSnapshot", "No such snapshot: " + snapshotName)});
return;
}
final VmwareSourceState actualState = VmwareSourceState.from(latestSnapshot, vm.getMOR().getVal());
image.updateActualSourceState(actualState);
if (myInstancesProvider != null) {
final Collection<VmwareCloudInstance> instances = image.getInstances();
for (VmwareCloudInstance instance : instances) {
if (!instance.isInPermanentStatus()) // instance is starting or stopping
continue;
final VmwareSourceState vmSourceState = instance.getSourceState();
if (!actualState.equals(vmSourceState)) {
LOG.info("marking instance expired: " + actualState.getDiffMessage(vmSourceState));
myInstancesProvider.markInstanceExpired(image.getProfile().getProfileId(), instance.getInstanceId());
}
}
} else {
LOG.debug("CloudInstancesProvider is null");
}
}
retval.put(image, new TypedCloudErrorInfo[0]);
});
return retval;
}