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地址的更多相关文章

  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. Hibernate的调用数据库的存储过程

    Hibernate并没有给出直接调用数据库的存储过程的API,所以咋们就要通过调用原生的的connection对象来实现对存储过程的条用 Hibernate调用存储过程的步骤: 1:获得原生conne ...

  2. Hibernate-sessio缓存的操作

    首先咋们看一个图: flush:首先箭头是由缓存指向数据库,即当我调用 Session.flush()方法时它会强制使数据库的记录跟缓存 中的对象状态保持同步 ,如果不一致,就会发送Sql语句 ,保持 ...

  3. poj1742 Coins【多重背包】【贪心】

    Coins Time Limit: 3000MS   Memory Limit: 30000K Total Submissions:43969   Accepted: 14873 Descriptio ...

  4. Hadoop伪分布安装详解(五)

    目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...

  5. img元素的alt和title的区别?

    alt是图片加载失败时显示在网页上的提示信息: title是鼠标放上面时显示的文字(图片加载失败鼠标放显示的代替文字上时仍然会显示提示信息): 除此之外,alt是img的必要属性,只能用在img.ar ...

  6. Python目录整合

    一.python基础篇 二.网络编程篇&&并发编程篇 三.数据库篇 -mysql -redis -mongodb 四.前端篇 -html -css -js jquery&&am ...

  7. Selenium问题总结

    1.Exception in thread "main" org.openqa.selenium.WebDriverException: Cannot find firefox b ...

  8. golang几种post方式

    用golang进行http请求类型多了,总结备忘一下. 1.普通的post\get请求 var r http.Request r.ParseForm() r.Form.Add("uuid&q ...

  9. Java中的高精度整数和高精度小数

    在实际编码中,会遇到很多高精度的事例,比如,在计算金钱的时候就需要保留高精度小数,这样计算才不会有太大误差: 在下面的代码中,我们验证了,当两个float型的数字相加,得到的结果和我们的预期结果是有误 ...

  10. Windows 和 Linux 的文件名

    Windows中文件名是区分大小写的,而Linux不区分. 在开发中,发现在Windows可以执行通过,在Linux可能由于文件名不一致而失败.