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 ...
随机推荐
- 飘城旅游网pc,流式,响应式布局
相关视频教程http://pan.baidu.com/s/1o77wirK 我的源码链接:http://pan.baidu.com/s/1czTsKI
- Code Forces 21 A(模拟)
A. Jabber ID time limit per test 0.5 second memory limit per test 256 megabytes input standard input ...
- Exchange Database Status(Copy Status ,Content Index State,QueueLength,Move Status...)
Copy Status Description Mounted The active copy is online and accepting client connections. Only the ...
- 【转】Spring Boot 日志配置(超详细)
更新日志: 20170810 更新通过 application.yml传递参数到 logback 中. [toc] 简书不支持目录,截图一张. image.png 默认日志 Logback: 默认情况 ...
- SpringCloud 进阶之Eureka(服务注册和发现)
1. Eureka 服务注册与发现 Eureka 是一个基于REST的服务,用于服务的的注册与发现; Eureka采用C-S的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册 ...
- King's Game---hdu5643(约瑟夫环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5643 约瑟夫环问题的原来描述为,设有编号为1,2,……,n的n(n>0)个人围成一个圈,从 ...
- 关闭在chrome里使用双指前进后退页面的功能
defaults write com.google.Chrome AppleEnableSwipeNavigateWithScrolls -bool FALSE
- html知识代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- BDC批量修改物料描述
一.定义变量 type-POOLs:TRUXS,slis. TYPES: BEGIN OF ty_input , matnr TYPE mara-matnr , " 物料号 maktx TY ...
- Delphi APP 開發入門(十)REST Client 開發
Delphi APP 開發入門(十)REST Client 開發 分享: Share on facebookShare on twitterShare on google_plusone_share ...