示例代码:

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;
import java.util.concurrent.atomic.AtomicInteger; @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://10.110.164.133/sdk"), "administrator@vsphere.local", "VMware1!", true);
} catch (MalformedURLException | RemoteException e) {
e.printStackTrace();
}
return null;
}private VirtualMachine getVirtualMachineByName(String virtualMachineName) throws RemoteException {
return (VirtualMachine) inventoryNavigator.searchManagedEntity("VirtualMachine", virtualMachineName);
}public static VirtualDeviceConfigSpec createVirtualDiskSpec(int diskSizeGb, Integer unitNumber, Integer controllerKey, String fileName ) { // assemble diskBackingInfo
VirtualDiskFlatVer2BackingInfo diskBackingInfo = new VirtualDiskFlatVer2BackingInfo();
diskBackingInfo.setThinProvisioned(true);
diskBackingInfo.setDiskMode("persistent");
diskBackingInfo.setFileName(fileName); // assemble virtualDisk
VirtualDisk virtualDisk = new VirtualDisk();
virtualDisk.setBacking(diskBackingInfo);
virtualDisk.setUnitNumber(unitNumber);
virtualDisk.setCapacityInKB(diskSizeGb * 1024 * 1024);
virtualDisk.setControllerKey(controllerKey);
virtualDisk.setKey(-1); // assemble virtualDeviceConfigSpec
VirtualDeviceConfigSpec diskSpec = new VirtualDeviceConfigSpec();
diskSpec.setFileOperation(VirtualDeviceConfigSpecFileOperation.create);
diskSpec.setOperation(VirtualDeviceConfigSpecOperation.add);
diskSpec.setDevice(virtualDisk);
return diskSpec;
} // 获取虚拟机磁盘管理的ControllerKey
private int getControllerKeyByVirtualMachine(VirtualMachine vm) {
AtomicInteger controllerKey = new AtomicInteger();
if (vm != null) {
VirtualDevice[] devices = vm.getConfig().getHardware().getDevice();
if (devices != null && devices.length > 0) {
for (VirtualDevice device : devices) {
if (device instanceof VirtualDisk) {
controllerKey.set(device.getControllerKey());
}
}
}
}
return controllerKey.get();
} // 获取虚拟机已生成UnitNumber
private int getUnitNumberByVirtualMachine(VirtualMachine vm) {
AtomicInteger unitNumber = new AtomicInteger();
if (vm != null) {
VirtualDevice[] devices = vm.getConfig().getHardware().getDevice();
if (devices != null && devices.length > 0) {
for (VirtualDevice device : devices) {
if (device instanceof VirtualDisk) {
unitNumber.set(device.getUnitNumber());
}
}
}
}
unitNumber.set(unitNumber.get() + 1);
return unitNumber.get();
} private String getFreeDataStoreName(VirtualMachine vm, int size) throws Exception {
Datastore[] dataStores = vm.getDatastores();
for(Datastore datastore: dataStores)
{
DatastoreSummary ds = datastore.getSummary();
if(ds.getFreeSpace() > size)
{
return ds.getName();
}
}
return null;
} public static void main(String[] args) throws Exception {
VirtualMachineService virtualMachineService = new VirtualMachineService(); VirtualMachine virtualMachine = virtualMachineService.getVirtualMachineByName("T-001"); Integer controllerKey = virtualMachineService.getControllerKeyByVirtualMachine(virtualMachine);
Integer unitNumber = virtualMachineService.getUnitNumberByVirtualMachine(virtualMachine);
int diskSize = 2;
String diskName = "test_disk"; String dsName = virtualMachineService.getFreeDataStoreName(virtualMachine, diskSize);
String fileName = "[" + dsName + "] " + virtualMachine.getName() + "/" + diskName + ".vmdk";
VirtualDeviceConfigSpec virtualDeviceConfigSpec = createVirtualDiskSpec(diskSize, unitNumber, controllerKey, fileName); VirtualMachineConfigSpec virtualMachineConfigSpec = new VirtualMachineConfigSpec();
VirtualDeviceConfigSpec[] diskSpecArray = {virtualDeviceConfigSpec};
virtualMachineConfigSpec.setDeviceChange(diskSpecArray);
Task task = virtualMachine.reconfigVM_Task(virtualMachineConfigSpec);
task.waitForTask();
}
}

