Vijava (更改虚拟机配置信息(内存、CPU和添加新磁盘)终极版本)
来源:互联网 发布:崩坏学园2初始号淘宝 编辑:程序博客网 时间:2024/06/02 03:04
package com.vmware.server;import java.util.List;import java.util.Map;import org.apache.log4j.FileAppender;import org.apache.log4j.Logger;import org.apache.log4j.SimpleLayout;import com.vmware.pojo.VirtualMachineConfig;import com.vmware.util.DataBase;import com.vmware.util.Session;import com.vmware.util.StringRandom;import com.vmware.util.VmwareUtil;import com.vmware.vim25.VirtualDevice;import com.vmware.vim25.VirtualDeviceConfigSpec;import com.vmware.vim25.VirtualDeviceConfigSpecFileOperation;import com.vmware.vim25.VirtualDeviceConfigSpecOperation;import com.vmware.vim25.VirtualDisk;import com.vmware.vim25.VirtualDiskFlatVer2BackingInfo;import com.vmware.vim25.VirtualMachineConfigSpec;import com.vmware.vim25.VirtualMachinePowerState;import com.vmware.vim25.mo.Folder;import com.vmware.vim25.mo.InventoryNavigator;import com.vmware.vim25.mo.ServiceInstance;import com.vmware.vim25.mo.Task;import com.vmware.vim25.mo.VirtualMachine;/** * VirtualMachineConfigServer:虚拟机配置更改服务 **/public class VirtualMachineConfigServer {public static Logger logger = Logger.getLogger(VirtualMachineConfigServer.class);//public void vmConfig(List<VirtualMachineConfig> list) {// 自定义工具栏VmwareUtil util = new VmwareUtil();// 日志处理SimpleLayout layout = new SimpleLayout();FileAppender appender = null;try {appender = new FileAppender(layout, "log.txt", false);} catch (Exception e) {}logger.addAppender(appender);// 逻辑处理try {Map map = util.getURL();String ip = String.valueOf(map.get("ip"));String username = String.valueOf(map.get("username"));String password = String.valueOf(map.get("password"));if (list.size() > 0 && list != null) {for (VirtualMachineConfig config : list) {ServiceInstance instance = Session.getInstance(ip,username, password);if (instance != null) {logger.debug("vmware 连接成功");} else {logger.debug("vmware 连接失败,请检查vmware连接相关配置信息");}Folder rootFolder = instance.getRootFolder();InventoryNavigator inventoryNavigator = new InventoryNavigator(rootFolder);try {com.vmware.vim25.mo.VirtualMachine VM = (com.vmware.vim25.mo.VirtualMachine) inventoryNavigator.searchManagedEntity("VirtualMachine",config.getXnjName());if (VM != null) {logger.debug("虚拟机 查询成功");} else {logger.debug("虚拟机 查询失败,请仔细检查配置模板是否存在");}if(!VM.getRuntime().getPowerState().name().equalsIgnoreCase(VirtualMachinePowerState.poweredOff.name())){Task tasks = VM.powerOffVM_Task();tasks.waitForTask();}// 修改虚拟机相关配置属性VirtualMachineConfigSpec configSpec = new VirtualMachineConfigSpec();// 设置CPU核数configSpec.setNumCPUs(Integer.parseInt(config.getCpu()));// 设置内存大小configSpec.setMemoryMB((long) Integer.parseInt(config.getRam())); int diskSize = Integer.parseInt(config.getRl())*1024*1024; // mode: persistent|independent_persistent,independent_nonpersistent String diskMode = "persistent"; VirtualDeviceConfigSpec vdiskSpec = createDiskSpec(config.getDsName(),diskSize, diskMode,VM); VirtualDeviceConfigSpec[] vdiskSpecArray = {vdiskSpec}; configSpec.setDeviceChange(vdiskSpecArray);Task task = VM.reconfigVM_Task(configSpec);String result = task.waitForTask();if (result.equals(Task.SUCCESS)) {logger.debug("模板生成虚拟机成功");logger.debug("模板生成虚拟机成功");System.out.println("flwId:"+config.getFlwId());String sql = "update tb_flw_content set `status`='3' where `flw_id`='"+ config.getFlwId() + "'";DataBase.update(sql);String deleteAll = "update tb_flw_content set `status`='6' where `flw_id`='"+ config.getFlwId() + "'";DataBase.update(deleteAll);} else {logger.debug("模板生成虚拟机失败,请查询Vcenter 上相关日志信息");}instance.getServerConnection().logout();} catch (Exception e) {logger.debug("template 查询失败,请仔细检查配置模板是否存在");instance.getServerConnection().logout();break;}}}} catch (Exception e) {}}public static VirtualDeviceConfigSpec createDiskSpec(String dsName, long diskSizeKB, String diskMode, VirtualMachine vm) {VirtualDeviceConfigSpec diskSpec = new VirtualDeviceConfigSpec();diskSpec.setOperation(VirtualDeviceConfigSpecOperation.add);diskSpec.setFileOperation(VirtualDeviceConfigSpecFileOperation.create);VirtualDisk vd = new VirtualDisk();vd.setCapacityInKB(diskSizeKB);diskSpec.setDevice(vd);vd.setKey(getkey(vm));vd.setUnitNumber(getUnitNumber(vm));vd.setControllerKey(getcontrollerkey(vm));VirtualDiskFlatVer2BackingInfo diskfileBacking = new VirtualDiskFlatVer2BackingInfo();String diskName=StringRandom.getStringRandom(12);String fileName = "["+ dsName +"] "+ vm.getName() + "/" + diskName + ".vmdk";diskfileBacking.setFileName(fileName);diskfileBacking.setDiskMode(diskMode);diskfileBacking.setThinProvisioned(true);vd.setBacking(diskfileBacking);return diskSpec;}// 获取虚拟机磁盘管理的controlerkeypublic static int getcontrollerkey(VirtualMachine vm) {int controllerkey = 0;if (vm != null) {VirtualDevice[] devices = vm.getConfig().getHardware().getDevice();if (devices != null && devices.length > 0) {for (int i = 0; i < devices.length; i++) {VirtualDevice device = devices[i];if (device instanceof VirtualDisk) {controllerkey = device.getControllerKey();}}}}return controllerkey;}// 获取虚拟机已生成keypublic static int getkey(VirtualMachine vm) {int key = 0;if (vm != null) {VirtualDevice[] devices = vm.getConfig().getHardware().getDevice();if (devices != null && devices.length > 0) {for (int i = 0; i < devices.length; i++) {VirtualDevice device = devices[i];if (device instanceof VirtualDisk) {key = device.getKey();}}}}key = key + 1;return key;}// 获取虚拟机已生成UnitNumberpublic static int getUnitNumber(VirtualMachine vm) {int UnitNumber = 0;if (vm != null) {VirtualDevice[] devices = vm.getConfig().getHardware().getDevice();if (devices != null && devices.length > 0) {for (int i = 0; i < devices.length; i++) {VirtualDevice device = devices[i];if (device instanceof VirtualDisk) {UnitNumber = device.getUnitNumber();}}}}UnitNumber = UnitNumber + 1;return UnitNumber;}}以上代码是 核心代码。
0 0
- Vijava (更改虚拟机配置信息(内存、CPU和添加新磁盘)终极版本)
- Vijava 学习笔记(指定虚拟机添加虚拟磁盘修订功能版本)
- Vijava 学习笔记之(VirtualMachine 更改虚拟机系统磁盘大小)
- Vijava (模板部署虚拟机,并指定自定义规范(终极版本))
- Vijava学习笔记之(为指定的SCSI控制器,添加关联磁盘。主要针对虚拟机)
- Vijava 学习笔记之(Cluster 关联资源信息:CPU、内存、Datastore容量信息)
- Vijava 学习笔记之(虚拟机可扩容CPU核数、内存大小和关联DataStore)
- KVM虚拟机添加新磁盘
- 虚拟机扩展磁盘--不添加新磁盘
- linux查看机器信息:cpu、内存和磁盘
- [总结]怎么给VM(虚拟机)添加新磁盘
- 获取CPU,内存使用率,磁盘相关信息
- java获取cpu,内存,磁盘等信息
- java获取cpu,内存,磁盘等信息
- java获取cpu,内存,磁盘等信息
- 【SHELL】监控系统信息CPU,磁盘,内存
- C#-获取磁盘,cpu,内存信息
- 获取系统磁盘、CPU、内存信息
- windows+mac双分区
- jsp 中 request.getHeader() 相关详细
- Android greenDao开源数据库框架
- android-junit-report-1.5.8.jar的使用
- 中继器,集线器,交换机,路由器,网桥,网关的区别
- Vijava (更改虚拟机配置信息(内存、CPU和添加新磁盘)终极版本)
- CAA中选择元素过滤,总结...
- Cocos2Dx之动作Action
- solr学习笔记
- 使用DBUnit测试时违反外键约束的解决办法
- 脑波设备mindwave数据流二次开发示例
- struts2 type="redirectAction" 使用范例讲解
- 处理后缀填充
- bat文件语法