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.mzph.cn/news/270953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式数据库管理系统介绍

1、分布式数据库管理系统分类综合型体系结构:主要是指在分布式数据库建立之前,还没有建立独立的集中式数据库管理系统,设计人员根据用户的需求,设计出一个全新的完整的数据库管理系统。联合型体系结构:主要是指每个节点…

linux中国用户,Linux中国 适合新用户的Linux

这个争论无疑给许多Linux用户带来了麻烦。争论的焦点一般不是哪个发行版是真正最适合新用户的,而是哪个发行版受这些争论者的喜爱。如果我们撇开个人喜爱,我们会看到更清楚的一面。但即使这样,明确的结论也会受到被新用户的需求和期望的影响。…

关于局部变量表slot的理解

看下图代码例子,double类型的b,占用两个slot,所以index为3和4

分布式查询处理和优化相关知识介绍

一、分布式数据库查询考虑的因素1、和集中式数据查询一样需要考虑查询语言语句的优化2、数据和信息均需要通过通信线路进行数据传输,存在传输延迟问题从而影响整个查询的执行效率。3、网络中多处理器的存在提供了并行数据处理和传输的机会,可以充分利用该…

操作数栈的字节码指令执行分析

一:写个demo 二:点击Recompile编译 三:使用javap命令反编译class文件 javap -v 类名.class 四:查看结果 五:分析执行过程 首先bipush意思是把byte类型的变量i的值15存放到操作数栈中,istore_1的意思…

分布式数据库基础:分布式事务相关概念介绍

1、事务的定义事务式访问数据库的一个逻辑工作单位,它属于一个操作序列,执行这个操作序列使数据库从一种一致状态转换到另外一种一致状态,从而实现特定业务的功能。2、分布式事务的定义分布式事务属于传统事务的扩展,分布式事务继…

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好吗?wayoking 于 2009-06-16 20:45:11发表:理解了,谢谢cscs2002 于 …

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

1、MinIO是什么?官方解释:MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,…

部署好网站,同局域网中电脑无法访问的问题的解决方案

“部署好网站,同局域网中电脑无法访问的问题的解决方案"。 第一,Win7安装IIS后,本地测试没问题,说明IIS配置正确;如果本地测试有问题,先检查IIS安装配置情况。 第二,检查计算机网络情况&am…

linux下julia的开发环境,Ubuntu搭建Julia远程开发环境

Julia作为一门新兴的编程语言,还是可以学一学的,这里总结了一下Ubuntu系统远程搭建Julia开发环境的方法。前期准备:云服务器一台,操作系统为Ubuntu18.04,xshell6 vscode。环境安装;首先使用xshell远程连接云服务器&am…

ElementUI:文本框实现远程搜索的用法

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

栈桢的结构

栈桢里面主要有局部变量表,操作数栈,方法返回地址,动态链接,和一些附加信息

Android事件总线

Android中Activity、Service、Fragment之间的相互通信比较麻烦,主要有以下一些方法: (1)使用广播,发送者发出广播,接收者接收广播后进行处理; (2)使用Handler和Message,如下载线程完成下载任务后&#xff0…

分布式数据库基础:分布式数据库故障

分布式数据库系统常见的故障主要有事务故障、系统故障、介质故障、网络引起的故障。事务故障:计算溢出、完整性破坏、操作员干预、输入输出报错等。介质故障:存放数据的介质发生的故障,比如磁盘、磁盘的损坏等等。系统故障:CPU出错…

动态链接(指向运行时常量池的方法引用)

动态链接(指向运行时常量池的方法引用)

电脑技巧:C盘爆满该如何清理,实用的清理方案,小白必备

有用户和小编说,C盘就像是一个无底洞,无论给它分多大的分区,Windows操作系统总有办法给它填满!相信很多朋友也有这样的感受吧?其实,好像休眠文件、系统页面文件等等GB大“人物”是驻扎在C盘的,此…

操作系统:电脑的回收站的秘密你知道吗?

电脑的回收站的秘密你知道吗? 今天小编给大家介绍一下有关电脑回收站的相关知识,赶紧来看看吧! 回收站是所有磁盘驱动空间中的一个区域。 鼠标右键打开电脑桌面回收站的属性面板,在属性面板中可以看到所有的系统驱动程序使用了同一设置选项,可…

【Qt开发】QSplitter的使用和设置

Qt库版本:5.2.1 Qt Creator版本:3.0.1 1 QSplitter的用途 QSplitter使得用户可以通过拖动子窗口之间的边界来控制它们的大小,例如 图1 窗口拆分示意图 2 QSplitter的添加方法 QSplitter的添加方法有2种:a)通过Qt Creator的界面设计…