您好,登錄后才能下訂單哦!
公司要自己開發(fā)私有云管理平臺(tái),我這邊負(fù)責(zé)vmware部分的后臺(tái)接口編寫。
主要基于vmware官方的 python 接口 pyvmomi進(jìn)行二次封裝,
主要實(shí)現(xiàn)有虛擬機(jī)開關(guān)機(jī)注銷;
虛擬機(jī)增刪磁盤;
虛擬機(jī)快照增刪還原;
虛擬機(jī) html5的console界面
虛擬機(jī)網(wǎng)絡(luò)管理
zabbix 監(jiān)控 esxi的磁盤使用率
zabbix 接受轉(zhuǎn)發(fā)esxi的報(bào)警信息
我把 克隆虛擬機(jī),虛擬機(jī) html5的console界面,虛擬機(jī)快照管理 這幾個(gè)代碼的放出,水平有限,大神勿噴,并且有部分涉及隱私的地方做了處理,供大家參考下,貼出的只是第一版,沒(méi)有錯(cuò)誤捕捉
需要環(huán)境:vcenter 5.1-6.0, python3.5 ,django 1.8 ,redis,mysql,celery(python 異步后臺(tái)任務(wù))等
第二個(gè)介紹展示html5的虛擬機(jī)console
只適用于vc ,5.x 不適用于6.x,6.x改了登陸驗(yàn)證方式 暫時(shí)還沒(méi)搞定
過(guò)程,收到前端請(qǐng)求的,找到對(duì)應(yīng)虛擬機(jī),生成sessionTicket和 thumbprint,
拼接對(duì)應(yīng)的網(wǎng)址,當(dāng)作一個(gè) 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): 實(shí)例化虛擬機(jī)
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
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。