vSphere SDK for Java - 为虚拟机添加磁盘的更多相关文章

  1. exsi中的虚拟机添加磁盘后虚拟机中磁盘不出现

    exsi中的虚拟机添加磁盘后虚拟机中磁盘不出现解决: 计算机---> 管理: 这里可以选择磁盘,格式,分区, 改盘符等操作

  2. 使用版本 1.0.0 的 Azure ARM SDK for Java 创建虚拟机时报错

    问题描述 我们可以通过使用 Azure ARM SDK 来管理 Azure 上的资源,因此我们也可以通过 SDK 来创建 ARM 类型的虚拟机,当我们使用 1.0.0 版本的 Azure SDK fo ...

  3. vSphere SDK for Java - 从模板部署虚拟机并配置IP地址

    vSphere for Java类库:vijava    虚拟机配置类 package com.vmware.vcenter_event.VirtualMachine; import com.vmwa ...

  4. vSphere SDK for Java 示例

    示例代码: package com.vmware.event.connect; import java.net.MalformedURLException; import java.net.URL; ...

  5. 虚拟机添加磁盘LVM分区

    参考博客:http://kimjinlsgd.blog.51cto.com/1918030/932210 一.查看磁盘情况 新添加一块磁盘. [root@VMhost /]# fdisk -l Dis ...

  6. Installing vSphere SDK for Perl

    Installing vSphere SDK for Perl 你可以安装vSphere SDK 在Linux 或者Microsoft Windows 系统,或者 部署 VSphere Managem ...

  7. vmware vsphere client 虚拟机动态添加磁盘

    0x00 事件 为了在虚拟机添加了磁盘之后,不重启机器加载新磁盘. 如上图,添加了一块 10G 的磁盘之后. 在虚拟机中是看不到新添加的磁盘: 0x01 解决 运行如下命令,通过重新扫描 SCSI ( ...

  8. ViutualBox虚拟机里添加磁盘

    1.首先在VirtualBox界面给虚拟机添加一块磁盘 2. 启动系统,查看当前磁盘空间 Last login: Tue Mar 15 22:24:47 2016 from 192.168.1.100 ...

  9. VMware虚拟机下为Ubuntu添加磁盘

    20G的磁盘还是不够用啊,正好复习下磁盘分区和逻辑卷. 关闭虚拟机,打开VMware,右键虚拟机点击设置,点下下方的添加,就可以添加磁盘了. 进入虚拟机,查看: root@ubuntu:/# fdis ...

随机推荐

  1. php备忘录模式(memento pattern)

    晚上刷起来. <?php /* The memento pattern provides the object restore functionality. Implementation is ...

  2. Show which git tag you are on?

    git查看当前代码是在那个tag? reference: https://stackoverflow.com/questions/3404936/show-which-git-tag-you-are- ...

  3. javax.persistence.PersistenceException: Unable to build entity manager factory

    javax.persistence.PersistenceException: Unable to build entity manager factory at org.hibernate.jpa. ...

  4. QTAction Editor的简单使用(简洁明了)

    1. 打开UI界面,选择如下图的模式 2. 添加资源名称并选择相应的资源,点击OK 3. 相应的资源就建立好了 4. 添加好的资源可以直接拖到MainWindow中

  5. 28、Python网络编程

    一.基于TCP协议的socket套接字编程 1.套接字工作流程 先从服务器端说起.服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客 ...

  6. 【转载】TCP协议

    首部格式 图释: 各个段位说明: 源端口和目的端口:各占 2 字节.端口是传输层与应用层的服务接口.传输层的复用和分用功能都要通过端口才能实现 序号:占 4 字节.TCP 连接中传送的数据流中的每一个 ...

  7. try catch 小结 , node的回调callback里不能捕获异常 , 不能被v8优化(现在能了),

    <深入浅出Nodejs>时,在第四章 - 异步编程中作者朴灵曾提到,异步编程的难点之一是异常处理,书中描述"尝试对异步方法进行try/catch操作只能捕获当次事件循环内的异常, ...

  8. 从Swift桥接文件到Clang-LLVM

    http://blog.csdn.net/u014795020/article/details/72514109 前言 今天在Swift工程中不小心创建了一个OC文件,于是乎提示我创建一个桥接文件,那 ...

  9. 使用Map文件查找崩溃信息

    简介 编写整洁的应用程序是一回事.但是当用户告诉你你的软件已经崩溃时,你知道在添加其他功能之前最好先解决这个问题.如果你够幸运的话,用户会有一个崩溃地址.这将大大有助于解决这个问题.但是你怎么能用这个 ...

  10. Linux常用命令简述--dirname与basename

    dirname 获取父目录 basename 显示最后的目录名或文件名 .dirname [root@liang ~]# dirname /etc/httpd/ /etc [root@liang ~] ...