Ejemplo n.º 1
0
  /**
   * Actually process the VM device update in DB.
   *
   * @param vm
   */
  private void processVmDevices(Map vm) {
    if (vm == null || vm.get(VdsProperties.vm_guid) == null) {
      log.error("Received NULL VM or VM id when processing VM devices, abort.");
      return;
    }

    Guid vmId = new Guid((String) vm.get(VdsProperties.vm_guid));
    Set<Guid> processedDevices = new HashSet<Guid>();
    List<VmDevice> devices = getDbFacade().getVmDeviceDao().getVmDeviceByVmId(vmId);
    Map<VmDeviceId, VmDevice> deviceMap = Entities.businessEntitiesById(devices);

    for (Object o : (Object[]) vm.get(VdsProperties.Devices)) {
      Map device = (Map<String, Object>) o;
      if (device.get(VdsProperties.Address) == null) {
        logDeviceInformation(vmId, device);
        continue;
      }

      Guid deviceId = getDeviceId(device);
      VmDevice vmDevice = deviceMap.get(new VmDeviceId(deviceId, vmId));
      String logicalName = null;
      if (deviceId != null
          && FeatureSupported.reportedDisksLogicalNames(
              getVdsManager().getGroupCompatibilityVersion())
          && VmDeviceType.DISK.getName().equals(device.get(VdsProperties.Device))) {
        try {
          logicalName =
              getDeviceLogicalName((Map<?, ?>) vm.get(VdsProperties.GuestDiskMapping), deviceId);
        } catch (Exception e) {
          log.error(
              "error while getting device name when processing, vm '{}', device info '{}' with exception, skipping '{}'",
              vmId,
              device,
              e.getMessage());
          log.error("Exception", e);
        }
      }

      if (deviceId == null || vmDevice == null) {
        deviceId = addNewVmDevice(vmId, device, logicalName);
      } else {
        vmDevice.setIsPlugged(Boolean.TRUE);
        vmDevice.setAddress(((Map<String, String>) device.get(VdsProperties.Address)).toString());
        vmDevice.setAlias(StringUtils.defaultString((String) device.get(VdsProperties.Alias)));
        vmDevice.setLogicalName(logicalName);
        addVmDeviceToList(vmDevice);
      }

      processedDevices.add(deviceId);
    }

    handleRemovedDevices(vmId, processedDevices, devices);
  }
  @Override
  protected void executeQueryCommand() {
    List<VmTemplate> vmTemplateList =
        getDbFacade().getVmTemplateDao().getAllForNetwork(getParameters().getId());
    List<VmNetworkInterface> vmNetworkInterfaceList =
        getDbFacade()
            .getVmNetworkInterfaceDao()
            .getAllForTemplatesByNetwork(getParameters().getId());

    final Map<Guid, VmTemplate> vmTemplatesById = Entities.businessEntitiesById(vmTemplateList);

    List<PairQueryable<VmNetworkInterface, VmTemplate>> vmInterfaceVmPairs =
        new ArrayList<PairQueryable<VmNetworkInterface, VmTemplate>>();
    for (VmNetworkInterface vmNetworkInterface : vmNetworkInterfaceList) {
      vmInterfaceVmPairs.add(
          new PairQueryable<VmNetworkInterface, VmTemplate>(
              vmNetworkInterface, vmTemplatesById.get(vmNetworkInterface.getVmTemplateId())));
    }

    getQueryReturnValue().setReturnValue(vmInterfaceVmPairs);
  }