From 72ceb84c9be524587c7a37b52fc732c91f27ded2 Mon Sep 17 00:00:00 2001 From: "tao.gan" Date: Fri, 9 Jan 2026 17:20:13 +0800 Subject: [PATCH] [compute]: vmConfigs; + + public String volumeVO; + public List volumeConfigs; + + public String vmNicVO; + public List vmNicConfigs; + + // value = List + public Map> volumeSnapshots; + + // VolumeSnapshotGroupVO.toString + public List volumeSnapshotGroupVO; + // VolumeSnapshotGroupRefVO.toString + public List volumeSnapshotGroupRefVO; + + // value = VolumeSnapshotReferenceVO.toString + public Map volumeSnapshotReferenceVO; + // value = VolumeSnapshotReferenceTreeVO.toString + public Map volumeSnapshotReferenceTreeVO; + } + + private void handle(final APIRecoverVmInstanceMsg msg) { + // 从 元数据的中获取 +// VmInstanceVO vo1 = new VmInstanceVO(); + + // root 和 data volume +// VolumeVO vo2 = new VolumeVO(); + + // 快照 存储/tree/parent/psuuid +// final VolumeSnapshotVO vo3 = new VolumeSnapshotVO(); + // 创建快照的快照树 + + // 快照组 +// newGroup = new VolumeSnapshotGroupVO(); +// newGroup.setUuid(Platform.getUuid()); +// newGroup.setName(String.format("revert-vm-point-%s-%s", vmUuid, TimeUtils.getCurrentTimeStamp("yyyyMMddHHmmss"))); +// newGroup.setDescription(String.format("save snapshot for revert vm [uuid:%s]", vmUuid)); +// newGroup.setSnapshotCount(snapshots.size()); +// newGroup.setVmInstanceUuid(vmUuid); +// newGroup.setAccountUuid(msg.getSession().getAccountUuid()); +// dbf.persist(newGroup); + + // 快照组ref +// VolumeSnapshotGroupRefVO ref = new VolumeSnapshotGroupRefVO(); +// ref.setVolumeUuid(inv.getVolumeUuid()); +// ref.setVolumeName(vols.get(inv.getVolumeUuid()).getName()); +// ref.setVolumeType(inv.getVolumeType()); +// ref.setVolumeSnapshotGroupUuid(group.getUuid()); +// ref.setVolumeSnapshotUuid(inv.getUuid()); +// ref.setVolumeSnapshotName(inv.getName()); +// ref.setVolumeSnapshotInstallPath(inv.getPrimaryStorageInstallPath()); +// ref.setDeviceId(vols.get(inv.getVolumeUuid()).getDeviceId()); +// ref.setVolumeLastAttachDate(vols.get(inv.getVolumeUuid()).getLastAttachDate()); + + // 解析配置 + // xml 字段 与 控制面配置的映射 + + // 给资源加配置 + + List vms = Q.New(VmInstanceVO.class).list(); + List volumes = Q.New(VolumeVO.class).list(); + List nics = Q.New(VmNicVO.class).list(); + + List snapshot = Q.New(VolumeSnapshotVO.class).list(); + List group = Q.New(VolumeSnapshotGroupVO.class).list(); + List groupRef = Q.New(VolumeSnapshotGroupRefVO.class).list(); + + VmMetadata vmMetadata = new VmMetadata(); + vmMetadata.vmInstanceVO = JSONObjectUtil.toJsonString(vms.get(0)); + vmMetadata.volumeVO = JSONObjectUtil.toJsonString(volumes.get(0)); + vmMetadata.vmNicVO = JSONObjectUtil.toJsonString(nics.get(0)); + + Map> volumeSnapshots = new HashMap<>(); + snapshot.forEach(s -> { + if (volumeSnapshots.containsKey(s.getVolumeUuid())) { + volumeSnapshots.get(s.getVolumeUuid()).add(JSONObjectUtil.toJsonString(VolumeSnapshotInventory.valueOf(s))); + } else { + volumeSnapshots.put(s.getVolumeUuid(), new ArrayList<>()); + volumeSnapshots.get(s.getVolumeUuid()).add(JSONObjectUtil.toJsonString(VolumeSnapshotInventory.valueOf(s))); + } + }); + vmMetadata.volumeSnapshots = volumeSnapshots; + + vmMetadata.volumeSnapshotGroupVO = group.stream().map(JSONObjectUtil::toJsonString).collect(Collectors.toList()); + vmMetadata.volumeSnapshotGroupRefVO = groupRef.stream().map(JSONObjectUtil::toJsonString).collect(Collectors.toList()); + + String json = JSONObjectUtil.toJsonString(vmMetadata); + logger.info(String.format("recover vm instance [uuid:%s] with metadata: %s", vms.get(0).getUuid(), json)); + } }