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

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://10.110.164.133/sdk"), "[email protected]", "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");
        }

    }

}

原文地址:https://www.cnblogs.com/vincenshen/p/10781677.html

时间: 2024-08-29 14:12:20

vSphere SDK for Java - 从模板部署虚拟机并配置IP地址的相关文章

给虚拟机CentOS配置IP地址

我们以Minimal方式安装的CentOS虚拟机是不能直接上网的,需要为它配置IP地址.配置IP有两种方式,一种是使用DHCP服务动态获取IP地址,另一种是以手动方式配置静态IP地址.不管哪一种方式,首先要确保VMware开启了DHCP服务. 在本地主机桌面上右击"我的电脑",选择"管理",选择"服务和应用程序",双击打开"服务",开启虚拟机的相关服务. 打开虚拟机,以root用户登录系统.使用ifconfig -a查看系统中

VM虚拟机手动配置IP地址

1.查看虚拟机的网关 编辑-->虚拟网络编辑器 VMnet8 NAT模式-->NAT设置-->网关IP 2.设置IP地址 系统-->首选项-->网络连接 system etho-->编辑 -->IPV4 方法设置成手动-->添加地址-->[地址(最后一位数不能为0和1)子网掩码(255.255.255.0)网关(192.168.239.2)] DNS服务器(192.168.1.1和本地主机保持一致)-->应用 配置完成后,命令行重启网络,让配置生

在vSphere Client使用模板部署虚拟机 系统硬盘空间扩展

在vSphere Client中从模板部署虚拟机 从模板部署虚拟机将创建一个作为该模板的副本的新虚拟机.新虚拟机具有为该模板配置的虚拟硬件.安装的软件和其他属性. 一.连接ESXi或者vSphere Server服务器 1. 打开VMware vSphere Client客户端,输入VMware中心控制的信息,连接到VMware vSphere Center中心: 2.点击"清单"--"虚拟机和模板",找到相应的模板: 3.选择需要部署的虚机的模板,然后点击&quo

vCenter6.0配置四:从模板部署虚拟机

本文主要介绍虚拟机通过模板和自定义规范的快速创建与交付,主要分为转换虚拟机为模板.创建自定义规范文件.从模板部署虚拟机并应用自定义规范三个步骤. 一.部署环境 二.转换虚拟机为模板 1.将虚拟机WIN10关机,并转换为模板 2.模板创建完成 三.创建客户机自定义规范 1.创建windows自定义规范 2.选择在部署向导中输入计算机名称: 3.网络选择典型设置,应用的是DHCP,如果选择自定义设置,还可以设定在部署向导中输入IP地址: 4.加入域,填写相关账户信息 5.生成新的SID: 6.完成:

vSphere中克隆CentOS虚拟机添加新的网卡及配置IP地址

前言 本次安装的CentOS是在vCenter中克隆出来的.这样就存在一下问题: 问题一:MAC冲突 问题描述: 可能克隆的系统的网卡eth0与克隆前的系统一直,会造成MAC冲突: 解决办法: 1.修改cat /etc/udev/rules.d/70-persistent-net.rules中的MAC 2.到cd /etc/sysconfig/network-scripts/中修改原有网卡的eth0的配置文件ifcfg-eth0中的MAC与/etc/udev/rules.d/70-persist

虚拟机里CentOS 6.5配置IP地址之一手动设置

虚拟机里CentOS 6.5配置IP地址之一手动设置 1.手动设置  (不使用虚拟机自动获取IP的方法),手动配置方法如下: 虚拟机中系统 输入命令用sudu 或管理权限. #vi /etc/sysconfig/network-scripts/ifcfg-eth0      注释:Vi编辑网卡的配置文件 输入上述命令后回车,打开配置文件,使用方向键移动光标到最后一行,按字母键“i”,进入编辑模式,输入以下内容: IPADDR=192.168.10.11                      

修改Azure虚拟机子网的IP地址

由于某些原因需要修改Azure虚拟机的IP地址,虚拟机的IP地址又不能直接在虚拟机系统里去修改,否则有可能会出现修改后无法连接的问题.那么如何正确的修改Azure虚拟机子网的IP地址呢, 第一步:先关闭Vnet中的虚拟机 第二步:确定VHD的名字以及磁盘名称,请看下图 第三步:点击删除(删除之前最好先备份下,下一篇文章介绍如何备份Azure虚拟的VHD文件),这里请选择保留附加的磁盘 第四步:确保Vnet没有虚拟机以后,然后进入相应的Vnet,修改相应的网络号.点击保存 第五步:重新创建虚拟机,

android手机 ping 虚拟机ubuntu的ip地址

今天使用android手机往虚拟机上ubuntu 上搭建的nginx 和rtmp服务器推送东西的时候,怎么都推不上去. 后来在windows下的cmd里: # adb shell # ping 192.168.0.56 根本就ping不通 虚拟机的 ip ,发现虚拟机的ip和windows主机ip不再一个网端,所以怎么都不会ping通的. 后来发现VMware 的网络适配器选择的是NAT模式,这样是不行的. 需要更改为:桥接模式,然后编辑选项直接自动就行: ===================

[部署]CentOS配置IP地址

环境 虚拟机:VMWare10.0.1 build-1379776 操作系统:CentOS7 64位 简介 CentOS7最小化安装(Minimal)时,是不带ifconfig指令的,该指令在net-tools软件包里面,通过yum可以安装,但是当我们网络没配置好的时候,这个时候yum也是不能工作的(无法连上网络下载软件包).那么就需要我们手工配置网卡设置. 查看网络适配器 ip a 列出了所有的网络适配器的信息   lo是本地回环地址127.0.0.1 eno16777736就是我们的虚拟机网