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

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


1、通过什么方式访问VI中心

VMware Infrastructure对外提供WebService,供第三方应用调用,以实现针对主机、虚拟机等资源的控制。针对.Net,提供了一个VimService2003.dll,开发时需要把它加入项目引用。


2、如何查看VI集群中各资源的信息

除了使用Vmware Infrastructure Client以外,可以使用浏览器查看,地址是http://localhost:8080/mob。 其中的8080是vfxd服务设置的监听端口。


3、如何登录VI中心

  
  
  
  
  1. public class ViDemo 
  2.     //以下是VI开发中会用到的所有对象 
  3.     private VimService m_Service; 
  4.     private ServiceContent m_Content; 
  5.     private ManagedObjectReference m_SvcRef; 
  6.     private ManagedObjectReference m_Collector; 
  7.     private UserSession m_Session; 
  8.  
  9.     /// <summary> 
  10.     /// 登录,耗时会比较长 
  11.     /// </summary> 
  12.     public void Connect() 
  13.     { 
  14.         m_SvcRef = new ManagedObjectReference(); 
  15.         m_SvcRef.type = "ServiceInstance"
  16.         m_SvcRef.Value = "ServiceInstance"
  17.      
  18.         m_Service = new VimService(); 
  19.         m_Service.Url = "http://localhost:8080/sdk"
  20.         m_Content = m_Service.RetrieveServiceContent(m_SvcRef); 
  21.         m_Collector = m_Content.propertyCollector; 
  22.         if(m_Content.sessionManager != null
  23.         { 
  24.             m_Session = m_Service.Login(m_Content.sessionManager, "USER""PASS"null); 
  25.         } 
  26.     } 
  27.  
  28.     /// <summary> 
  29.     /// 注销 
  30.     /// </summary> 
  31.     public void Disconnect() 
  32.     { 
  33.         if(m_Service != null
  34.         { 
  35.             m_Service.Logout(m_Content.sessionManager); 
  36.             m_Service.Dispose(); 
  37.             m_Service = null
  38.             m_Content = null
  39.             m_Session = null
  40.         } 
  41.     } 


4、虚拟机开机及关机

  
  
  
  
  1. /// <summary> 
  2. /// 虚拟机关机
  3. /// </summary> 
  4. public void PowerOff() 
  5.     //虚拟机的资源路径,格式是“中心/vm/虚拟机名称”,本例中中心叫DataCenter,虚拟机是vm100 
  6. //不用关心虚拟机在哪台主机上,因为对VI来说,集群是一个整体
  7.     string path = "DataCenter/vm/vm100"
  8.  
  9.     //根据虚拟机的资源路径获取资源的引用 
  10.     ManagedObjectReference vmRef = m_Service.FindByInventoryPath(m_Content.searchIndex, path); 
  11.     if(vmRef != null
  12.     { 
  13.         //调用服务上的PowerOffVM_Task来关闭虚拟机(异步),此处没有等待任务完成
  14. //如果是开机,调用PowerOnVM_Task方法 
  15.         ManagedObjectReference taskRef = m_Service.PowerOffVM_Task(vmRef); 
  16.     } 


未完待续……

 

你可能感兴趣的:(vmware)