Python管理PVE(Proxmox VE)云平台--节点资源统计2

一、前言

  承接上文:Python管理PVE(Proxmox VE)云平台–节点资源统计cpu内存磁盘融入到一个脚本中,新增总资源占用计算模块,更直观的看出剩余未分配资源。

二、步骤

1.代码

# -*- coding: utf-8 -*-
import os
import re
import paramiko# 连接信息:
# host = '192.168.100.103'
port = 22  # 默认的SSH端口
userName = 'root'def BrainTrust_1_Check():password = 'xxxxxxx'for i in range(101, 105):try:# 创建SSHClient 实例对象ssh = paramiko.SSHClient()# 调用方法,表示没有存储远程机器的公钥,允许访问ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接远程机器ssh.connect(hostname=f"192.168.100.{i}", port=port, username=userName, password=password)# 组合bash命令为一个字符串bash_cmd = """qm list | awk -F" " '{print $1}' | grep -v VMID > VMID &&i=0 &&vmids=$(cat VMID) &&for vmid in $vmids; doc_number=$(qm config $vmid | grep cores | awk -F" " '{print $2}') &&socket=$(qm config $vmid | grep sockets | awk -F" " '{print $2}') &&sum=$(echo "$c_number * $socket" | bc) &&i=$(echo "$i + $sum" | bc);donej=0 &&vmids=`cat VMID` &&for vmid in $vmidsdom_number=`qm config $vmid | grep memory | awk -F" " '{print $2}'`sum=`echo "$m_number / 1024 "| bc`j=`echo "$j + $sum" | bc`donek=0vmids=`cat VMID` for vmid in $vmidsdob=0qm config $vmid | grep -e ^scsi* | grep -v scsihw | awk -F'[,=G]'  '{print $3 }' > DISKqm config $vmid | grep -e ^ide* | grep -v ide2 | awk -F'[,=G]'  '{print $3 }' >> DISKdisks=`cat DISK`for disk in $disksdob=`echo "$b + $disk" | bc`donek=`echo "$k + $b" | bc`doneecho "$(hostname)节点Cpu已分配:$i 核、内存已分配:$j G、磁盘已分配:$k G""""# 执行bash命令stdin, stdout, stderr = ssh.exec_command(bash_cmd)# 读取并打印结果result = stdout.read().decode('utf-8')err_result = stderr.read().decode('utf-8')with open('output.txt', 'a') as f:print("执行结果:", result, file=f, end="")# 关闭SSH连接ssh.close()except paramiko.SSHException as sshException:print("SSH异常:", sshException)except TimeoutError:print("执行结果: b'Failed\\n'", "超时端口:", i)except KeyboardInterrupt:print("Ctrl + c 中断运行!")break
def BrainTrust_2_Check():password = 'xxxxxx'for i in range(105, 109):try:# 创建SSHClient 实例对象ssh = paramiko.SSHClient()# 调用方法,表示没有存储远程机器的公钥,允许访问ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接远程机器ssh.connect(hostname=f"192.168.100.{i}", port=port, username=userName, password=password)# 组合bash命令为一个字符串bash_cmd = """qm list | awk -F" " '{print $1}' | grep -v VMID > VMID &&i=0 &&vmids=$(cat VMID) &&for vmid in $vmids; doc_number=$(qm config $vmid | grep cores | awk -F" " '{print $2}') &&socket=$(qm config $vmid | grep sockets | awk -F" " '{print $2}') &&sum=$(echo "$c_number * $socket" | bc) &&i=$(echo "$i + $sum" | bc);donej=0 &&vmids=`cat VMID` &&for vmid in $vmidsdom_number=`qm config $vmid | grep memory | awk -F" " '{print $2}'`sum=`echo "$m_number / 1024 "| bc`j=`echo "$j + $sum" | bc`donek=0vmids=`cat VMID` for vmid in $vmidsdob=0qm config $vmid | grep -e ^scsi* | grep -v scsihw | awk -F'[,=G]'  '{print $3 }' > DISKqm config $vmid | grep -e ^ide* | grep -v ide2 | awk -F'[,=G]'  '{print $3 }' >> DISKdisks=`cat DISK`for disk in $disksdob=`echo "$b + $disk" | bc`donek=`echo "$k + $b" | bc`doneecho "$(hostname)节点Cpu已分配:$i 核、内存已分配:$j G、磁盘已分配:$k G""""# 执行bash命令stdin, stdout, stderr = ssh.exec_command(bash_cmd)# 读取并打印结果result = stdout.read().decode('utf-8')err_result = stderr.read().decode('utf-8')with open('output.txt', 'a') as f:print("执行结果:", result, file=f, end="")# 关闭SSH连接ssh.close()except paramiko.SSHException as sshException:print("SSH异常:", sshException)except TimeoutError:print("执行结果: b'Failed\\n'", "超时端口:", i)except KeyboardInterrupt:print("Ctrl + c 中断运行!")breakdef Operation():# 读取文本文件内容with open('output.txt', 'r') as file:data = file.read()# 提取数值cpu_values = []memory_values = []disk_values = []# 正则表达式匹配Cpu、内存和磁盘的数值pattern = re.compile(r'Cpu已分配:(\d+) 核、内存已分配:(\d+) G、磁盘已分配:(\d+) G')for match in pattern.findall(data):cpu_values.append(int(match[0]))memory_values.append(int(match[1]))disk_values.append(int(match[2]))# 计算每列数值的和total_cpu = sum(cpu_values)total_memory = sum(memory_values)total_disk = sum(disk_values)print(f"Cpu总和: {total_cpu}/256 C")print(f"内存总和: {total_memory}/502 G")print(f"磁盘总和: {total_disk}/13199 G")def DelFile():# 检查文件是否存在file_path = 'output.txt'if os.path.exists(file_path):os.remove(file_path)# print(f"文件 {file_path} 已删除")else:print(f"文件 {file_path} 不存在")if __name__ == '__main__':BrainTrust_1_Check()print("***脑库1资源占用情况***")Operation()DelFile()BrainTrust_2_Check()print("***脑库2资源占用情况***")Operation()DelFile()

