vmware api開發之html5的虛擬機console

公司要本身開發私有云管理平臺,我這邊負責vmware部分的後臺接口編寫。html

主要基於vmware官方的 python 接口 pyvmomi進行二次封裝,前端

主要實現有虛擬機開關機註銷;
html5

虛擬機增刪磁盤;python

虛擬機快照增刪還原;mysql

虛擬機 html5的console界面redis

虛擬機網絡管理sql

zabbix 監控 esxi的磁盤使用率 django

zabbix 接受轉發esxi的報警信息vim

我把 克隆虛擬機,虛擬機 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


wKioL1dyb17w9coaAACH67ohdBU841.png-wh_50

代碼以下 

  

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

相關文章
相關標籤/搜索