接上回,继续整理针对虚拟机的各种操作。

7、跨主机克隆虚拟机

网上资料比较少,当时费了很大劲才成功的,与同一台主机上的虚拟机克隆有区别。

  1. /// <summary>
  2. /// 从模板部署虚拟机
  3. /// </summary>
  4. public void Deploy()
  5. {
  6. //模板路径,我们假设template100这个模板在另一台主机上
  7. //后续的几步都与同一台主机上克隆没有区别
  8. string templatePath = "DataCenter/vm/template100";
  9. ManagedObjectReference templateRef = m_Service.FindByInventoryPath(m_Content.searchIndex, templatePath);
  10. ManagedObjectReference folderRef = m_Service.FindByInventoryPath(m_Content.searchIndex, "DataCenter/vm");
  11. ManagedObjectReference poolRef = m_Service.FindByInventoryPath(m_Content.searchIndex, "DataCenter/host/host10/Resources");
  12. //此处开始是关键
  13. //获取目标host的引用,路径是“数据中心/host/主机名/资源名”,默认资源名与主机名相同
  14. ManagedObjectReference hostRef = m_Service.FindByInventoryPath(m_Content.searchIndex, "DataCenter/host/host10/host10");
  15. //还需要获取目标主机存储的引用,用到的RetrievePropertiesForSingleObject方法是自定义的,主要是封装一下服务上的RetrieveProperties方法
  16. //获取hostRef上的datastore属性,最终的dataRef就是存储对象的引用
  17. ObjectContent[] contents = RetrievePropertiesForSingleObject(hostRef, new string[] { "datastore" });
  18. ManagedObjectReference[] datastores = (ManagedObjectReference[])contents[0].propSet[0].val;
  19. ManagedObjectReference dataRef = datastores[0];
  20. //指定位置参数
  21. VirtualMachineRelocateSpec vmRelocSpec = new VirtualMachineRelocateSpec();
  22. vmRelocSpec.pool = poolRef;
  23. vmRelocSpec.datastore = dataRef;   //这个很重要
  24. vmRelocSpec.transform = VirtualMachineRelocateTransformation.sparse;
  25. //指定复制相关参数,与同主机复制相同
  26. VirtualMachineCloneSpec vmCloneSpec = new VirtualMachineCloneSpec();
  27. vmCloneSpec.template = true;
  28. vmCloneSpec.location = vmRelocSpec;
  29. vmCloneSpec.powerOn = true;
  30. //还是调用CloneVM_Task来克隆虚拟机(异步),此处没有等待任务完成
  31. ManagedObjectReference taskRef = m_Service.CloneVM_Task(templateRef, folderRef, destName, vmCloneSpec);
  32. }
  33. /// <summary>
  34. /// 获取单一对象的属性
  35. /// </summary>
  36. /// <param name="obj">对象</param>
  37. /// <param name="properties">属性集合</param>
  38. /// <returns>内容集合</returns>
  39. private ObjectContent[] RetrievePropertiesForSingleObject(ManagedObjectReference obj, string[] properties)
  40. {
  41. PropertySpec[] pSpec = new PropertySpec[] { new PropertySpec() };
  42. pSpec[0].type = obj.type;
  43. pSpec[0].all = false;
  44. pSpec[0].pathSet = properties;
  45. ObjectSpec[] obSpec = new ObjectSpec[] { new ObjectSpec() };
  46. obSpec[0].obj = obj;
  47. obSpec[0].skip = true;
  48. PropertyFilterSpec spec = new PropertyFilterSpec();
  49. spec.propSet = pSpec;
  50. spec.objectSet = obSpec;
  51. ObjectContent[] contents = m_Service.RetrieveProperties(m_Collector, new PropertyFilterSpec[] { spec });
  52. return contents;
  53. }

未完待续……

转载于:https://blog.51cto.com/boytnt/1031743

