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 ...
随机推荐
- Hadoop入门必须知道的简单知识
Hadoop入门知识 Hadoop构成 Hadoop由4个主要构成部分: 1) 基础核心:提供基础的通用的功能 2) HDFS:分布式存储 3) MapReduce:分布式计算 4) YARN:资源分 ...
- ionic 上拉加载问题(分页)
问题描述: 1.第一初始化时执行了上拉加载更多. 2.上拉时存在执行多次加载动作. angularjs的ajax不提供同步机制,是为了防止页面长时间等待,很多时候我们又需要这种同步机制交换状态,比如上 ...
- HOW TO FIX "EXPECTED BEGIN_ARRAY BUT WAS BEGIN_OBJECT" IN RETROFIT ?
https://www.freshbytelabs.com/2018/05/how-to-fix-expected-beginarray-but-was.html HOW TO FIX "E ...
- Java中“==和equals”的区别
(1)“==” 是判断地址的: (2)至于equals,String类型重写了 equals()方法,判断内容是否相等,因此 equals 是相等的:
- python中yield使用
16.yield使用 列表推导与生成器表达式 当我们创建了一个列表的时候,就创建了一个可以迭代的对象: >>> squares=[n*n for n in range(3)] ...
- Nginx 之 内存池
1.基本结构 先来学习一下nginx内存池的几个主要数据结构:[见:./src/core/ngx_palloc.h/.c] ngx_pool_data_t(内存池数据块结构) 1: typed ...
- git学习------>Git 分支管理最佳实践
ps:本文转载于 : https://www.ibm.com/developerworks/cn/java/j-lo-git-mange/index.html Git 是目前最流行的源代码管理工具.大 ...
- Oracle 学习笔记 12 -- 序列、索引、同义词
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/Topyuluo/article/details/24232449 数据库的对象包含:表.视图.序列. ...
- Python:解析properties文件
在项目中遇到解析properties的情况,而Python中正好没有解析properties文件的现成模块,于是从网上找到了这个脚本,有一些小地方修改了一下 原博客: Python读写properti ...
- PNPoly算法代码例子,判断一个点是否在多边形里面
写C语言的实验用到的一个算法,判断一个点是否在多边形的内部.C的代码如下: int pnpoly(int nvert, float *vertx, float *verty, float testx, ...