private VmwareCloudInstance getExistingInstanceToStart()

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;
  }