前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vmware api开发之html5的虚拟机console

vmware api开发之html5的虚拟机console

作者头像
用户1057912
发布2018-07-06 18:16:20
1.2K0
发布2018-07-06 18:16:20
举报
文章被收录于专栏:老安的博客

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

wKioL1dyb17w9coaAACH67ohdBU841.png-wh_50
wKioL1dyb17w9coaAACH67ohdBU841.png-wh_50

代码如下 

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/06/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档