vmware api开发之克隆虚拟机

  • 时间:
  • 浏览:1

    clonespec = vim.vm.CloneSpec()

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

    relospec.pool = resource_pool

    relospec.datastore = datastore

    clonespec.powerOn = power_on

流程 :前端发起请求,提交的参数有 源模板id,虚拟机的配置,后端提交请求到vcenter,提交成功语录,,给个反馈给前端,并在后台启用群克隆虚拟机的系统进程,后台解决用,celery实现,虚拟机群克隆完成后,虚拟os上端有个开机脚原先我的管理端注册下ip地址

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

        datastore = get_obj(

import atexit

    context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)

    # if None, get the first one

            if c.name == name:

            obj = c

        datacenter_name, vm_folder, datastore_name,

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

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

    for c in container.view:

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

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

    template = templates[str(templateid)]

    spec.memoryMB=memsize

    atexit.register(Disconnect, si)

from celery import platforms

            content, template, si,

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

from celery import Celery

    if datastore_name:

        content, template,  si,

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

platforms.C_FORCE_ROOT = True

zabbix 监控 esxi的磁盘使用率 

from pyVmomi import vim

from pyVim.connect import SmartConnect, Disconnect

    else:

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

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

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

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

        resource_pool = cluster.resourcePool

            "", "",

                break

虚拟机增删磁盘;

                obj = c

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

公司要此人 开发私有云管理平台,我这边负责vmware帕累托图的后台接口编写。

        content.rootFolder, vimtype, True)

我把 群克隆虚拟机,虚拟机 html5的console界面,虚拟机快照管理 这几块代码的放出,水平有限,大神勿喷,如果 有帕累托图涉及隐私的地方做了解决,供亲们参考下贴出的本来 第一版,那末错误捕捉

首先介绍群克隆虚拟机

    else:

    randomname=get_hostname()

    spec.numCPUs=cpunum

                     sslContext=context)

主要实现有虚拟机开关机取消;

    vm.PowerOn()

        cluster_name, resource_pool, power_on,cpunum,memsize):

代码如下

    template = None

zabbix 接受转发esxi的报警信息

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

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

    spec = vim.vm.ConfigSpec()

import getpass

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

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

    else:

虚拟机网络管理

虚拟机 html5的console界面

    content = si.RetrieveContent()

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

                     port=443,

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

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

虚拟机快照增删还原;

    if resource_pool:

        clone_vm(

    clonespec.location = relospec

    context.verify_mode = ssl.CERT_NONE

            break

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

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

    si = None

import cgi, cgitb

    obj = None

    wait_for_task(task)

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

    relospec = vim.vm.RelocateSpec()

        else:

import argparse

        destfolder = datacenter.vmFolder

import ssl

    if vm_folder:

    container = content.viewManager.CreateContainerView(

import random

    return obj

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

            "", False,cpunum,memsize)

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

        if name:

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