vSphere for Java类库:vijava   

虚拟机配置类

  1. package com.vmware.vcenter_event.VirtualMachine;
  2.  
  3. import com.vmware.vim25.CustomizationIPSettings;
  4. import com.vmware.vim25.mo.ClusterComputeResource;
  5. import com.vmware.vim25.mo.Datastore;
  6. import com.vmware.vim25.mo.Folder;
  7. import lombok.Data;
  8.  
  9. @Data
  10. public class VirtualMachineConfig {
  11.  
  12. private String vmName;
  13.  
  14. private String hostName;
  15.  
  16. private String domain;
  17.  
  18. private Integer cpuNums;
  19.  
  20. private Long memoryGB;
  21.  
  22. private Integer diskGB;
  23.  
  24. private Folder folder;
  25.  
  26. private Datastore datastore;
  27.  
  28. private ClusterComputeResource clusterComputeResource;
  29.  
  30. private CustomizationIPSettings ipSettings;
  31.  
  32. }

VirtualMachine服务类

  1. package com.vmware.vcenter_event.VirtualMachine;
  2.  
  3. import com.vmware.vim25.*;
  4. import com.vmware.vim25.mo.*;
  5. import org.springframework.stereotype.Service;
  6.  
  7. import java.net.MalformedURLException;
  8. import java.net.URL;
  9. import java.rmi.RemoteException;
  10.  
  11. @Service
  12. public class VirtualMachineService {
  13.  
  14. private ServiceInstance vCenterServiceInstance;
  15.  
  16. private InventoryNavigator inventoryNavigator;
  17.  
  18. public VirtualMachineService() {
  19. vCenterServiceInstance = this.vcInit();
  20. inventoryNavigator = new InventoryNavigator(vCenterServiceInstance.getRootFolder());
  21. }
  22.  
  23. public ServiceInstance vcInit(){
  24. try {
  25. return new ServiceInstance(new URL("https://vc.vmware.com/sdk"), "administrator@vsphere.local", "VMware1!", true);
  26. } catch (MalformedURLException | RemoteException e) {
  27. e.printStackTrace();
  28. }
  29. return null;
  30. }
  31.  
  32. private Datastore getDataStoreByName(String dataStoreName) throws RemoteException {
  33. return (Datastore) inventoryNavigator.searchManagedEntity("Datastore",dataStoreName);
  34. }
  35.  
  36. private ClusterComputeResource getClusterComputeResourceByName(String clusterName) throws RemoteException {
  37. return (ClusterComputeResource) inventoryNavigator.searchManagedEntity("ClusterComputeResource", clusterName);
  38. }
  39.  
  40. private CustomizationSpec getCustomizationSpecByName(String customizationSpecName) throws RemoteException {
  41. return vCenterServiceInstance.getCustomizationSpecManager().getCustomizationSpec(customizationSpecName).getSpec();
  42. }
  43.  
  44. private VirtualMachine getVirtualMachineTemplateByName(String virtualMachineTemplateName) throws RemoteException {
  45. VirtualMachine virtualMachine = (VirtualMachine) inventoryNavigator.searchManagedEntity("VirtualMachine", virtualMachineTemplateName);
  46. if (virtualMachine.getConfig().isTemplate()){
  47. return virtualMachine;
  48. }
  49. return null;
  50. }
  51.  
  52. private Folder getFolderByName(String folderName) throws RemoteException {
  53. return (Folder) inventoryNavigator.searchManagedEntity("Folder", folderName);
  54. }
  55.  
  56. private void cloneVirtualMachineFromTemplateWithCustomization(
  57. VirtualMachine virtualMachineTemplate,
  58. VirtualMachineConfig virtualMachineConfig,
  59. CustomizationSpec customizationSpec)
  60. {
  61.  
  62. // vm location
  63. VirtualMachineRelocateSpec virtualMachineRelocateSpec = new VirtualMachineRelocateSpec();
  64. virtualMachineRelocateSpec.setDatastore(virtualMachineConfig.getDatastore().getMOR());
  65. virtualMachineRelocateSpec.setPool(virtualMachineConfig.getClusterComputeResource().getResourcePool().getMOR());
  66.  
  67. // vm configSpec
  68.  
  69. VirtualMachineConfigSpec virtualMachineConfigSpec = new VirtualMachineConfigSpec();
  70. virtualMachineConfigSpec.setNumCPUs(virtualMachineConfig.getCpuNums());
  71.  
  72. // configSpec.setNumCoresPerSocket(1);
  73. virtualMachineConfigSpec.setMemoryMB(virtualMachineConfig.getMemoryGB() * 1024);
  74.  
  75. VirtualMachineCloneSpec virtualMachineCloneSpec = new VirtualMachineCloneSpec();
  76. virtualMachineCloneSpec.setLocation(virtualMachineRelocateSpec);
  77. virtualMachineCloneSpec.setPowerOn(true);
  78. virtualMachineCloneSpec.setTemplate(false);
  79. virtualMachineCloneSpec.setCustomization(customizationSpec);
  80. virtualMachineCloneSpec.setConfig(virtualMachineConfigSpec);
  81.  
  82. try {
  83. Task task = virtualMachineTemplate.cloneVM_Task(
  84. virtualMachineConfig.getFolder(),
  85. virtualMachineConfig.getVmName(),
  86. virtualMachineCloneSpec);
  87. String result = task.waitForTask();
  88.  
  89. if (result.equals(Task.SUCCESS)) {
  90. System.out.println("模板生成虚拟机成功");
  91.  
  92. } else {
  93. System.out.println("模板生成虚拟机失败,请查询Vcenter 上相关日志信息");
  94. }
  95.  
  96. } catch (RemoteException | InterruptedException e) {
  97. e.printStackTrace();
  98. }
  99. }
  100.  
  101. public static void main(String[] args) throws Exception {
  102. VirtualMachineService virtualMachineService = new VirtualMachineService();
  103.  
  104. VirtualMachine virtualMachineTemplate = virtualMachineService.getVirtualMachineTemplateByName("Centos-7-temp");
  105. Folder folder = virtualMachineService.getFolderByName("VCH");
  106. ClusterComputeResource clusterComputeResource = virtualMachineService.getClusterComputeResourceByName("Cluster");
  107. Datastore datastore = virtualMachineService.getDataStoreByName("VMFS02");
  108. CustomizationSpec customizationSpec = virtualMachineService.getCustomizationSpecByName("Linux");
  109.  
  110. VirtualMachineConfig virtualMachineConfig = new VirtualMachineConfig();
  111. virtualMachineConfig.setCpuNums(2);
  112. virtualMachineConfig.setMemoryGB(2L);
  113. virtualMachineConfig.setVmName("VM-Test04");
  114. virtualMachineConfig.setHostName("VM04-Test");
  115. virtualMachineConfig.setDomain("vmware.com");
  116. virtualMachineConfig.setFolder(folder);
  117. virtualMachineConfig.setClusterComputeResource(clusterComputeResource);
  118. virtualMachineConfig.setDatastore(datastore);
  119.  
  120. CustomizationFixedIp fixedIp = new CustomizationFixedIp();
  121. fixedIp.setIpAddress("1.1.1.1");
  122. CustomizationIPSettings customizationIPSettings = new CustomizationIPSettings();
  123. customizationIPSettings.setIp(fixedIp);
  124. customizationIPSettings.setSubnetMask("255.255.255.0");
  125. customizationIPSettings.setGateway(new String[]{"1.1.1.254"});
  126. customizationIPSettings.setDnsDomain(virtualMachineConfig.getDomain());
  127. customizationIPSettings.setDnsServerList(new String[]{"8.8.8.8", "114.114.114.114"});
  128. virtualMachineConfig.setIpSettings(customizationIPSettings);
  129.  
  130. CustomizationAdapterMapping customizationAdapterMappings = new CustomizationAdapterMapping();
  131. customizationAdapterMappings.setAdapter(virtualMachineConfig.getIpSettings());
  132. customizationSpec.setNicSettingMap(new CustomizationAdapterMapping[]{customizationAdapterMappings});
  133. CustomizationLinuxPrep linuxPrep = new CustomizationLinuxPrep();
  134. linuxPrep.setDomain(virtualMachineConfig.getDomain());
  135. CustomizationFixedName fixedName = new CustomizationFixedName();
  136. fixedName.setName(virtualMachineConfig.getHostName());
  137. linuxPrep.setHostName(fixedName);
  138. customizationSpec.setIdentity(linuxPrep);
  139.  
  140. if (virtualMachineTemplate != null){
  141. virtualMachineService.cloneVirtualMachineFromTemplateWithCustomization(
  142. virtualMachineTemplate,
  143. virtualMachineConfig,
  144. customizationSpec);
  145. }else {
  146. throw new Exception("Can't find the virtual machine template");
  147. }
  148.  
  149. }
  150.  
  151. }

