wshq 发表于 2015-4-8 17:48:35

获取vmware虚拟机模板

  在我们通过克隆虚机,需要用到虚机模板。在数据中心的目录下面有文件夹、模板和虚拟机,那么这里需要做的是根据类型做递归查询。



1 private void GetTemplate()
2 {
3   System.Text.StringBuilder sb = new System.Text.StringBuilder();
4
5   ManagedObjectReference dcMor = util._svcUtil.getEntityByName("Datacenter", "dc");
6   sb.AppendLine(string.Format("dc is {0}", dcMor.Value));
7
8   ManagedObjectReference folderMor = util.getServiceUtil().GetMoRefProp(dcMor, "vmFolder");
9   ManagedObjectReference tpMor = GetTemplate(folderMor, "WINDOWS2008R2-CN-64");
10   sb.AppendLine(string.Format("template is {0}", tpMor.Value));
11
12   Response.Write(sb.ToString());
13 }
  
  在数据中心下面有vmFolder属性,而vmFolder有childEntity和childType成员,由此可以判断哪些是模板,当childEntity为folder我们再做递归。



1 private ManagedObjectReference GetTemplate(ManagedObjectReference mor, string templateName)
2 {
3   ManagedObjectReference[] entityMors = (ManagedObjectReference[])util.getServiceUtil().GetDynamicProperty(mor, "childEntity");
4   foreach (var item in entityMors)
5   {
6         if (item.type.Equals("VirtualMachine"))
7         {
8             ObjectContent[] vmOC = util.getServiceUtil().GetObjectProperties(null, item, new string[] { "config.name", "config.template" });
9             DynamicProperty[] vmDPs = vmOC.propSet;
10             if (vmDPs != null && ((string)vmDPs.val).Equals(templateName) && ((bool)vmDPs.val).Equals(true))
11             {
12               return item;
13             }
14         }
15         else if (item.type.Equals("Folder"))
16         {
17             ManagedObjectReference tpMor = GetTemplate(item, templateName);
18             if (tpMor != null) return tpMor;
19         }
20   }
21   return null;
22 }
  
  下面为运行结果。

页: [1]
查看完整版本: 获取vmware虚拟机模板