根据vim25.jar 提供的虚拟机创建任务接口 VimPortType.createVMTask(),可以实现满足自己配置需求的一个虚拟机, 而且 VMware 在其提供的 vSphereSDK 提供了创建虚拟机的 sample(详见 ~\VMware-vSphereSDK-6.5.0-4571253\SDK\vsphere-ws\java\JAXWS\samples\com\vmware\vm\VMCreate.java)。

虚拟机的创建包括虚拟机的基本资源的配置(cpu、内存、网络等)、虚拟机所属主机、datacenter 及虚拟机磁盘的创建。使用 vSphere API 创建虚拟机还是比较简单的,配置好虚拟机的参数,调用 VimPortType.createVMTask() 接口即可。

以下为根据vim.jar 及参考 VMCreate.java 创建虚拟机的代码,此处虚拟机的配置取自于一个已经存在的虚拟机,目的是还原一个虚拟机,并为新建的虚拟机启动了CBT功能:

// 虚拟机客机连接session
private AbstractVmClientSessionVmApi vmClientSession = null;public VMOptApiSupport(AbstractVmClientSessionVmApi vmClientSession) {this.vmClientSession = vmClientSession;
}private static final Logger LOG = LoggerFactory.getLogger(VMOptApiSupport.class);/*** @Title: createVM* @Description: 创建虚拟机* @param vm 虚拟机对象VirtualMachine* @param vmNameNew 新建的虚拟机名称* @throws Exception* @see cn.xxx.vms.api.VMOptApi#createVM(java.lang.String)*/
@Override
public void createVM(VirtualMachine vm, String vmNameNew) throws Exception {try {VMCreate vmCreate = new VMCreate(vmClientSession);// 获取原虚拟机所在主机名String hostName = vm.getHostName();vmCreate.setHostName(hostName);// 获取vm folder 的父对象 数据中心对象String dataCenterName = vm.getDatacenter();// 设置创建虚拟机所需信息VirtualMachineConfigInfo configInfo = vm.getConfig();VirtualMachineConfigSummary summary = vm.getSummary().getConfig();vmCreate.setDataCenterName(dataCenterName);vmCreate.setVirtualMachineName(vmNameNew);vmCreate.setAnnotation(configInfo.getAnnotation());vmCreate.setDataStore(configInfo.getDatastoreUrl().get(0).getName());vmCreate.setChangeTrackingEnabled(configInfo.isChangeTrackingEnabled());vmCreate.setMemorySize(summary.getMemorySizeMB().toString());vmCreate.setCpuCount(summary.getNumCpu().toString());vmCreate.setGuestFullName(configInfo.getAlternateGuestName());vmCreate.setGuestOsId(configInfo.getGuestId());vmCreate.setFirmware(configInfo.getFirmware());vmCreate.setTools(configInfo.getTools());// 虚拟机版本,ESXi 5.5 最大支持 vmx-8String hostVersion = vmClientSession.getServiceContent().getAbout().getApiVersion();String vmVersion = vm.getVersion();if (hostVersion != null && vmVersion != null) {if ("6.0".compareTo(hostVersion) > 0 && vmVersion.compareTo("vmx-08") > 0) {vmCreate.setVersion("vmx-08");} else {vmCreate.setVersion(vm.getVersion());}}// 获取磁盘大小vmCreate.setDiskSize(String.valueOf(vm.getDiskSizeMB()));// 创建虚拟机vmCreate.run();} catch (RemoteException e) {e.printStackTrace();throw new Exception("远程连接服务器异常", e);} catch (InvalidPropertyFaultMsg e) {e.printStackTrace();throw new Exception("无效的检索属性", e);} catch (RuntimeFaultFaultMsg e) {e.printStackTrace();throw new Exception("虚拟机创建失败", e);} catch (VmConfigFaultFaultMsg e) {e.printStackTrace();throw new Exception("虚拟机配置错误", e);} catch (AlreadyExistsFaultMsg e) {e.printStackTrace();throw new Exception("虚拟机已存在", e);} catch (InvalidDatastoreFaultMsg e) {e.printStackTrace();throw new Exception("无效的数据存储", e);} catch (FileFaultFaultMsg e) {e.printStackTrace();throw new Exception("文件错误", e);} catch (InvalidStateFaultMsg e) {e.printStackTrace();throw new Exception("无效状态异常", e);} catch (InvalidCollectorVersionFaultMsg e) {e.printStackTrace();} catch (InvalidNameFaultMsg e) {e.printStackTrace();throw new Exception("无效名称", e);} catch (OutOfBoundsFaultMsg e) {e.printStackTrace();throw new Exception("溢出错误", e);} catch (DuplicateNameFaultMsg e) {e.printStackTrace();throw new Exception("虚拟机名称重复", e);} catch (InsufficientResourcesFaultFaultMsg e) {e.printStackTrace();throw new Exception("没有足够的资源分配", e);} catch (TaskInProgressFaultMsg e) {e.printStackTrace();throw new Exception("任务已在进程中", e);} catch (Exception e) {e.printStackTrace();throw new Exception("虚拟机创建失败", e);}}


VMware-vSphereSDK-6.5.0 下载地址:
https://my.vmware.com/zh/group/vmware/get-download?downloadGroup=VS-MGMT-SDK65

java 实现VMware虚拟机创建相关推荐

  1. 利用vmware虚拟机创建一个软盘映像文件

    利用vmware虚拟机创建一个软盘映像文件 很多同学在做软盘linux系统实验时,大都为第一步操作发愁,这什么是软盘从来没有见过.没有软盘,如何创建一个软盘映像文件呢?这是个问题. 但是我们可以利用v ...

  2. 本地主机访问VMware虚拟机创建的网站

    本地主机访问VMware虚拟机创建的网站 前提 本文使用虚拟机基于PHPstudy与wordpress建立网站,创建自己的博客. 虚拟机为windowsServer2012 (window其他常用版本 ...

  3. 使用VMWare虚拟机创建CentOS版本的Linux学习环境(每一步都有截图与说明)

    学习Android开发,如果不学习Linux的基本使用,总感觉心里过意不去,因为毕竟Android还是搭载在Linux的基础之上的.因此,学习一种Linux系统的基本操作,对我们以后的学习还是很有作用 ...

  4. 虚拟机dhcp服务器配置,vmware虚拟机创建dhcp服务器(如何安装dhcp服务器在虚拟机中)...

    并且在vmware虚拟机里面装了个2000的系统,现在想做个DHCP服务器,电. 一:试验的前期环境搭建1 系统环境:Fedora 22 软件版本: 在第二张光盘中 dhcp-3.0.1rc12-4. ...

  5. VMware虚拟机创建安装之后不出现VMnet1和VMnet8虚拟网卡

    1.安装好VMware后,没有VMnet1和VMnet8虚拟网卡 VMware虚拟机无法将网络改为桥接状态 2.解决方法:首先把你之前安装的VMware虚拟机卸载,清理得一干二净: 3.原因是虚拟机安 ...

  6. 虚拟化系统到VMware虚拟机

    本功能可以用于将物理机上的Windows系统迁移到VMware虚拟机.迁移完成后,虚拟机中的系统可直接启动并保持原有环境配置信息. 1. 在需要迁移系统的电脑上打开DiskGenius,点击" ...

  7. 如何迁移或复制VMware虚拟机系统

    VMware虚拟机创建的系统比较占用磁盘空间,通常需要为虚拟机内的系统预分配虚拟磁盘空间,如果虚拟机创建在C盘,则很可能面临着C盘空间不足的问题,今天我们就来看一下如何迁移或复制WMware虚拟机到其 ...

  8. [官方教程] [ES4封装教程]1.使用 VMware Player 创建适合封装的虚拟机

    [转载处,http://bbs.itiankong.com/] 前言: 首先要明确的一点,系统封装操作的源计算机一般为虚拟计算机(简称虚拟机.VM等),这也是为什么我们要在封装教程的第一章就专门学习虚 ...

  9. VMware虚拟机的安装、创建及CentOS 7的安装

    一.VMware虚拟机的安装 1.进入VMware官网(地址:https://www.vmware.com/cn.html) ,进行下载.!!注意:没有账号必须先注册才能下载. 2.打开下载好的exe ...

最新文章

  1. 设置WebStorm像VSCode一样每行代码结尾自动格式化加入“;”分号(JavaScript、TypeScript格式化)
  2. java opennlp_使用opennlp进行文档分类
  3. 清华大学:2021元宇宙发展研究报告
  4. linq之InnerJoin和LeftJoin以及封装动态查询条件版本
  5. git clone 代码下载速度慢的解决方法
  6. MySQL(五)MySQL事务
  7. 电脑怎么远程控制另一台电脑_如何用手机远程控制电脑?
  8. springBoot项目启动去掉多余的启动日志
  9. Mastering Oracle SQL学习笔记(join句法专题第六部份)
  10. 企业安全管理的内外合规之ISO27001标准详解
  11. 汇总站外seo方法和做法?
  12. xlsxwriter设置Excel的表格边框
  13. Python 对象烤地瓜
  14. Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun错误解决方案
  15. 智能手机 + 机器学习 = 个人终端的未来
  16. Kaggle数据竞赛记录 - Steel Defect Detection
  17. Carla在Windows上的安装与运行
  18. STM32RCT6芯片引脚的含义与作用
  19. [Android开发常见问题-19] Android为什么比IOS和WP慢?
  20. 【实用工具】RD Clinet使用教程之ipad连接windows

热门文章

  1. 人机交互设计(HCI)的七原则
  2. 锤子Smartisan系统杀后台,推送通知,闲鱼收不到消息或者延迟问题解决
  3. 驱动中实现模拟键盘按键
  4. 电商数据仓库系统项目操作可行性
  5. 配置Visual Studio Code的SciLab开发环境
  6. LPR车牌识别-pytorch上分之路
  7. Hadoop实战系列之MapReduce 分析 Youtube视频数据
  8. 读者-写者问题代码(带注释)个人学习笔记
  9. mysql 5.6 不同步_MySQL5.6配置同步复制的新方法以及常见问题的解决方法
  10. CDMS系统插件开发介绍