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 ...
随机推荐
- 160408、SpringMVC整合Shiro
第一步:配置web.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <!-- 配置Shiro过滤器,先让Shiro过滤系统接收到的请求 --> ...
- hibernate的.hbm.xml文件文件配置属性详解
一般.hbm.xml文件如下面: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "- ...
- java nio探险
区别于io: nio是基于通道和缓冲区的,io是基于字节流和字符流的,(千万别被这些破名词唬住).以读取文件为例,文件就是自来水厂,通道就是自来水管道,缓冲区就是你家的缸(或者盛水的xx容器,例如你的 ...
- 20165330 预备作业3 Linux安装及学习
虚拟机安装 在安装VirtualBox时我的电脑一直打不开官网的下载地址,还好后面有可以打开了,于是我顺利的下载好了VirtualBox.而在运行出现了以下错误: 错误1:点击创建虚拟机时出现了以下提 ...
- 大文本 mysql es
大文本 mysql es mysql id longText ---> es longText mysqlId 大文本先入mysql,再同步至es: 文本查询逻辑交由es实现: mysq ...
- 与python的第一次邂逅
python简介 一.什么是python python是一种面向对象.直译式的计算机程序语言,所以有了武老师的那句名言:一切皆为对象 python的设计哲学是:“优雅”,“明确”,“简单” pytho ...
- django高级应用(分页功能)
django高级应用(分页功能) 1.原生分页应用 前端html代码 <!DOCTYPE html> <html lang="en"> <head&g ...
- vue中获取客户端IP地址(不需要额外引入三方文件)
之前看了几种方法 ,都是引入腾讯,新浪,搜狐等的三方js文件来查询IP地址,但是我自己测试的时候IP地址不准确,所以就找了找,发现了这个方法,准确的获取到了IP地址和cmd的ipconfig获取到的I ...
- Linux内核中namespace之PID namespace
前面看了LInux PCI设备初始化,看得有点晕,就转手整理下之前写的笔记,同时休息一下!!~(@^_^@)~ 这片文章是之前写的,其中参考了某些大牛们的博客!! PID框架的设计 一个框架的设计会考 ...
- windows中根据进程PID查找进程对象过程深入分析
这里windows和Linxu系列的PID 管理方式有所不同,windows中进程的PID和句柄没有本质区别,根据句柄索引对象和根据PID或者TID查找进程或者线程的步骤也是一样的. 句柄是针对进 ...