VMware下vApp及关联虚拟机操作管理

需求案例:深交所需要创建虚拟机的时候,把应用系统名称作为vApp名称,创建机器的时候先去判断一下这个vApp是否存在,不存在则创建一个且把虚拟机放在这个vApp目录资源池下;经过看了VMware VSphere 插件研究了下yavijava的源码找到了相关代码,并根据做了相关测试。

正常手动在VC上新建一个vApp的操作如图:

VMware下vApp及关联虚拟机操作管理

 

如果通过代码实现,都采取默认的方式,对代码进行详细说明如下:

1.vApp的查询

    VMware下vApp及关联虚拟机操作管理

 

判断vApp是否存在

   

VMware下vApp及关联虚拟机操作管理

2.集群下VMware vApp的创建

创建VApp参数很容易出错

创建VApp方法

1

2

3

4

5

6

7

VimPortType vimService = this.getSi().getServerConnection().getVimService();

//第一个参数ManagedObjectReference _this 只能传一个资源池类型的对象(资源池或vApp,vApp是继承了一个资源池对象的)

//第二个参数代表"名称"

//第三个参数ResourceConfigSpec,其中cpu和内存是必须要有的且默认是"nomal"

//第四个参数是VAppConfigSpec对象,需要传一个实例id,其他可以为空

//第五个参数虚拟机的路径 我们直接填到Datacenter下,它也属于ManagedObjectReference对象

vimService.createVApp();

VMware下vApp及关联虚拟机操作管理

  VMware下vApp及关联虚拟机操作管理

 

 

 

如果想在vApp下再创建一个vApp资源池目录,只需要指定第一个参数类型为“VirtualApp”,构造一个对象即可.value传的不是名称值而是类型对应的id值。

VMware下vApp及关联虚拟机操作管理

 

3.将虚拟机移动到vApp下

   研究了下源码,看了下有个VirtualApp类中,自带的很多方法,其中有一个moveIntoResourcePool需要传入一个entities实体数组,这里类似是“VirtualMachine”。

 

VMware下vApp及关联虚拟机操作管理

VMware下vApp及关联虚拟机操作管理

 

4.移除删除已有的vApp

VMware下vApp及关联虚拟机操作管理

 

5.创建机器插件修改

 

    在Vsphere-plugin中修改VspereClient中createVm()方法,在克隆完机器后做的操作如下图:

VMware下vApp及关联虚拟机操作管理