in cloud-vmware-server/src/main/java/jetbrains/buildServer/clouds/vmware/VmwareCloudImage.java [93:127]
private VmwareCloudInstance getExistingInstanceToStart(@NotNull final VmwareSourceState currentSourceState) throws VmwareCheckedCloudException {
final VmwareInstance imageVm = myApiConnector.getInstanceDetails(myImageDetails.getSourceVmName());
final AtomicReference<VmwareCloudInstance> candidate = new AtomicReference<VmwareCloudInstance>();
processStoppedInstances(new Function<VmwareInstance, Boolean>() {
public Boolean fun(final VmwareInstance vmInstance) {
final String vmName = vmInstance.getName();
final VmwareCloudInstance instance = findInstanceById(vmName);
if (instance != null) {
if (myImageDetails.useCurrentVersion()) {
if (!imageVm.getChangeVersion().equals(vmInstance.getChangeVersion())) {
LOG.info(String.format("Change version for %s is outdated: '%s' vs '%s'", vmName, vmInstance.getChangeVersion(), imageVm.getChangeVersion()));
deleteInstance(instance);
return false;
}
} else {
final VmwareSourceState vmSourceState = vmInstance.getVmSourceState();
if (!currentSourceState.equals(vmSourceState)){
LOG.info(String.format("Source for VM %s has been changed: %s", vmName, currentSourceState.getDiffMessage(vmSourceState)));
deleteInstance(instance);
return false;
}
}
}
LOG.info("Will use existing VM " + vmInstance);
candidate.set(instance);
return true;
}
});
if (candidate.get() != null){
return candidate.get();
}
return null;
}