python request post 數組_[pve][python]用python3獲取pve狀態信息

手頭的Proxmox VE集群和節點越來越多,需要考慮統一管理了,先定一個小目標——集中狀態監控。

以前寫過檢測ceph并用釘釘報警的bash腳本,這次換上洋氣的方式,用python來通過pve的api獲取其狀態信息。

首先參考proxmox官方的api(實際上自己弄個外殼全部調用了你就可以“自主研發”一個云計算虛擬化平臺,業內普遍現狀,你懂的80d9df030670818eea490586d4d32a85.png。)

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

先在瀏覽器里面測試一下:

比如你原來使用https://192.168.1.1:8006管理pve,在瀏覽器上再開一個新的tab,輸入https://192.168.1.1:8006/api2/json/,就可以看到json格式的文檔頁面了,像下面這樣:

0aae4a5e2eed5ae50f87d46a01025fc3.png

今天我們只要監控幾個狀態信息,就看這三個:

名稱api URL
PVE節點狀態https://ip:port/api2/json/nodes
PVE集群狀態https://ip:port/api2/json/cluster/status
CEPH集群狀態https://ip:port/api2/json/cluster/ceph/status

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

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

直接上簡單明了的兩個函數:一個獲取ticket,一個根據url獲取信息。然后調用兩個函數,獲取狀態信息。

運行函數之前還要準備基本的認證信息,最后這個樣子:

#coding=utf-8                                                                                                                        #!/usr/bin/python3#!/usr/bin/python3#?huky0924@aliyun.com# 參考https://pve.proxmox.com/pve-docs/api-viewer/       #?20200612?檢查PVE運行狀態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 +'認證ticket錯誤!')        print(e)        os._exit(1)# 利用ticket從相應的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?+?'獲取信息錯誤:?'?+?e)if?__name__?==?'__main__':    #因為使用自簽名的ssl證書,需要允許    ssl._create_default_https_context = ssl._create_unverified_context????#為了多個集群信息用數組表示其認證信息,[別名 ip地址?端口?用戶名及其認證模式?密碼]。????#實際操作中使用字典,別名作為鍵,后面的值作為值,為了安全密碼要手動輸入并加密????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'])

運行獲取的信息再提取就可以了,如最后的ceph狀態

88a0c3db6fa850769b577a70954f0f44.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270953.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270953.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分布式數據庫管理系統介紹

1、分布式數據庫管理系統分類綜合型體系結構:主要是指在分布式數據庫建立之前,還沒有建立獨立的集中式數據庫管理系統,設計人員根據用戶的需求,設計出一個全新的完整的數據庫管理系統。聯合型體系結構:主要是指每個節點…

linux中國用戶,Linux中國 適合新用戶的Linux

這個爭論無疑給許多Linux用戶帶來了麻煩。爭論的焦點一般不是哪個發行版是真正最適合新用戶的,而是哪個發行版受這些爭論者的喜愛。如果我們撇開個人喜愛,我們會看到更清楚的一面。但即使這樣,明確的結論也會受到被新用戶的需求和期望的影響。…

關于局部變量表slot的理解

看下圖代碼例子,double類型的b,占用兩個slot,所以index為3和4

Spring LDAP

LDAP Spring LDAP 使用 - Sayi像秋天一樣優雅 - 開源中國社區 http://docs.spring.io/spring-ldap/docs/current/reference/#introduction http://blog.csdn.net/techchan/article/details/5438047轉載于:https://www.cnblogs.com/hello-yz/p/5844784.html

掛起某線程命令 Linux,linux 線程掛起恢復的簡單示例

參考:寫了個demo:#include #include static pthread_mutex_t mutex;static pthread_cond_t cond;static int flag 0;void srpthread_init(){pthread_mutex_init(&mutex,NULL);pthread_cond_init(&cond,NULL);}void srpthread_suspend(){pthread…

分布式查詢處理和優化相關知識介紹

一、分布式數據庫查詢考慮的因素1、和集中式數據查詢一樣需要考慮查詢語言語句的優化2、數據和信息均需要通過通信線路進行數據傳輸,存在傳輸延遲問題從而影響整個查詢的執行效率。3、網絡中多處理器的存在提供了并行數據處理和傳輸的機會,可以充分利用該…

html下拉框設置默認值_如何設置HTML select下拉框的默認值?

HTML中的select標簽用于創建可選擇選項的下拉列表;option標簽包含選定時將使用的值。那么如何來設置select下拉框里的默認值?下面本篇文章就來給大家介紹一下,希望對大家有所幫助。我們可以在所需選項上使用“selected”屬性來設置select元素…

操作數棧的字節碼指令執行分析

一:寫個demo 二:點擊Recompile編譯 三:使用javap命令反編譯class文件 javap -v 類名.class 四:查看結果 五:分析執行過程 首先bipush意思是把byte類型的變量i的值15存放到操作數棧中,istore_1的意思…

wordpress 當前欄目名,當前欄目的分類名

wordpress在設計主題和做模板時經常會用到調用當前分類欄目名稱&#xff0c;常見的有當前欄目頁、文章頁&#xff0c;詳情代碼如下&#xff1a; 1.分類名稱與鏈接 <?php the_category(); ?> 2.分類頁面調用當前分類名稱 要在分類頁得到分類頁面的欄目名稱,需要用<?…

分布式數據庫基礎:分布式事務相關概念介紹

1、事務的定義事務式訪問數據庫的一個邏輯工作單位&#xff0c;它屬于一個操作序列&#xff0c;執行這個操作序列使數據庫從一種一致狀態轉換到另外一種一致狀態&#xff0c;從而實現特定業務的功能。2、分布式事務的定義分布式事務屬于傳統事務的擴展&#xff0c;分布式事務繼…

windows比linux差在哪,怎么讓新手理解Linux比Windows好在哪里!

pingpang2008 于 2009-06-17 08:54:31發表:人好多啊hantu 于 2009-06-16 23:28:57發表:哈哈,偏偏很多人就是不爽windows了才用Linux的劉沖 于 2009-06-16 21:44:08發表:linux比windows好嗎&#xff1f;wayoking 于 2009-06-16 20:45:11發表:理解了&#xff0c;謝謝cscs2002 于 …

12c創建為容器數據庫_oracle 12c創建可插拔數據庫(PDB)與用戶詳解

前言由于oracle 12c使用了CDB-PDB架構&#xff0c;類似于docker&#xff0c;在container-db內可以加載多個pluggable-db&#xff0c;因此安裝后需要額外配置才能使用。一、修改listener.ora , tnsnames.ora###listener.ora###LISTENER (DESCRIPTION (ADDRESS (PROTOCOL TCP)(…

大型分布式存儲方案MinIO介紹,看完你就懂了!

1、MinIO是什么&#xff1f;官方解釋&#xff1a;MinIO 是一個基于Apache License v2.0開源協議的對象存儲服務。它兼容亞馬遜S3云存儲服務接口&#xff0c;非常適合于存儲大容量非結構化的數據&#xff0c;例如圖片、視頻、日志文件、備份數據和容器/虛擬機鏡像等&#xff0c;…

部署好網站,同局域網中電腦無法訪問的問題的解決方案

“部署好網站&#xff0c;同局域網中電腦無法訪問的問題的解決方案"。 第一&#xff0c;Win7安裝IIS后&#xff0c;本地測試沒問題&#xff0c;說明IIS配置正確&#xff1b;如果本地測試有問題&#xff0c;先檢查IIS安裝配置情況。 第二&#xff0c;檢查計算機網絡情況&am…

linux下julia的開發環境,Ubuntu搭建Julia遠程開發環境

Julia作為一門新興的編程語言&#xff0c;還是可以學一學的&#xff0c;這里總結了一下Ubuntu系統遠程搭建Julia開發環境的方法。前期準備&#xff1a;云服務器一臺&#xff0c;操作系統為Ubuntu18.04&#xff0c;xshell6 vscode。環境安裝;首先使用xshell遠程連接云服務器&am…

ElementUI:文本框實現遠程搜索的用法

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

棧楨的結構

棧楨里面主要有局部變量表&#xff0c;操作數棧&#xff0c;方法返回地址&#xff0c;動態鏈接&#xff0c;和一些附加信息

horizon服務主要模塊_Horizon Workspace 快速部署指南三(配置Workspace數據模塊)

1. 配置Horizon Workspace1.1 配置Horizon Workspace 數據模塊1.1.1 為Data Server增加虛擬磁盤由于初始化的Data Server數據空間有限&#xff0c;為了保證測試需求&#xff0c;我們需要添加合適大小的存儲空間到Data Server。登陸vShpere client&#xff0c;選擇Data-va &…