vmware api开发之克隆虚拟机

简介:

公司要自己开发私有云管理平台,我这边负责vmware部分的后台接口编写。

主要基于vmware官方的 python 接口 pyvmomi进行二次封装,

主要实现有虚拟机开关机注销;

虚拟机增删磁盘;

虚拟机快照增删还原;

虚拟机 html5的console界面

虚拟机网络管理

zabbix 监控 esxi的磁盘使用率 

zabbix 接受转发esxi的报警信息

我把 克隆虚拟机,虚拟机 html5的console界面,虚拟机快照管理 这几个代码的放出,水平有限,大神勿喷,并且有部分涉及隐私的地方做了处理,供大家参考下贴出的只是第一版,没有错误捕捉

需要环境:vcenter 5.1-6.0, python3.5 ,django 1.8 ,redis,mysql,celery(python 异步后台任务)等

首先介绍克隆虚拟机

流程 :前端发起请求,提交的参数有 源模板id,虚拟机的配置,后端提交请求到vcenter,提交成功的话,,给个反馈给前端,并在后台启用克隆虚拟机的进程,后台处理用,celery实现,虚拟机克隆完成后,虚拟os里面有个开机脚本来我的管理端注册下ip地址

代码如下

from pyVmomi import vim

from pyVim.connect import SmartConnect, Disconnect

from celery import Celery

from celery import platforms


import atexit

import argparse

import getpass

import ssl

import random

import cgi, cgitb


celery = Celery('tasks', broker='redis://:########redis连接信息/0')

platforms.C_FORCE_ROOT = True

def action(num,flavor,templateid):  #主函数 被Celery调用 

    hardwareconfiglist={1:[2,8*1024],2:[4,16*1024],3:[8,32*1024]}

    cpunum=hardwareconfiglist[int(flavor)][0]

    memsize=hardwareconfiglist[int(flavor)][1]

    si = None

    context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)

    context.verify_mode = ssl.CERT_NONE

    si = SmartConnect(host="###########",

                     user="##################",

                     pwd="############",

                     port=443,

                     sslContext=context)


    atexit.register(Disconnect, si)

    content = si.RetrieveContent()

    template = None

    template = templates[str(templateid)]

    template = get_obj(content, [vim.VirtualMachine], template)

    for i in range(0,int(num)):

        clone_vm(

            content, template, si,

            "", "",

            "存储名字", '集群名字 ',

            "", False,cpunum,memsize)

def get_obj(content, vimtype, name): #把克隆源的虚拟机实例化


    obj = None

    container = content.viewManager.CreateContainerView(

        content.rootFolder, vimtype, True)

    for c in container.view:

        if name:

            if c.name == name:

                obj = c

                break

        else:

            obj = c

            break


    return obj

def clone_vm(   #克隆虚拟机,克隆出来的虚拟机名字是随机,

        content, template,  si,

        datacenter_name, vm_folder, datastore_name,

        cluster_name, resource_pool, power_on,cpunum,memsize):



    datacenter = get_obj(content, [vim.Datacenter], datacenter_name)


    if vm_folder:

        destfolder = get_obj(content, [vim.Folder], vm_folder)

    else:

        destfolder = datacenter.vmFolder


    if datastore_name:

        datastore = get_obj(content, [vim.Datastore], datastore_name)

    else:

        datastore = get_obj(

            content, [vim.Datastore], template.datastore[0].info.name)


    # if None, get the first one

    cluster = get_obj(content, [vim.ClusterComputeResource], cluster_name)


    if resource_pool:

        resource_pool = get_obj(content, [vim.ResourcePool], resource_pool)

    else:

        resource_pool = cluster.resourcePool


 

    relospec = vim.vm.RelocateSpec()

    relospec.datastore = datastore

    relospec.pool = resource_pool


    clonespec = vim.vm.CloneSpec()

    clonespec.location = relospec

    clonespec.powerOn = power_on

    randomname=get_hostname()

    task = template.Clone(folder=destfolder, name=randomname, spec=clonespec)

    wait_for_task(task)

    vm = get_obj(content, [vim.VirtualMachine], randomname)

    spec = vim.vm.ConfigSpec()

    spec.numCPUs=cpunum

    spec.memoryMB=memsize

    vm.ReconfigVM_Task(spec=spec) #设置克隆好的虚拟机的cpu 和 内存

    vm.CreateSnapshot("fromstart","this created when it is been cloned by system",False,False) #克隆好了创建一个快照,以便实现重装系统的功能

    vm.PowerOn()



本文转自 superbigsea 51CTO博客,原文链接:http://blog.51cto.com/superbigsea/1793760

目录
打赏
0
0
0
0
344
分享
相关文章
【YashanDB知识库】使用vmware虚拟机安装的YashanDB,本机无法访问
在 VMware 虚拟机中安装并测试 YashanDB,数据库及虚拟机运行正常,但本地 IDE 工具无法连接虚拟机中的数据库。问题可能与 VMware 网络适配器配置或网络模式(如 NAT、桥接)有关,导致网络通信异常。需检查虚拟机网络设置、IP 地址配置以及防火墙规则,确保本地与虚拟机间网络连通性。目前无明确修复版本。
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
71 29
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
超详细!VMware虚拟机迁移操作教程
为VMware虚拟机迁移提供从0到1的详尽操作指导
超详细!VMware虚拟机迁移操作教程
|
2月前
|
VMware Tools 12.5.1 下载 - 虚拟机必备组件 (驱动和交互式服务)
虚拟机必备组件 (驱动和交互式服务)
135 14
VMware Tools 12.5.1 下载 - 虚拟机必备组件 (驱动和交互式服务)
|
2月前
|
VMware vSphere Replication 9.0.2.2 发布 - 虚拟机复制和数据保护
VMware vSphere Replication 9.0.2.2 发布 - 虚拟机复制和数据保护
59 2
VMware vSphere Replication 9.0.2.2 发布 - 虚拟机复制和数据保护
撤了!6天搬走500台VMware虚拟机
VMware到期在即,这个方案紧急时刻力挽狂澜,帮他们高效完成业务迁移。
【YashanDB知识库】使用vmware虚拟机安装的YashanDB,本机无法访问
【YashanDB知识库】使用vmware虚拟机安装的YashanDB,本机无法访问
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等