VMware下vApp及关联虚拟机操作管理
需求案例:深交所需要创建虚拟机的时候,把应用系统名称作为vApp名称,创建机器的时候先去判断一下这个vApp是否存在,不存在则创建一个且把虚拟机放在这个vApp目录资源池下;经过看了VMware VSphere 插件研究了下yavijava的源码找到了相关代码,并根据做了相关测试。
正常手动在VC上新建一个vApp的操作如图:
如果通过代码实现,都采取默认的方式,对代码进行详细说明如下:
1.vApp的查询
判断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(); |
如果想在vApp下再创建一个vApp资源池目录,只需要指定第一个参数类型为“VirtualApp”,构造一个对象即可.value传的不是名称值而是类型对应的id值。
3.将虚拟机移动到vApp下
研究了下源码,看了下有个VirtualApp类中,自带的很多方法,其中有一个moveIntoResourcePool需要传入一个entities实体数组,这里类似是“VirtualMachine”。
4.移除删除已有的vApp
5.创建机器插件修改
在Vsphere-plugin中修改VspereClient中createVm()方法,在克隆完机器后做的操作如下图: