日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python request post 数组_[pve][python]用python3获取pve状态信息

發(fā)布時(shí)間:2023/12/10 python 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python request post 数组_[pve][python]用python3获取pve状态信息 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

手頭的Proxmox VE集群和節(jié)點(diǎn)越來(lái)越多,需要考慮統(tǒng)一管理了,先定一個(gè)小目標(biāo)——集中狀態(tài)監(jiān)控。

以前寫過(guò)檢測(cè)ceph并用釘釘報(bào)警的bash腳本,這次換上洋氣的方式,用python來(lái)通過(guò)pve的api獲取其狀態(tài)信息。

首先參考proxmox官方的api(實(shí)際上自己弄個(gè)外殼全部調(diào)用了你就可以“自主研發(fā)”一個(gè)云計(jì)算虛擬化平臺(tái),業(yè)內(nèi)普遍現(xiàn)狀,你懂的。)

https://pve.proxmox.com/pve-docs/api-viewer/

先在瀏覽器里面測(cè)試一下:

比如你原來(lái)使用https://192.168.1.1:8006管理pve,在瀏覽器上再開(kāi)一個(gè)新的tab,輸入https://192.168.1.1:8006/api2/json/,就可以看到j(luò)son格式的文檔頁(yè)面了,像下面這樣:

今天我們只要監(jiān)控幾個(gè)狀態(tài)信息,就看這三個(gè):

名稱api URL
PVE節(jié)點(diǎn)狀態(tài)https://ip:port/api2/json/nodes
PVE集群狀態(tài)https://ip:port/api2/json/cluster/status
CEPH集群狀態(tài)https://ip:port/api2/json/cluster/ceph/status

為了安全,pve要求每次訪問(wèn)都使用ticket,所以我們需要先獲取一個(gè)ticket,把它放入Cookie,嵌入header,然后才能發(fā)起訪問(wèn)。

作為野生程序猿,我們先不考慮日志(一律用print()),也不考慮類(燒腦),更不考慮多線程(多個(gè)集群的時(shí)候能成倍地降低采集時(shí)間)。

直接上簡(jiǎn)單明了的兩個(gè)函數(shù):一個(gè)獲取ticket,一個(gè)根據(jù)url獲取信息。然后調(diào)用兩個(gè)函數(shù),獲取狀態(tài)信息。

運(yùn)行函數(shù)之前還要準(zhǔn)備基本的認(rèn)證信息,最后這個(gè)樣子:

#coding=utf-8 #!/usr/bin/python3#!/usr/bin/python3#?huky0924@aliyun.com# 參考https://pve.proxmox.com/pve-docs/api-viewer/ #?20200612?檢查PVE運(yùn)行狀態(tài)import os, sslimport urllib.request, json#?獲取pve的ticketdef getTicket(urlBase, user, password): try: url = urlBase + 'access/ticket' params = {'username': user, 'password': password} post = urllib.parse.urlencode(params).encode(encoding='UTF8') headers = {"Accept": "application/json"} request = urllib.request.Request(url, post, headers)????????response?=?urllib.request.urlopen(request) fields = json.loads(response.read().decode('utf-8')) ticket = fields['data']['ticket']????????return?ticket except Exception as e: print('獲取集群'+ alias +'認(rèn)證ticket錯(cuò)誤!') print(e) os._exit(1)# 利用ticket從相應(yīng)的api獲取信息def getInfo(urlExt, ticket): try: url = urlBase + urlExt print('') print('從' + url + '獲取信息') headers = {"Accept": "application/json", "Cookie": "PVEAuthCookie=%s" % ticket} request = urllib.request.Request(url) for k,v in headers.items(): request.add_header(k, v) response = urllib.request.urlopen(request) fields = json.loads(response.read().decode('utf-8'))????????return?fields['data'] except Exception as e:????????print('從'?+?url?+?'獲取信息錯(cuò)誤:?'?+?e)if?__name__?==?'__main__': #因?yàn)槭褂米院灻膕sl證書,需要允許 ssl._create_default_https_context = ssl._create_unverified_context????#為了多個(gè)集群信息用數(shù)組表示其認(rèn)證信息,[別名 ip地址?端口?用戶名及其認(rèn)證模式?密碼]。????#實(shí)際操作中使用字典,別名作為鍵,后面的值作為值,為了安全密碼要手動(dòng)輸入并加密????pveLogin?=?['pve集群1',?'192.168.2.11',?8006,?'root@pam',?'password']????alias?=?pveLogin[0] host = pveLogin[1] port = pveLogin[2] user = pveLogin[3] password = pveLogin[4] urlBase = 'https://{}:{}/api2/json/'.format(host, port) pveTicket = getTicket(urlBase, user, password)????statusNodes?=?getInfo('nodes',?pveTicket) print(statusNodes) statusCeph = getInfo('cluster/ceph/status', pveTicket) statusCephs = statusCeph['health'] print(statusCephs['status'])

運(yùn)行獲取的信息再提取就可以了,如最后的ceph狀態(tài)

總結(jié)

以上是生活随笔為你收集整理的python request post 数组_[pve][python]用python3获取pve状态信息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。