设为首页 收藏本站
查看: 1404|回复: 0

[经验分享] 利用VMware Infrastructure SDK编程控制虚拟机集群(3)

[复制链接]

尚未签到

发表于 2018-6-7 08:36:20 | 显示全部楼层 |阅读模式
  接上回,继续整理针对虚拟机的各种操作。
  
7、跨主机克隆虚拟机
  网上资料比较少,当时费了很大劲才成功的,与同一台主机上的虚拟机克隆有区别。


  • /// <summary>   
  • /// 从模板部署虚拟机  
  • /// </summary>   
  • public void Deploy()   
  • {   
  •     //模板路径,我们假设template100这个模板在另一台主机上
  •     //后续的几步都与同一台主机上克隆没有区别
  •     string templatePath = &quot;DataCenter/vm/template100&quot;;
  •     ManagedObjectReference templateRef = m_Service.FindByInventoryPath(m_Content.searchIndex, templatePath);
  •     ManagedObjectReference folderRef = m_Service.FindByInventoryPath(m_Content.searchIndex, &quot;DataCenter/vm&quot;);
  •     ManagedObjectReference poolRef = m_Service.FindByInventoryPath(m_Content.searchIndex, &quot;DataCenter/host/host10/Resources&quot;);

  •     //此处开始是关键
  •     //获取目标host的引用,路径是“数据中心/host/主机名/资源名”,默认资源名与主机名相同
  •     ManagedObjectReference hostRef = m_Service.FindByInventoryPath(m_Content.searchIndex, &quot;DataCenter/host/host10/host10&quot;);

  •     //还需要获取目标主机存储的引用,用到的RetrievePropertiesForSingleObject方法是自定义的,主要是封装一下服务上的RetrieveProperties方法
  •     //获取hostRef上的datastore属性,最终的dataRef就是存储对象的引用
  •     ObjectContent[] contents = RetrievePropertiesForSingleObject(hostRef, new string[] { &quot;datastore&quot; });
  •     ManagedObjectReference[] datastores = (ManagedObjectReference[])contents[0].propSet[0].val;
  •     ManagedObjectReference dataRef = datastores[0];

  •     //指定位置参数
  •     VirtualMachineRelocateSpec vmRelocSpec = new VirtualMachineRelocateSpec();
  •     vmRelocSpec.pool = poolRef;
  •     vmRelocSpec.datastore = dataRef;   //这个很重要
  •     vmRelocSpec.transform = VirtualMachineRelocateTransformation.sparse;

  •     //指定复制相关参数,与同主机复制相同
  •     VirtualMachineCloneSpec vmCloneSpec = new VirtualMachineCloneSpec();
  •     vmCloneSpec.template = true;
  •     vmCloneSpec.location = vmRelocSpec;
  •     vmCloneSpec.powerOn = true;

  •     //还是调用CloneVM_Task来克隆虚拟机(异步),此处没有等待任务完成
  •     ManagedObjectReference taskRef = m_Service.CloneVM_Task(templateRef, folderRef, destName, vmCloneSpec);
  • }   

  • /// <summary>
  • /// 获取单一对象的属性  
  • /// </summary>
  • /// <param name=&quot;obj&quot;>对象</param>
  • /// <param name=&quot;properties&quot;>属性集合</param>
  • /// <returns>内容集合</returns>
  • private ObjectContent[] RetrievePropertiesForSingleObject(ManagedObjectReference obj, string[] properties)
  • {
  •     PropertySpec[] pSpec = new PropertySpec[] { new PropertySpec() };
  •     pSpec[0].type = obj.type;
  •     pSpec[0].all = false;
  •     pSpec[0].pathSet = properties;

  •     ObjectSpec[] obSpec = new ObjectSpec[] { new ObjectSpec() };
  •     obSpec[0].obj = obj;
  •     obSpec[0].skip = true;

  •     PropertyFilterSpec spec = new PropertyFilterSpec();
  •     spec.propSet = pSpec;
  •     spec.objectSet = obSpec;

  •     ObjectContent[] contents = m_Service.RetrieveProperties(m_Collector, new PropertyFilterSpec[] { spec });

  •     return contents;
  • }

  
未完待续……

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-520047-1-1.html 上篇帖子: Oracle VM3.0与VMware对比 下篇帖子: VMware HA要求及组件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表