vSphere SDK for Java - 从模板部署虚拟机并配置IP地址的更多相关文章

  1. VM虚拟机手动配置IP地址

    1.查看虚拟机的网关 编辑-->虚拟网络编辑器 VMnet8 NAT模式-->NAT设置-->网关IP 2.设置IP地址 系统-->首选项-->网络连接 system e ...

  2. 一、安装虚拟机,配置ip地址

    一.安装linux 注意点: 一.选择最小化安装的时候,要自定义安装软件,必须要安装下面的 如果没有安装上面的,需要用下面的命令来查询安装 如果没有安装就会出现各种问题 二.分区简单介绍 1.至少要一 ...

  3. 云服务和虚拟机的预留 IP 地址

    大家好! 我很高兴地向大家宣布,云服务和虚拟机的预留 IP 地址将自 2014年 5月 12日起正式发布.在这篇博客中,我们将演示如何管理预留 IP.将预留 IP 与云服务和虚拟机关联.定价模型和一些 ...

  4. [部署]CentOS配置IP地址

    环境 虚拟机:VMWare10.0.1 build-1379776 操作系统:CentOS7 64位 简介 CentOS7最小化安装(Minimal)时,是不带ifconfig指令的,该指令在net- ...

  5. JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)

    1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...

  6. Java 获取当前项目所在服务器的 IP 地址

    java中获取当前服务器地址主要使用到InetAddress这个类 public static void main(String[] args) { try { //用 getLocalHost() ...

  7. 虚拟机下CentOS 配置IP地址的三种方法

    1.自动获取IP地址(我不是用的这种方法,不做过多介绍) 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分配IP地址. #dhclient 自动获取ip地址命令 #if ...

  8. 虚拟机下CentOS 6.5配置IP地址的三种方法

    实验软件环境:虚拟机Vmware Workstation10.0 .CentOS 6.5 32位 1.自动获取IP地址 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分 ...

  9. VM虚拟机下CentOS 6.5配置IP地址的三种方法

    1.自动获取IP地址 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分配IP地址. #dhclient 自动获取ip地址命令 #ifconfig 查询系统里网卡信息,i ...

随机推荐

  1. Java基础之Calendar类、JNDI之XML

     一.Calendar类 从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现.在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要 ...

  2. HTML代码大全

    1.html的简介* 什么是html?- HyperText Markup Language:超文本标记语言,网页语言** 超文本:超出文本的范畴,使用html可以轻松实现这样操作** 标记:html ...

  3. glibc-2.23_large_bin链接方式_浅析

    上面两个图应该合并为一个图,但是指针太多了,合并在一起看不清了,所以分成两张图 所有的块都通过fd和bk两个指针链接,但是为了加快查询速度,不同大小的chunk通过fd_nextsize和bk_nex ...

  4. Python中的推导式(列表推导式、字典推导式、集合推导式)

    推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(lis ...

  5. intellij idea 编码设置(乱码问题)

    一般把编辑器设置为 utf-8 如下设置: file-->setting-->editor-->file encodings-->

  6. d3.js 之关联数据:data操作符

    数据可视化 在可视化工作中,一个基本出发点是将不同的数值映射到不同的可视化 元素的属性上,使其表现出各自不同的视觉特征. 比如:以数组中的每一个值为直径分别创建一个圆,我们得到三个圆: 在d3中,可视 ...

  7. HDFS基本工作机制

  8. react native 或 flutter 开发app

    react-native react native和原生Android/ios: https://www.oschina.net/news/97466/should-we-use-react-nati ...

  9. PHP error_log 新认知

    //error_log 简介及使用方法 //  error_log("消息","类型","路径"); //message   //type  ...

  10. Loki之Funtion

    阅读Loki中Funtion源码之后的个人理解,该库归纳起来可以说有三层(C++设计新思维列举到2个参数,此处列举到3个参数),要记住C++的模板其实就是C语言高级的宏定义,如果用户没有用到对应的模板 ...