vmware api开发之html的虚拟机console

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vmware api开发之html的虚拟机console相关的知识,希望对你有一定的参考价值。

公司要自己开发私有云管理平台,我这边负责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 异步后台任务)等

第二个介绍展示html5的虚拟机console

只适用于vc ,5.x 不适用于6.x,6.x改了登陆验证方式 暂时还没搞定

过程,收到前端请求的,找到对应虚拟机,生成sessionTicket和 thumbprint,

拼接对应的网址,当作一个 HttpResponseRedirect 返回前端

先上下效果

输入 http://10.20.11.4:8001/viewconsole.py?IP=10.20.13.158


技术分享

代码如下 

  

import atexit

import ssl

import sys

import time

import OpenSSL

import os



from pyVim.connect import SmartConnect, Disconnect

from pyVmomi import vim


from django.http import HttpResponse

from django.http import HttpResponseRedirect


def viewconsole(request):

        vmip = request.GET.get(‘IP‘)

        respone=main(vmip)

        return HttpResponseRedirect(a)

        return HttpResponse(a)

def get_vm(content, name): 实例化虚拟机


    vm = None

    container = content.viewManager.CreateContainerView(

        content.rootFolder, [vim.VirtualMachine], True)


    for c in container.view:

        if c.name == name:

            vm = c

            break

    return vm

def main(vmip):

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


    vm = get_vm(content, "{0}".format(vmip))

    vm_moid = vm._moId


    vcenter_data = content.setting

    vcenter_settings = vcenter_data.setting

    console_port = ‘7331‘


    for item in vcenter_settings:

        key = getattr(item, ‘key‘)

        if key == ‘VirtualCenter.FQDN‘:

            vcenter_fqdn = getattr(item, ‘value‘)


    session_manager = content.sessionManager

    session = session_manager.AcquireCloneTicket()


    vc_cert = ssl.get_server_certificate(("vc的ip",443))

    vc_pem = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM,

                                             vc_cert)

    vc_fingerprint = vc_pem.digest(‘sha1‘)


    url="http://vc的ip:7331/console/?vmId={2}&vmName={3}&host={4}&sessionTicket={5}&thumbprint={6}".format("",console_port,vm_moid,vmip,vcenter_fqdn,session,vc_fingerprint.decode())

    return url


以上是关于vmware api开发之html的虚拟机console的主要内容,如果未能解决你的问题,请参考以下文章

vmware api开发之快照管理

VMware 之ubuntu扩容

麒麟系统开发笔记:国产麒麟系统搭建开发环境之虚拟机安装

Vmware vSphere 6.0之ESXI安装配置

VMware Workstation 虚拟机安装

VMware虚拟机NAT模式的具体配置