vSphere SDK for Java - 从模板部署虚拟机并配置IP地址
vSphere for Java类库:vijava
虚拟机配置类
- package com.vmware.vcenter_event.VirtualMachine;
- import com.vmware.vim25.CustomizationIPSettings;
- import com.vmware.vim25.mo.ClusterComputeResource;
- import com.vmware.vim25.mo.Datastore;
- import com.vmware.vim25.mo.Folder;
- import lombok.Data;
- @Data
- public class VirtualMachineConfig {
- private String vmName;
- private String hostName;
- private String domain;
- private Integer cpuNums;
- private Long memoryGB;
- private Integer diskGB;
- private Folder folder;
- private Datastore datastore;
- private ClusterComputeResource clusterComputeResource;
- private CustomizationIPSettings ipSettings;
- }
VirtualMachine服务类
- package com.vmware.vcenter_event.VirtualMachine;
- import com.vmware.vim25.*;
- import com.vmware.vim25.mo.*;
- import org.springframework.stereotype.Service;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.rmi.RemoteException;
- @Service
- public class VirtualMachineService {
- private ServiceInstance vCenterServiceInstance;
- private InventoryNavigator inventoryNavigator;
- public VirtualMachineService() {
- vCenterServiceInstance = this.vcInit();
- inventoryNavigator = new InventoryNavigator(vCenterServiceInstance.getRootFolder());
- }
- public ServiceInstance vcInit(){
- try {
- return new ServiceInstance(new URL("https://vc.vmware.com/sdk"), "administrator@vsphere.local", "VMware1!", true);
- } catch (MalformedURLException | RemoteException e) {
- e.printStackTrace();
- }
- return null;
- }
- private Datastore getDataStoreByName(String dataStoreName) throws RemoteException {
- return (Datastore) inventoryNavigator.searchManagedEntity("Datastore",dataStoreName);
- }
- private ClusterComputeResource getClusterComputeResourceByName(String clusterName) throws RemoteException {
- return (ClusterComputeResource) inventoryNavigator.searchManagedEntity("ClusterComputeResource", clusterName);
- }
- private CustomizationSpec getCustomizationSpecByName(String customizationSpecName) throws RemoteException {
- return vCenterServiceInstance.getCustomizationSpecManager().getCustomizationSpec(customizationSpecName).getSpec();
- }
- private VirtualMachine getVirtualMachineTemplateByName(String virtualMachineTemplateName) throws RemoteException {
- VirtualMachine virtualMachine = (VirtualMachine) inventoryNavigator.searchManagedEntity("VirtualMachine", virtualMachineTemplateName);
- if (virtualMachine.getConfig().isTemplate()){
- return virtualMachine;
- }
- return null;
- }
- private Folder getFolderByName(String folderName) throws RemoteException {
- return (Folder) inventoryNavigator.searchManagedEntity("Folder", folderName);
- }
- private void cloneVirtualMachineFromTemplateWithCustomization(
- VirtualMachine virtualMachineTemplate,
- VirtualMachineConfig virtualMachineConfig,
- CustomizationSpec customizationSpec)
- {
- // vm location
- VirtualMachineRelocateSpec virtualMachineRelocateSpec = new VirtualMachineRelocateSpec();
- virtualMachineRelocateSpec.setDatastore(virtualMachineConfig.getDatastore().getMOR());
- virtualMachineRelocateSpec.setPool(virtualMachineConfig.getClusterComputeResource().getResourcePool().getMOR());
- // vm configSpec
- VirtualMachineConfigSpec virtualMachineConfigSpec = new VirtualMachineConfigSpec();
- virtualMachineConfigSpec.setNumCPUs(virtualMachineConfig.getCpuNums());
- // configSpec.setNumCoresPerSocket(1);
- virtualMachineConfigSpec.setMemoryMB(virtualMachineConfig.getMemoryGB() * 1024);
- VirtualMachineCloneSpec virtualMachineCloneSpec = new VirtualMachineCloneSpec();
- virtualMachineCloneSpec.setLocation(virtualMachineRelocateSpec);
- virtualMachineCloneSpec.setPowerOn(true);
- virtualMachineCloneSpec.setTemplate(false);
- virtualMachineCloneSpec.setCustomization(customizationSpec);
- virtualMachineCloneSpec.setConfig(virtualMachineConfigSpec);
- try {
- Task task = virtualMachineTemplate.cloneVM_Task(
- virtualMachineConfig.getFolder(),
- virtualMachineConfig.getVmName(),
- virtualMachineCloneSpec);
- String result = task.waitForTask();
- if (result.equals(Task.SUCCESS)) {
- System.out.println("模板生成虚拟机成功");
- } else {
- System.out.println("模板生成虚拟机失败,请查询Vcenter 上相关日志信息");
- }
- } catch (RemoteException | InterruptedException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) throws Exception {
- VirtualMachineService virtualMachineService = new VirtualMachineService();
- VirtualMachine virtualMachineTemplate = virtualMachineService.getVirtualMachineTemplateByName("Centos-7-temp");
- Folder folder = virtualMachineService.getFolderByName("VCH");
- ClusterComputeResource clusterComputeResource = virtualMachineService.getClusterComputeResourceByName("Cluster");
- Datastore datastore = virtualMachineService.getDataStoreByName("VMFS02");
- CustomizationSpec customizationSpec = virtualMachineService.getCustomizationSpecByName("Linux");
- VirtualMachineConfig virtualMachineConfig = new VirtualMachineConfig();
- virtualMachineConfig.setCpuNums(2);
- virtualMachineConfig.setMemoryGB(2L);
- virtualMachineConfig.setVmName("VM-Test04");
- virtualMachineConfig.setHostName("VM04-Test");
- virtualMachineConfig.setDomain("vmware.com");
- virtualMachineConfig.setFolder(folder);
- virtualMachineConfig.setClusterComputeResource(clusterComputeResource);
- virtualMachineConfig.setDatastore(datastore);
- CustomizationFixedIp fixedIp = new CustomizationFixedIp();
- fixedIp.setIpAddress("1.1.1.1");
- CustomizationIPSettings customizationIPSettings = new CustomizationIPSettings();
- customizationIPSettings.setIp(fixedIp);
- customizationIPSettings.setSubnetMask("255.255.255.0");
- customizationIPSettings.setGateway(new String[]{"1.1.1.254"});
- customizationIPSettings.setDnsDomain(virtualMachineConfig.getDomain());
- customizationIPSettings.setDnsServerList(new String[]{"8.8.8.8", "114.114.114.114"});
- virtualMachineConfig.setIpSettings(customizationIPSettings);
- CustomizationAdapterMapping customizationAdapterMappings = new CustomizationAdapterMapping();
- customizationAdapterMappings.setAdapter(virtualMachineConfig.getIpSettings());
- customizationSpec.setNicSettingMap(new CustomizationAdapterMapping[]{customizationAdapterMappings});
- CustomizationLinuxPrep linuxPrep = new CustomizationLinuxPrep();
- linuxPrep.setDomain(virtualMachineConfig.getDomain());
- CustomizationFixedName fixedName = new CustomizationFixedName();
- fixedName.setName(virtualMachineConfig.getHostName());
- linuxPrep.setHostName(fixedName);
- customizationSpec.setIdentity(linuxPrep);
- if (virtualMachineTemplate != null){
- virtualMachineService.cloneVirtualMachineFromTemplateWithCustomization(
- virtualMachineTemplate,
- virtualMachineConfig,
- customizationSpec);
- }else {
- throw new Exception("Can't find the virtual machine template");
- }
- }
- }
vSphere SDK for Java - 从模板部署虚拟机并配置IP地址的更多相关文章
- VM虚拟机手动配置IP地址
1.查看虚拟机的网关 编辑-->虚拟网络编辑器 VMnet8 NAT模式-->NAT设置-->网关IP 2.设置IP地址 系统-->首选项-->网络连接 system e ...
- 一、安装虚拟机,配置ip地址
一.安装linux 注意点: 一.选择最小化安装的时候,要自定义安装软件,必须要安装下面的 如果没有安装上面的,需要用下面的命令来查询安装 如果没有安装就会出现各种问题 二.分区简单介绍 1.至少要一 ...
- 云服务和虚拟机的预留 IP 地址
大家好! 我很高兴地向大家宣布,云服务和虚拟机的预留 IP 地址将自 2014年 5月 12日起正式发布.在这篇博客中,我们将演示如何管理预留 IP.将预留 IP 与云服务和虚拟机关联.定价模型和一些 ...
- [部署]CentOS配置IP地址
环境 虚拟机:VMWare10.0.1 build-1379776 操作系统:CentOS7 64位 简介 CentOS7最小化安装(Minimal)时,是不带ifconfig指令的,该指令在net- ...
- JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)
1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...
- Java 获取当前项目所在服务器的 IP 地址
java中获取当前服务器地址主要使用到InetAddress这个类 public static void main(String[] args) { try { //用 getLocalHost() ...
- 虚拟机下CentOS 配置IP地址的三种方法
1.自动获取IP地址(我不是用的这种方法,不做过多介绍) 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分配IP地址. #dhclient 自动获取ip地址命令 #if ...
- 虚拟机下CentOS 6.5配置IP地址的三种方法
实验软件环境:虚拟机Vmware Workstation10.0 .CentOS 6.5 32位 1.自动获取IP地址 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分 ...
- VM虚拟机下CentOS 6.5配置IP地址的三种方法
1.自动获取IP地址 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分配IP地址. #dhclient 自动获取ip地址命令 #ifconfig 查询系统里网卡信息,i ...
随机推荐
- Java基础之Calendar类、JNDI之XML
一.Calendar类 从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现.在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要 ...
- HTML代码大全
1.html的简介* 什么是html?- HyperText Markup Language:超文本标记语言,网页语言** 超文本:超出文本的范畴,使用html可以轻松实现这样操作** 标记:html ...
- glibc-2.23_large_bin链接方式_浅析
上面两个图应该合并为一个图,但是指针太多了,合并在一起看不清了,所以分成两张图 所有的块都通过fd和bk两个指针链接,但是为了加快查询速度,不同大小的chunk通过fd_nextsize和bk_nex ...
- Python中的推导式(列表推导式、字典推导式、集合推导式)
推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(lis ...
- intellij idea 编码设置(乱码问题)
一般把编辑器设置为 utf-8 如下设置: file-->setting-->editor-->file encodings-->
- d3.js 之关联数据:data操作符
数据可视化 在可视化工作中,一个基本出发点是将不同的数值映射到不同的可视化 元素的属性上,使其表现出各自不同的视觉特征. 比如:以数组中的每一个值为直径分别创建一个圆,我们得到三个圆: 在d3中,可视 ...
- HDFS基本工作机制
- react native 或 flutter 开发app
react-native react native和原生Android/ios: https://www.oschina.net/news/97466/should-we-use-react-nati ...
- PHP error_log 新认知
//error_log 简介及使用方法 // error_log("消息","类型","路径"); //message //type ...
- Loki之Funtion
阅读Loki中Funtion源码之后的个人理解,该库归纳起来可以说有三层(C++设计新思维列举到2个参数,此处列举到3个参数),要记住C++的模板其实就是C语言高级的宏定义,如果用户没有用到对应的模板 ...