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

本文介绍如何使用Python3通过Proxmox VE的API获取集群状态信息。首先,参照官方API文档,然后编写获取ticket和信息的函数。在获取必要的认证信息后,函数将打印出包括ceph状态在内的关键状态信息。
摘要由CSDN通过智能技术生成

手头的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值