公司要本身開發私有云管理平臺,我這邊負責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
代碼以下
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