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()

时间: 2024-10-11 12:33:47

vmware api开发之克隆虚拟机的相关文章

VMware Centos中创建克隆虚拟机导致网卡设备无法启动的问题

一.前言 在创建克隆虚拟机的时候,如果样板虚拟机没有事先配置好,则会导致网卡设备无法启动的问题(报错如下). Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization 二.解决方法 1.修改网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0 ?删除UUID这一行,因为每张网卡的mac地址是不一样的,所以UUID也是不一样的.

vmware api开发之快照管理

公司要自己开发私有云管理平台,我这边负责vmware部分的后台接口编写. 主要基于vmware官方的 python 接口 pyvmomi进行二次封装, 主要实现有虚拟机开关机注销: 虚拟机增删磁盘: 虚拟机快照增删还原: 虚拟机 html5的console界面 虚拟机网络管理 zabbix 监控 esxi的磁盘使用率 zabbix 接受转发esxi的报警信息 本文展示快照功能,快照其实是一个很小的功能,主要是让大家了解下vmware快照的接口,网上没有干过我这个事情,中间有个遍历的算法 先上图

vmware api开发之html的虚拟机console

公司要自己开发私有云管理平台,我这边负责vmware部分的后台接口编写. 主要基于vmware官方的 python 接口 pyvmomi进行二次封装, 主要实现有虚拟机开关机注销: 虚拟机增删磁盘: 虚拟机快照增删还原: 虚拟机 html5的console界面 虚拟机网络管理 zabbix 监控 esxi的磁盘使用率 zabbix 接受转发esxi的报警信息 我把 克隆虚拟机,虚拟机 html5的console界面,虚拟机快照管理 这几个代码的放出,水平有限,大神勿喷,并且有部分涉及隐私的地方做

ESXi:VMware vSphere Client 克隆虚拟机

免费的VMWare ESXi5.5非常强大,使用ESXi经常会遇到这样的问题,我需要建立多个虚拟机,都是windows2008操作系统,系统一个一个安装很麻烦. VMware ESXi.VMware vCenter Server 和 vSphere Client,它们分别是 vSphere 的虚拟化层.管理层和接口层.作为接口层的vSphere Client客户端并不提供克隆虚拟机的功能,需要安装vCenter管理ESXi才有这一功能.虽然如此,但是我们可以以手动的方式完成这项工作 下面是克隆"

vmware克隆虚拟机后网卡名称及网络地址xiuf

使用vmware克隆虚拟机后,若原主机网卡名称为eth0,那么克隆后的主机使用ifconfig查看仅能看到一个名称为eth1的网卡 并且在/etc/sysconfig/network-scripts/此目录下仅有ifcfg-eth0一个网卡配置文件 ifcfg-eth0的DEVICE属性同样为eth0 那么此时我们无法修改ifconfig中显示的eth1的网络地址及状态,需要让eth0的配置文件生效才能正常使用该网卡. 首先查看网络设备绑定文件:/etc/udev/rules.d/70-pers

VMware 克隆虚拟机或加载新的已安装虚拟机时System eth0不能使用的解决方法

近年来的大数据应用特别热,特别是Hadoop和Spark.但大家使用这些分布式文件系统和计算框架都需要一个分布式的集群环境,而大家手头一般没有多余的机器部署master和多个slave节点,就只能在VMware上多安装几个虚拟机来模拟集群的搭建,但是安装好一台虚拟机后,我想大部分的人都不想再耗时再重复地去装一台虚拟机,所以有以下两种选择: (1)使用VMware的克隆功能: (2)复制一份已安装好的虚拟机数据,然后再将*.vmx文件加载到VMware Workstation中. 任选以上方法都可

VMware Workstation 克隆虚拟机无法上网解决

现象描述: 最近装了虚拟机系统是 centos 6.8,为了以后使用方便对虚拟机进行克隆或复制.当使用克隆后的虚拟机时发现原来在基本系统中的网卡eth0到了新系统却没有了. 系统版本信息 使用ifconfig -a会发现只有lo和eth1. 因为基本系统的网络相关配置都是基于eth0的,eth1没有网络相关的配置,此时要正常该虚拟机中的网络,只有添加eth1的网络配置,这样每次都要修改网卡配置在做多Linux系统测试的时候很不方便.更进一步,如果基于此克隆虚拟机继续克隆或复制新的虚拟机,网卡的标

转:怎样在VMware ESXi上 克隆虚拟机

Cloning virtual machines on VMware ESXi 翻译自http://www.dedoimedo.com/computers/vmware-esxi-clone-machine.html,省略前后说明. 在 VMware ESXi 克隆虚拟机 这个示范是在windows上面使用VMware Infrastructure Client 来操作,所以linux用户就请过了,但是思路是一样的. Step 1: 启动 VMware Infrastructure Client

python调用vcenter的api 克隆虚拟机

环境 python 2.7 或者 3.4以上 1 安装pyvmomi pip install pyvmomi 2.git clone https://github.com/vmware/pyvmomi-community-samples/ 里面是很多人写号的脚本 clone_vm.py 是用来克隆虚拟机的 但是 在我的环境下 vcenter6.0下老是报ssl错误 修改了下原文件 def main(): """ Let this thing fly ""&