根据虚拟机获取虚拟机快照引用

在虚拟机的备份还原中,快照的引用是一个很重要的参数,获取获取虚拟磁盘、虚拟磁盘ChangeId以及快照信息都需要用到快照托管对象引用作为参数。下面给出根据虚拟机获取快照引用的方法代码:

/**
 * @Title: getSnapshotReference
 * @Description: 根据虚拟机获取快照引用
 * @param vmMOR
 * @param vmName
 * @param snapName
 * @return
 * @throws RuntimeFaultFaultMsg
 * @throws InvalidPropertyFaultMsg
 * @throws Exception
 * @version 1.0
 */
public ManagedObjectReference getSnapshotReference(ManagedObjectReference vmMOR, String vmName, String snapName)
    throws RuntimeFaultFaultMsg, InvalidPropertyFaultMsg, Exception {
  // 获取虚拟机快照信息
  VirtualMachineSnapshotInfo snapInfo =
      (VirtualMachineSnapshotInfo) retrieveEntityProps(vmMOR, new String[] {"snapshot"}).get("snapshot");
  ManagedObjectReference snapmor = null;
  if (snapInfo != null) {
    List<VirtualMachineSnapshotTree> listvmst = snapInfo.getRootSnapshotList();
    snapmor = traverseSnapshotInTree(listvmst, snapName, false);
    if (snapmor == null) {
      throw new Exception("在虚拟机" + vmName + "中没有找到名为: " + snapName + "的快照");
    }
  } else {
    throw new Exception("VirtualMachine : " + vmName + "中没有任何快照");
  }
  return snapmor;
}

获取实体属性(参考VMware SDK sample中的代码)

/**
 * @Title: entityProps
 * @Description: 获取实体属性
 * @param entityMor
 * @param props
 * @return
 * @throws InvalidPropertyFaultMsg
 * @throws RuntimeFaultFaultMsg
 * @version 1.0
 * @throws Exception
 */
public Map<String, Object> retrieveEntityProps(ManagedObjectReference entityMor, String[] props)
    throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, Exception {

  final HashMap<String, Object> retVal = new HashMap<String, Object>();

  // 使用 PropertySpec 、ObjectPec 创建 PropertyFilterSpec
  PropertyFilterSpec[] propertyFilterSpecs = {new PropertyFilterSpecBuilder().propSet(
      // 创建 Property Spec
      new PropertySpecBuilder().all(Boolean.FALSE).type(entityMor.getType()).pathSet(props)).objectSet(
          // 创建 Object Spec
          new ObjectSpecBuilder().obj(entityMor))};

  List<ObjectContent> oCont = vmClientSession.getVimPortType()
      .retrievePropertiesEx(
       vmClientSession.getServiceContent().getPropertyCollector(),
       Arrays.asList(propertyFilterSpecs), 
       new RetrieveOptions()).getObjects();

  if (oCont == null) {
    return retVal;
  }
  for (ObjectContent oc : oCont) {
    List<DynamicProperty> dps = oc.getPropSet();
    for (DynamicProperty dp : dps) {
      retVal.put(dp.getName(), dp.getVal());
    }
  }
  return retVal;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值