【问题标题】:Customization of Virtual Machine at time of creation(cloning) using VSphere SDK 6.0 Java application使用 VSphere SDK 6.0 Java 应用程序在创建(克隆)时自定义虚拟机
【发布时间】:2016-08-12 11:58:32
【问题描述】:

我正在使用 VSphere SDK 6.0 进行虚拟机配置。我已成功使用以下方法从模板配置虚拟机

ManagedObjectReference cloneTask =
                vimPort.cloneVMTask(vmRef, vmFolderRef, cloneName, cloneSpec);

我也得到了内存、CPU的自定义,方法如下。

 VirtualMachineConfigSpec configSpec = new VirtualMachineConfigSpec();
        configSpec.setMemoryMB(512l);
        configSpec.setNumCPUs(2);

我想了解更多使用 SDK 的自定义,例如 HarkDisk、N/W 适配器、网络 详细信息等。帮我获取一些具有虚拟机自定义的 java 代码示例或给我一些提到相同的链接。任何帮助将不胜感激。

【问题讨论】:

    标签: java virtual-machine vsphere


    【解决方案1】:

    要添加磁盘和网络适配器,您需要创建一个 VirtualDeviceConfigSpec。 创建完整的 virtualdeviceconfigspec 后,您可以使用: VirtualMachineConfigSpec.DeviceChange = yourdeviceconfigspec;

    这段代码是伪 c#,但与 Java 足够接近,可以理解。然后在克隆/创建中使用配置规范。

    这是一个 c# 函数,用于添加 3 个半虚拟控制器和 5 个磁盘,所有这些都捆绑到一个列表中

            public List<VirtualDeviceConfigSpec> Add_Disks(int numberofDisks, ManagedObjectReference dsMoref, VimClient vsphere, string vmname, string dsname)
        {
            List<int> diskSize = new List<int> { 20000, 10000, 20000, 10000, 20000 };
            List<VirtualDeviceConfigSpec> specs = new List<VirtualDeviceConfigSpec>();
    
            //Add Three Paravirtual Controllers
            VirtualDeviceConfigSpec para1 = new VirtualDeviceConfigSpec();
            ParaVirtualSCSIController p1 = new ParaVirtualSCSIController();
            p1.Key = 1;
            p1.SharedBus = VirtualSCSISharing.noSharing;
            p1.BusNumber = 1;
            p1.HotAddRemove = true;
            para1.Device = p1;
            para1.Operation = VirtualDeviceConfigSpecOperation.add;
            specs.Add(para1);
    
            VirtualDeviceConfigSpec para2 = new VirtualDeviceConfigSpec();
            ParaVirtualSCSIController p2 = new ParaVirtualSCSIController();
            p2.Key = 2;
            p2.SharedBus = VirtualSCSISharing.noSharing;
            p2.BusNumber = 2;
            p2.HotAddRemove = true;
            para2.Device = p2;
            para2.Operation = VirtualDeviceConfigSpecOperation.add;
            specs.Add(para2);
    
            VirtualDeviceConfigSpec para3 = new VirtualDeviceConfigSpec();
            ParaVirtualSCSIController p3 = new ParaVirtualSCSIController();
            p3.Key = 3;
            p3.SharedBus = VirtualSCSISharing.noSharing;
            p3.BusNumber = 3;
            p3.HotAddRemove = true;
            para3.Device = p3;
            para3.Operation = VirtualDeviceConfigSpecOperation.add;
            specs.Add(para3);
    
            for (int i = 0; i < diskSize.Count; i++)
            {
                //set up standard disks specs
                bool thinProvisioned = true;
                int size = (diskSize[i]);
                int controllerKey = 0;
                int unitNumber = 0;
    
                switch (i)
                {
                    case 0:
                        controllerKey = 1;
                        unitNumber = 0;
                        break;
                    case 1:
                        controllerKey = 3;
                        unitNumber = 0;
                        break;
                    case 2:
                        controllerKey = 2;
                        unitNumber = 0;
                        break;
                    case 3:
                        controllerKey = 2;
                        unitNumber = 1;
                        break;
                    case 4:
                        controllerKey = 3;
                        unitNumber = 1;
                        break;
                }
    
                VirtualDiskFlatVer2BackingInfo backInfo = new VirtualDiskFlatVer2BackingInfo();
                backInfo.ThinProvisioned = thinProvisioned;
                backInfo.DiskMode = "persistent";
                backInfo.Datastore = dsMoref;
                backInfo.FileName = "[" + dsname + "]" + vmname + "/" + vmname + controllerKey + "_" + unitNumber + ".vmdk";
    
                VirtualDisk tempDisk = new VirtualDisk();
                tempDisk.Backing = backInfo;
                tempDisk.CapacityInKB = (1024 * size);
                tempDisk.ControllerKey = controllerKey;
                tempDisk.Key = (1 + i);
                tempDisk.UnitNumber = unitNumber;
    
                VirtualDeviceConfigSpec tempConfigSpec = new VirtualDeviceConfigSpec();
                tempConfigSpec.Device = tempDisk;
                tempConfigSpec.FileOperation = VirtualDeviceConfigSpecFileOperation.create;
                tempConfigSpec.Operation = VirtualDeviceConfigSpecOperation.add;
    
                specs.Add(tempConfigSpec);
            }
    
            return specs;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 2018-05-18
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多