Ejemplo n.º 1
0
  private boolean checkCanPerformRegularUpdate() {
    boolean retValue = true;
    if (_oldDisk.getDiskInterface() != getParameters().getDiskInfo().getDiskInterface()) {
      List<VmNetworkInterface> allVmInterfaces =
          DbFacade.getInstance().getVmNetworkInterfaceDao().getAllForVm(getVmId());

      List<Disk> allVmDisks = getDiskDao().getAllForVm(getVmId());
      allVmDisks.removeAll(
          LinqUtils.filter(
              allVmDisks,
              new Predicate<Disk>() {
                @Override
                public boolean eval(Disk o) {
                  return o.getId().equals(_oldDisk.getId());
                }
              }));
      allVmDisks.add(getParameters().getDiskInfo());
      if (!checkPciAndIdeLimit(
          getVm().getnum_of_monitors(),
          allVmInterfaces,
          allVmDisks,
          getReturnValue().getCanDoActionMessages())) {
        retValue = false;
      }
    }

    // Validate update boot disk.
    if (retValue && getParameters().getDiskInfo().isBoot()) {
      VmHandler.updateDisksFromDb(getVm());
      for (Disk disk : getVm().getDiskMap().values()) {
        if (disk.isBoot() && !disk.getId().equals(_oldDisk.getId())) {
          retValue = false;
          addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_DISK_BOOT_IN_USE);
          getReturnValue()
              .getCanDoActionMessages()
              .add(String.format("$DiskName %1$s", disk.getDiskAlias()));
          break;
        }
      }
    }

    // Set disk alias name in the disk retrieved from the parameters.
    ImagesHandler.setDiskAlias(getParameters().getDiskInfo(), getVm());
    return retValue && validateShareableDisk();
  }
Ejemplo n.º 2
0
  public String generateOvfConfigurationForVm(VM vm) {
    if (VMStatus.ImageLocked != vm.getStatus()) {
      VmHandler.updateDisksFromDb(vm);
      DiskImagesValidator validator = new DiskImagesValidator(vm.getDiskList());
      if (validator.diskImagesNotLocked().isValid()) {
        loadVmData(vm);
        Long currentDbGeneration = getDbFacade().getVmStaticDao().getDbGeneration(vm.getId());
        // currentDbGeneration can be null in case that the vm was deleted during the run of
        // OvfDataUpdater.
        if (currentDbGeneration != null
            && vm.getStaticData().getDbGeneration() == currentDbGeneration) {
          return buildMetadataDictionaryForVm(vm);
        }
      }
    }

    return null;
  }