示例代码:

  1. import com.vmware.vim25.*;
  2. import com.vmware.vim25.mo.*;
  3. import org.springframework.stereotype.Service;
  4.  
  5. import java.net.MalformedURLException;
  6. import java.net.URL;
  7. import java.rmi.RemoteException;
  8. import java.util.concurrent.atomic.AtomicInteger;
  9.  
  10. @Service
  11. public class VirtualMachineService {
  12.  
  13. private ServiceInstance vCenterServiceInstance;
  14.  
  15. private InventoryNavigator inventoryNavigator;
  16.  
  17. public VirtualMachineService() {
  18. vCenterServiceInstance = this.vcInit();
  19. inventoryNavigator = new InventoryNavigator(vCenterServiceInstance.getRootFolder());
  20. }
  21.  
  22. public ServiceInstance vcInit(){
  23. try {
  24. return new ServiceInstance(new URL("https://10.110.164.133/sdk"), "administrator@vsphere.local", "VMware1!", true);
  25. } catch (MalformedURLException | RemoteException e) {
  26. e.printStackTrace();
  27. }
  28. return null;
  29. }private VirtualMachine getVirtualMachineByName(String virtualMachineName) throws RemoteException {
  30. return (VirtualMachine) inventoryNavigator.searchManagedEntity("VirtualMachine", virtualMachineName);
  31. }public static VirtualDeviceConfigSpec createVirtualDiskSpec(int diskSizeGb, Integer unitNumber, Integer controllerKey, String fileName ) {
  32.  
  33. // assemble diskBackingInfo
  34. VirtualDiskFlatVer2BackingInfo diskBackingInfo = new VirtualDiskFlatVer2BackingInfo();
  35. diskBackingInfo.setThinProvisioned(true);
  36. diskBackingInfo.setDiskMode("persistent");
  37. diskBackingInfo.setFileName(fileName);
  38.  
  39. // assemble virtualDisk
  40. VirtualDisk virtualDisk = new VirtualDisk();
  41. virtualDisk.setBacking(diskBackingInfo);
  42. virtualDisk.setUnitNumber(unitNumber);
  43. virtualDisk.setCapacityInKB(diskSizeGb * 1024 * 1024);
  44. virtualDisk.setControllerKey(controllerKey);
  45. virtualDisk.setKey(-1);
  46.  
  47. // assemble virtualDeviceConfigSpec
  48. VirtualDeviceConfigSpec diskSpec = new VirtualDeviceConfigSpec();
  49. diskSpec.setFileOperation(VirtualDeviceConfigSpecFileOperation.create);
  50. diskSpec.setOperation(VirtualDeviceConfigSpecOperation.add);
  51. diskSpec.setDevice(virtualDisk);
  52. return diskSpec;
  53. }
  54.  
  55. // 获取虚拟机磁盘管理的ControllerKey
  56. private int getControllerKeyByVirtualMachine(VirtualMachine vm) {
  57. AtomicInteger controllerKey = new AtomicInteger();
  58. if (vm != null) {
  59. VirtualDevice[] devices = vm.getConfig().getHardware().getDevice();
  60. if (devices != null && devices.length > 0) {
  61. for (VirtualDevice device : devices) {
  62. if (device instanceof VirtualDisk) {
  63. controllerKey.set(device.getControllerKey());
  64. }
  65. }
  66. }
  67. }
  68. return controllerKey.get();
  69. }
  70.  
  71. // 获取虚拟机已生成UnitNumber
  72. private int getUnitNumberByVirtualMachine(VirtualMachine vm) {
  73. AtomicInteger unitNumber = new AtomicInteger();
  74. if (vm != null) {
  75. VirtualDevice[] devices = vm.getConfig().getHardware().getDevice();
  76. if (devices != null && devices.length > 0) {
  77. for (VirtualDevice device : devices) {
  78. if (device instanceof VirtualDisk) {
  79. unitNumber.set(device.getUnitNumber());
  80. }
  81. }
  82. }
  83. }
  84. unitNumber.set(unitNumber.get() + 1);
  85. return unitNumber.get();
  86. }
  87.  
  88. private String getFreeDataStoreName(VirtualMachine vm, int size) throws Exception {
  89. Datastore[] dataStores = vm.getDatastores();
  90. for(Datastore datastore: dataStores)
  91. {
  92. DatastoreSummary ds = datastore.getSummary();
  93. if(ds.getFreeSpace() > size)
  94. {
  95. return ds.getName();
  96. }
  97. }
  98. return null;
  99. }
  100.  
  101. public static void main(String[] args) throws Exception {
  102. VirtualMachineService virtualMachineService = new VirtualMachineService();
  103.  
  104. VirtualMachine virtualMachine = virtualMachineService.getVirtualMachineByName("T-001");
  105.  
  106. Integer controllerKey = virtualMachineService.getControllerKeyByVirtualMachine(virtualMachine);
  107. Integer unitNumber = virtualMachineService.getUnitNumberByVirtualMachine(virtualMachine);
  108. int diskSize = 2;
  109. String diskName = "test_disk";
  110.  
  111. String dsName = virtualMachineService.getFreeDataStoreName(virtualMachine, diskSize);
  112. String fileName = "[" + dsName + "] " + virtualMachine.getName() + "/" + diskName + ".vmdk";
  113. VirtualDeviceConfigSpec virtualDeviceConfigSpec = createVirtualDiskSpec(diskSize, unitNumber, controllerKey, fileName);
  114.  
  115. VirtualMachineConfigSpec virtualMachineConfigSpec = new VirtualMachineConfigSpec();
  116. VirtualDeviceConfigSpec[] diskSpecArray = {virtualDeviceConfigSpec};
  117. virtualMachineConfigSpec.setDeviceChange(diskSpecArray);
  118. Task task = virtualMachine.reconfigVM_Task(virtualMachineConfigSpec);
  119. task.waitForTask();
  120. }
  121. }

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. splunk dga

    https://splunkbase.splunk.com/app/3559/ 详细参考: https://www.slideshare.net/Splunk/using-machine-learni ...

  2. php中的Exception

    如果定制的EXCEPTION搞定了,默认的,就自然不在话下罗. 直接上最曲折的过程. InvalidIdException.php <?php namespace Bookstore\Excep ...

  3. 不能走路(walk)

    [题目背景] 小G 同学总是在树上走路.小S 看不下去了,决定阻止小G 同学. [题目描述] 有一棵 n 个点的树,树上有 m 条路径,每条路径为 x[i]到y[i] 的树上最短路径(不经过相同的边) ...

  4. hive表分区相关操作

    Hive 表分区 Hive表的分区就是一个目录,分区字段不和表的字段重复 创建分区表: create table tb_partition(id string, name string) PARTIT ...

  5. 类数组对象与arguments

    类数组对象 所谓的类数组对象: 拥有一个 length 属性和若干索引属性的对象 举个例子: var array = ['name', 'age', 'sex']; var arrayLike = { ...

  6. JS的ES6的Symbol

    一.Symbol 1.什么是Symbol: Symbol是ES6新添加的原始类型(ES5已有原始数据类型:String,Number,boolean,function,undefined,object ...

  7. ffmpeg结合SDL编写播放器(一)

    ffmpeg 工具是一个高效快速的命令行工具,进行视音频不同格式之间的转换. ffmpeg命令行 ffmpeg可以读取任意数量的输入“文件”(可以是常规文件,管道,网络流,抓取设备等)读取,由 -i ...

  8. LSTM代码

    tensorflow的关于LSTM的代码,经过反复的调试和修改,终于运行成功了,可以把训练过程的结果保存起来,然后预测的时候直接取出来.花了很长时间才把官网上的代码调试成功,里面的坑有很多需要填补,还 ...

  9. AttributeError: module 'pytest' has no attribute 'allure'

    解决 pip3 uninstall pytest-allure-adaptor pip3 install allure-pytest 参考: https://www.cnblogs.com/lansa ...

  10. 冰多多团队alpha阶段发布说明

    标题:冰多多Alpha阶段发布说明 Alpha版本功能介绍 我们项目当前是两个部分,前端编辑器和后端mtermux是分开的,是两个独立的app项目,还没有完美的连起来(我们alpha阶段目标任务是不必 ...