利用VMware Infrastructure SDK编程控制虚拟机集群(3)相关推荐

  1. 利用VMware Infrastructure SDK编程控制虚拟机集群(1)

    两年前的一个老项目了,基于VMware Infrastructure 3.5的,整理一下当时的技术资料.至于VMware Infrastructure是什么以及它能干什么,不详细介绍了,感兴趣的同学可 ...

  2. 利用VMware Infrastructure SDK编程控制虚拟机集群(2)

    接上回,继续整理针对虚拟机的各种操作. 5.创建与恢复快照 /// <summary> /// 创建快照 /// </summary> public void CreateSn ...

  3. 利用FRP跨局域网操纵虚拟机集群

    利用FRP跨局域网操纵虚拟机集群 我们在日常学习和生活中常常遇到这样的痛点,自己有两台笔记本A和B,自己的一台笔记本A安装了三台Linux虚拟机集群在学校机房里面(三台虚拟机都没有公网IP,并在学校局 ...

  4. 如何构建虚拟机Hadoop集群,搭建3台ubuntu虚拟机集群

    如何构建虚拟机Hadoop集群,搭建3台ubuntu虚拟机集群 克隆集群机器 通过虚拟机搭建Hadoop集群,发现使用的VMware workstation 15 player版本没有克隆功能,于是找 ...

  5. 数据仓库搭建1-Virtual-box虚拟机集群搭建

    数据仓库搭建1-Virtual-box虚拟机集群搭建 前言 Virtual-box遇到的问题 虚拟机安装 虚拟机网络配置 安装必要的软件 前言 我的电脑内存16G,尽量大一点吧,太小的话会在使用的时候 ...

  6. Dapr + .NET 实战(十四)虚拟机集群部署 mDNS + Consul

    前面我们说了在单机模式下和K8S集群下的Dapr实战,这次我们来看看如何在不使用K8S的情况下,在一个传统的虚拟机集群里来部署Dapr. 1.环境准备 我们准备两台centos7虚拟机 Dapr1:1 ...

  7. ELK学习笔记之Kibana权限控制和集群监控

    详细请参考如下四篇博客,注意ELK6中移除了Xpack的默认账户和密码,需要手动设置 Kibana安全特性之权限控制 ELK 集群 Kibana 使用 X-Pack 权限控制,监控集群状态,警报,监视 ...

  8. 虚拟机集群启动,Hadoop常用命令

    虚拟机集群启动,Hadoop常用命令 (一).启动hdfs 1,namenode节点第一次初始化 在namenode安装节点执行命令: hadoop namenode -format 2,单节点启动. ...

  9. Vmware虚拟机集群设置静态ip

    前提准备 1 centos 7系统 2 Vmare为NAT模式 设置静态IP 为方便管理集群,需要为每台机器设置静态ip vi /etc/sysconfig/network-scripts/ifcfg ...

最新文章

  1. 【代码笔记】Web-CSS-CSS id和Class选择器
  2. [导入]PHP5的异常处理
  3. 我是如何从技术转向产品的
  4. SQLServer基本函数(转)
  5. Docker storage driver 选择
  6. oracle euk 什么系统,【T】每日一生信--interproscan安装及使用(终结版)
  7. 零基础学python-如何零基础开始自学Python编程
  8. jquery ajax 详细教程视频,jquery ajax 视频教程
  9. 桌面小工具天气连接不到服务器,墨迹天气桌面小插件无法同步怎么办 墨迹天气app与服务器时间不一致怎么办...
  10. 关于下载excel 解析文件名乱码
  11. 教你如何用python把玩守望先锋新英雄
  12. java查找pdf关键字_Java定位PDF中关键字的坐标
  13. numeric_limits<T>::max(),min()及lowest()
  14. 迅为STM32MP157开发板手册更新记录
  15. CTF之web学习记录 -- 命令注入
  16. Android 仿淘宝详情视频图片混合轮播
  17. 大屏:页面在不同比例屏幕的显示适配与字体随屏幕改变而改变(字体随屏幕分辨率改变自适应的问题)
  18. PowerPoint 2010去掉了宏录制器
  19. Azure Machine Learning Studio 实例 -- 预测xx年的食物工厂总数
  20. MySQL-SQL语句优化

热门文章

  1. android fragment中引入自定义view_厉害了,用Android自定义View实现八大行星绕太阳3D旋转效果...
  2. mysql error log清理_手动删除mysql日志/var/log/mysql/error.log导致的mysql无法启动
  3. IDEA 入门:安装使用详解(创建项目/包/类、运行/关闭/导入项目、字体/字号设置、常用快捷键等)
  4. JDBC实现图书管理小案例
  5. java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况
  6. VS2017安装配置Qt
  7. ios kvo 要引入_腾讯社招iOS面试记录
  8. 小说中场景的功能_《流浪地球》:从小说到电影
  9. CMake指令入门 ——以构建OpenCV项目为例
  10. 云服务器 自有操作系统,云服务器 自有操作系统