zoukankan      html  css  js  c++  java
  • vSphere SDK for Java

    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");
            }
    
        }
    
    }
  • 相关阅读:
    NFS服务简单配置
    TCP/IP网络
    python文件问题
    明明apple id 密码 是对的,登陆 iTunes还总提示密码错误
    台式电脑怎么使用iPhone热点进行上网
    Svn总是提示输入账号密码
    unity的相关技巧
    正则表达式标记
    NGUI用UIGrid加载Item会有部分空出来的解决办法
    win10 硬盘占用率经常100%的可能有用的解决方案
  • 原文地址:https://www.cnblogs.com/vincenshen/p/10781677.html
Copyright © 2011-2022 走看看