2.执行结果

在这里插入图片描述

三、结束语

  到此Python统计PVE(Proxmox VE)云平台节点资源讲解就完毕啦,如果有其它问题欢迎大家评论留言,如果觉得还可以,那么给作者点赞收藏关注吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21562.shtml

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

相关文章

条件变量--std::condition--c++11

教程 链接1 函数 wait() 等待(阻塞)线程。 notify_one() 唤醒一个等待的线程。 notify_all() 唤醒所有等待的线程。

城市低空经济“链接力”指数报告(2024)

来源:城市进化论&火石创造 近期历史回顾:2024年NoETL开启自动化数据管理新时代白皮书.pdf 创新引领用户“换新生活”-从AWE2024看家电及消费电子行业发展趋势报告(精简版).pdf 2024智能网联汽车“车路云一体化”规模建设与应用…

c++ 产生临时对象的情况和解决方案

1 以传值的方式给函数攒底参数。 这个不用说&#xff0c;值传递。 2 类型转换生成的临时对象/隐式类型转换以保证函数调用成功 举例1&#xff1a; # include <iostream>using namespace std;class CTempValue { public:int val1;int val2; public:CTempValue(int v1 …

在spring框架的基础上自定义autowired注解

在Spring框架的基础上自定义Autowired注解是不可能的&#xff0c;因为注解本身是Java语言的一部分&#xff0c;并且Autowired是Spring框架提供的注解&#xff0c;用于实现自动装配。但是&#xff0c;你可以创建自己的注解&#xff0c;并结合Spring框架的扩展机制来实现类似的功…

3DMAX样条线轮廓修改器插件SplineOffset安装使用方法

3DMAX样条线轮廓修改器插件安装使用教程 3DMAX样条线轮廓插件SplineOffset是3dMax的一个修改器&#xff0c;它可以创建多个样条线克隆&#xff0c;并可以选择增量增加或减少偏移、平移和旋转。在许多方面&#xff0c;它类似于3dMax的内置阵列工具与样条线偏移功能相结合。 3DM…

享元模式介绍(含案例代码)

学习目标&#xff1a; 了解享元模式 学习内容&#xff1a; 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;旨在减少创建对象的数量&#xff0c;以节省内存和提高性能。这个模式通过共享尽可能多的细节来有效地支持大量细粒度对象。 享元…

PTA 7-7 后序和中序构造二叉树

本题目要求用后序序列和中序序列构造一棵二叉树&#xff08;树中结点个数不超过10个&#xff09;&#xff0c;并输出其先序序列。 输入格式: 在第一行中输入元素个数。 第二行中输入后序序列&#xff0c;用空格分隔。 第三行中输入中序序列&#xff0c;用空格分隔。 输出格…

Go 编程风格指南 - 最佳实践

Go 编程风格指南 - 最佳实践 原文&#xff1a;https://google.github.io/styleguide/go 概述 | 风格指南 | 风格决策 | 最佳实践 注意&#xff1a; 本文是 Google Go 风格 系列文档的一部分。本文档是 规范性(normative) 但不是强制规范(canonical)&#xff0c;并且从属于Goo…

C# type.GetProperty使用 Type.GetProperties() 获取不到值的解决方法

