public Map checkImages()

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