C# type.GetProperty使用 Type.GetProperty 方法用于获取当前 Type 的指定属性。它接受一个字符串参数&#xff0c;该字符串是你要获取的属性的名称。如果找到了匹配的属性&#xff0c;它会返回一个 PropertyInfo 对象&#xff1b;如果没有找到&#xff0c;它会返回 null。 下…

进入mysql报错:bash:/bin/mysql:没有那个文件或目录

问题分析&#xff1a; 有可能把/bin下面的mysql文件删除 解决方案&#xff1a; 卸载已安装MySQL&#xff0c;重新安装一遍 卸载步骤&#xff1a; 在CentOS系统中卸载MySQL可以通过以下步骤进行&#xff1a; 1、停止MySQL服务&#xff1a; sudo systemctl stop mysqld 2…

【GD32F303红枫派使用手册】第七节 TIMER-蜂鸣器PWM

7.1 实验内容 通过本实验主要学习以下内容&#xff1a; PWM输出功能实现&#xff1b; 定时器基本原理&#xff1b; 蜂鸣器驱动原理&#xff1b; 7.2 实验原理 7.2.1 蜂鸣器驱动原理 蜂鸣器是一种一体化结构的电子讯响器&#xff0c;采用直流电压供电&#xff0c;广泛应用…

数仓建模—指标体系初识

文章目录 数仓建模—指标体系初识什么是指标如何理解指标体系指标体系的价值指标体系的构建构建原则与规范指标体系的分类指标体系构建步骤指标体系挑战与对策总结数仓建模—指标体系初识 指标体系是一套系统化、结构化的指标集合,用于衡量、评估、监控组织或项目的整体情况。…

2024年信息素养大赛图形化编程小低组复赛模拟真题

2024年全国青少年信息素养大赛复赛为六道编程题&#xff0c;分值为10分*215分*225分*2&#xff0c;难度依次递增&#xff0c;按步骤评分&#xff0c;据Scratch实验室预估&#xff0c;初赛80%的晋级率&#xff0c;初赛近20万人&#xff0c;意味着有15万多进入复赛&#xff0c;7月…

bootstrapblazor小白笔记

使用了bootstrapblazor&#xff0c;采用.net8.0&#xff0c;server模式&#xff0c;所有的问题都是基于以上条件所遇到的 1、登录过后需要在每个页面都使用认证吗 是不需要的&#xff0c;每个页面都写attribute [Authorize]没有问题&#xff0c;但是页面很多的话一个一个的写很…

私有化部署的无忧企业文档,助力企业实现文档权限的精细化管理

在当今数字化快速发展的时代&#xff0c;企业文档管理已成为企业运营中不可或缺的一部分。文档的安全性和访问权限的精确控制对于企业的信息保护至关重要。在无忧企业文档管理系统中&#xff0c;不仅具备强大的内容管理能力&#xff0c;更在权限管理上做到了细致入微。下面我对…

C++ 宏定义中的##

一、解释 C的宏定义中的##&#xff0c;代表将内容先分隔&#xff0c;再强制连接。 二、举例 假设有如下宏定义&#xff1a; #define DECLARE(name, type) type name##_##type##_typevoid decl() {DECLARE(val, int); //语句1 } 则语句1替换为&#xff1a;int val_int_type 由…

【MySQL】MySQL Connect -- 详解

一、Connector / C 使用 要使用 C 语言连接 MySQL&#xff0c;需要使用 MySQL 官网提供的库&#xff0c;可以去官网进行下载&#xff1a;MySQL :: MySQL Community Downloads 我们使用 C 接口库来进行连接&#xff0c;要正确使用&#xff0c;还需要做一些准备工作&#xff1a…

[Windows] 植物大战僵尸杂交版

游戏包含冒险模式、挑战模式、生存模式三种不同玩法。冒险模式主打关卡闯关&#xff0c;挑战模式则挑战特殊设计的关卡&#xff0c;生存模式结合无尽模式和特殊地图&#xff0c;各具特色。玩家可根据喜好自由选择模式&#xff0c;体验不同的游戏乐趣。快来尝试这款独特的pvz游戏…

【2024-06-03】某红书X-s分析

声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 文章目录 一、前言二、【2023-02-24】版本1.网站分析2.参数x-s3.web_session4.测试三、【2024-06-03】 版本1. 抓包流程2.简单分析…

springboot学习笔记-待整理

学习方式&#xff1a;看博客学习&#xff0c;记录博客链接&#xff0c;并整理干货知识点。 参考的博客&#xff1a;SpringBoot框架 Spring Boot最主要作用是帮我们快速的构建庞大的spring项目&#xff0c;并且尽可能的减少一切xml配置&#xff0c;做到开箱即用&#xff0c;迅…