Proxmox VE 实现企业微信通知

 前言

  • 主要实现获取系统信息发送给企业微信机器人。

企业微信机器人自动化获取PVE系统信息脚本编写

  • 生成FIGlet和AOL宏字体 参考
  • 最终实现获取系统信息,获取到的信息发送给企业微信机器人进行输出
  • 企业微信机器人创建参考 更改以下脚本企业微信机器人地址
  • 企业微信机器人url工具往群组推送文本消息参考配置
  • WECHAT_ROBOT_URL=自己插件的企业微信地址
vim /proxmox_Enterprise_wechat_notification.sh
#!/bin/bash
# -*- coding: utf-8 -*-
# Author: make.han 
# Email: CIASM@CIASM
# date 2024-04-23
# Enterprise wechat robot notification module

#echo "installing plugins"
#apt install jq qemu-guest-agent -y

function Deployment_completion_notification (){

	# Enterprise wechat robot address
	WECHAT_ROBOT_URL='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOU_key'

	# Obtain system, software, hardware information
	host_ID=`dmidecode -s system-serial-number | sed -r 's/\s+//g'`
	host_IP=`ip addr show vmbr0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'`

	# Proxmox VE Memory display
	memory_Size=`dmidecode -t memory | grep Size | grep -v No | awk '{sum+=$2} END {printf "%.0fG\n",sum/1^C4}'`
	CPU_Model=`cat /proc/cpuinfo | grep 'model name' | awk '{print $6}' | uniq`
	PowerEdge=`dmidecode | grep "Product Name: P" | awk '{print $4}'`
	Proxmox_VE_version=`pveversion | awk '{print $1}' | awk -F'/' '{print $2}'`
	Proxmox_VE_core=`cat /proc/version | grep "version" | awk '{print $3}'`
	
	# check Proxmox_VE all Network
	#Proxmox_VE_all_ip=`ip addr | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '127.0.0.1' | paste -s -d '-'`
	Proxmox_VE_all_ip=`ip addr | awk '/inet / && !/127.0.0.1/ {split($2, a, "/"); printf "%s-(%s)/", $NF, a[1]} END {printf "\n"}' | sed 's/-,$//'`


	# Proxmox VE check network name
	NIC_NAME_0=`ip link show | awk -F': ' '/^[6]+:/{print $2; exit}'`
	NIC_NAME_1=`ip link show | awk -F': ' '/^[7]+:/{print $2; exit}'`
	NIC_NAME_2=`ip link show | awk -F': ' '/^[2]+:/{print $2; exit}'`
	NIC_NAME_3=`ip link show | awk -F': ' '/^[3]+:/{print $2; exit}'`
	NIC_NAME_4=`ip link show | awk -F': ' '/^[4]+:/{print $2; exit}'`
	NIC_NAME_5=`ip link show | awk -F': ' '/^[5]+:/{print $2; exit}'`
	
	# The VM information is displayed
	#vmid=`qm list | awk 'NR>1 {print $1}' | paste -s -d ','`
	vmid=`qm list | awk 'NR>1 {printf "%svmid(%s)", (NR==2 ? "" : "/"), $1, $1} END {print ""}'`
	
	#vm_name=`qm list | awk 'NR>1 {print $2}' | paste -s -d ','`
	vm_name=`qm list | awk 'NR>1 {printf "%svmid%s-(%s)", (NR==2 ? "" : "/"), $1, $2} END {print ""}'`
	
	#vm_memory_MB=`qm list | awk 'NR>1 {print $4}' | paste -s -d ','`
	vm_memory_MB=`qm list | awk 'NR>1 {printf "%svmid%s-(%sMB)", (NR==2 ? "" : "/"), $1, $4} END {print ""}'`

	# 只获取虚拟机磁盘容量
	#vm_bootdisk_GB=`qm list | awk 'NR>1 {print $5}' | paste -s -d ','`
	# Obtain the VM disk and the id of the VM
	vm_bootdisk_GB=`qm list | awk 'NR>1 {printf "%svmid%s-(%sGB)", (NR==2 ? "" : "/"), $1, $5} END {print ""}'`
	
	#vm_status=`qm list | awk 'NR>1 {print $3}' | paste -s -d ','`
	vm_status=`qm list | awk 'NR>1 {printf "%svmid%s-(%s)", (NR==2 ? "" : "/"), $1, $3} END {print ""}'`
	
	# Obtain only the IP address of the VM
	#vm_host_IP=`qm list | awk 'NR>1 {print $1}' | xargs -I {} sh -c 'qm guest cmd {} network-get-interfaces | jq -r ".[] | select(.\"ip-addresses\" != null) | .\"ip-addresses\"[] | select(.\"ip-address-type\" == \"ipv4\" and .\"ip-address\" != \"127.0.0.1\") | .\"ip-address\"" | tr "\n" ","' | awk '{print substr($0, 1, length-1)}'`
	
	# Obtain the VM IP address and VM id
	vm_host_IP=`qm list | awk 'NR>1 {print $1}' | xargs -I {} sh -c 'printf "vmid{}-"; qm guest cmd {} network-get-interfaces | jq -r ".[] | select(.\"ip-addresses\" != null) | .\"ip-addresses\"[] | select(.\"ip-address-type\" == \"ipv4\" and .\"ip-address\" != \"127.0.0.1\") | .\"ip-address\"" | tr "\n" "," | sed "s/,$//" && echo ""' | awk '{$1=$1;print}' | tr "\n" "/ " | sed 's/,$//'`
	 #vm_host_IP=`qm list | awk 'NR>1 {print $1}' | xargs -I {} sh -c 'printf "vmid{}-"; qm guest cmd {} network-get-interfaces | jq -r ".[] | select(.\"ip-addresses\" != null) | .\"ip-addresses\"[] | select(.\"ip-address-type\" == \"ipv4\" and .\"ip-address\" != \"127.0.0.1\") | .\"ip-address\"" | tr "\n" "," | sed "s/,$//" && echo ""' | awk '{$1=$1;print}' | tr "\n" ", " | sed 's/,$//'`

   curl $WECHAT_ROBOT_URL \
   -H 'Content-Type: application/json' \
   -d '{
     "msgtype": "markdown",
      "markdown": {
         "content": "**Proxmox VE System** <font color=\"info\">complete</font>\n
         > **PVE Management address** \n
          [https://'$host_IP':8006](https://'$host_IP':8006)\n
         > **Hardware information** \n
          hostSN:<font color=\"info\">'$host_ID'</font>\n
          CPU_Model:<font color=\"info\">'$CPU_Model'</font>\n
          memory_Size:<font color=\"info\">'$memory_Size'</font>\n
          PowerEdge:<font color=\"info\">'$PowerEdge'</font>\n
          Proxmox_VE_version:<font color=\"info\">'$Proxmox_VE_version'</font>\n
          Proxmox_VE_core:<font color=\"info\">'$Proxmox_VE_core'</font>\n
          NIC_0:<font color=\"info\">'$NIC_NAME_0'</font>\n
          NIC_1:<font color=\"info\">'$NIC_NAME_1'</font>\n
		  NIC_2:<font color=\"info\">'$NIC_NAME_2'</font>\n
          NIC_3:<font color=\"info\">'$NIC_NAME_3'</font>\n
		  NIC_4:<font color=\"info\">'$NIC_NAME_4'</font>\n
		  NIC_5:<font color=\"info\">'$NIC_NAME_5'</font>\n
		  Proxmox_VE_all_ip:<font color=\"info\">'$Proxmox_VE_all_ip'</font>\n
		 > **Current virtual machine** \n
          VM_ID:<font color=\"info\">'$vmid'</font>\n
          VM_Name:<font color=\"info\">'$vm_name'</font>\n
		  VM_memory_GB:<font color=\"info\">'$vm_memory_MB'</font>\n
		  VM_bootdisk_GB:<font color=\"info\">'$vm_bootdisk_GB'</font>\n
		  VM_status:<font color=\"info\">'$vm_status'</font>\n
		  vm_host_IP:<font color=\"info\">'$vm_host_IP'</font>\n"
      } 
   }'
}

function main (){
Deployment_completion_notification
}

main

 执行脚本

bash /proxmox_Enterprise_wechat_notification.sh

 企业微信通知

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数控6面钻的优缺点

在木工、家具制造和建筑行业中&#xff0c;数控6面钻已成为一种革命性的工具。这种先进的机器以其高效、精准和多功能性受到了广大制造商的青睐。然而&#xff0c;就像任何技术产品一样&#xff0c;数控6面钻也有其优缺点。在本文中&#xff0c;我们将深入探讨数控6面钻的优缺点…

如何在React中构建动态下拉组件 - 解释React复合组件模式

下拉菜单长期以来一直是网站和应用程序中的重要组成部分。它们是用户交互的默默英雄&#xff0c;通过简单的点击或轻触默默地促进着无数的操作和决策。 今天你可能已经遇到了其中之一&#xff0c;无论是在你最喜爱的在线商店上选择类别&#xff0c;还是在注册表单上选择你的出…

106短信群发平台如此火热究竟有没有效?

106短信群发平台之所以如此火热&#xff0c;确实是因为它在多个方面展现出了显著的有效性。 首先&#xff0c;从发送速度和到达率来看&#xff0c;106短信平台表现优秀。无论是节假日还是平日&#xff0c;其发送速度都能保持在一个较快的水平&#xff0c;这对于验证码短信、通…

Mybatis源码学习系列之搭建源码阅读环境

1. 实验环境 jdk1.8.0_171apache-maven-3.5.4IntelliJ IDEA 2018mybatis-parent 31mybatis-3.5.4 2. 下载源码 先在官方GitHub下载对应的代码 git clone https://github.com/mybatis/parent git clone https://github.com/mybatis/mybatis-3mybatis3使用3.5.4版本&#xff…

【数据库教程】Navicat和在线phpMyAdmin如何连接远程服务器

文章目录 NavicatphpMyAdmin来源 有很多工具可以连接数据库&#xff0c;这里介绍两种&#xff0c;自行选择一种使用即可 Navicat 1、打开Navicat 2、点击连接&#xff0c;选择MySQL 3、输入数据库信息后点击测试连接&#xff08;数据库信息请联系我&#xff09; 4、点击确…

Java进阶-Stream流

概述 在Java8中&#xff0c;得益于lambda所带来的函数式编程&#xff0c;引入了一个全新的Stream流的概念目的&#xff1a;用于简化集合和数组操作的api 案例 需求&#xff1a;创建一个集合存储多个字符串元素&#xff0c;将集合中所有以“z”开头的元素存储到新的集合中&am…

C++ | Leetcode C++题解之第44题通配符匹配

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isMatch(string s, string p) {auto allStars [](const string& str, int left, int right) {for (int i left; i < right; i) {if (str[i] ! *) {return false;}}return true;};auto charMatch []…

LPA算法简介

1. 背景 标签传播算法(Label Propagation Algorithm)是一种基于图的半监督学习方法&#xff0c;其基本思路是用已标记节点的标签信息去预测未标记节点的标签信息。 2. 算法流程 1. 为每个节点随机的指定一个自己特有的标签&#xff1b; 2. 逐轮刷新所有节点的标签&#xff0…

设计模式(四):单例模式

设计模式&#xff08;四&#xff09;&#xff1a;单例模式 1. 单例模式的介绍2. 单例模式的类图3. 单例模式的实现3.1 懒汉式&#xff08;线程不安全&#xff09;3.2 懒汉式&#xff08;线程安全&#xff09;3.3 饿汉式3.4 静态内部类3.5 枚举 1. 单例模式的介绍 单例模式&…

SQL-DML数据操纵语言(Oracle)

文章目录 DML数据操纵语言常见的字段属性字符型字段属性char(n)varchar2(n)/varchar(n) 数值型字段属性number([p],[s]int 日期型字段属性DATEtimestamp 如何查看字段属性增加数据INSERT快捷插入 删除数据DELETE修改数据UPDATE DML数据操纵语言 定义 是针对数据做处理&#xf…

信息系统项目管理49个过程、查看工具与技术!最好用的工具

高项【浏览器打开&#xff0c;用于默写49个过程、查看工具与技术】.html 下载html后建议使用Edge、chrome或者火狐浏览器打开   查看工具与技术&#xff1a;鼠标左键单击管理活动&#xff1b;关闭工具与技术&#xff1a;点击工具与技术外面退回 1、点击【开始默写】按钮&…

在国企上班,有必要考软考吗?

现在很多在私企工作的朋友都会参加软考&#xff0c;国企员工更是如此。软考可以以考代评&#xff0c;传统的职称获取需要两步&#xff0c;第一步是评审&#xff0c;第二步是单位聘任。而通过软考取得证书就可以省去第一步&#xff0c;只需获得单位聘任即可享受相应的职称福利。…

Ventus(承影):基于RISC V的开源GPGPU

Ventus&#xff08;承影&#xff09;&#xff1a;基于RVV的开源GPGPU 清华大学集成电路学院dsp-lab的承影RVV GPGPU设计文档。 整体目标 提供一个开源的基于RVV的GPGPU实现方案&#xff0c;并给出软件映射方案、指令集&#xff08;支持的指令及特性、添加的自定义指令&#xf…

路由引入,路由过滤,路由策略实验

1&#xff0c;配置IP地址 R1&#xff1a; [R1]dis ip interface brief Interface IP Address/Mask Physical Protocol GigabitEthernet0/0/0 100.1.1.1/24 up up LoopBack0 …

OpenHarmony实战开发-如何实现tabContent内容可以在tabBar上显示并且tabBar可以响应滑动事件的功能。

介绍 本示例实现了tabContent内容可以在tabBar上显示并且tabBar可以响应滑动事件的功能。 效果图预览 使用说明 1.点击播放按钮进行视频播放&#xff0c;按住进度条按钮和进度条下方区域可以拖动进度条&#xff0c;更改视频播放进度。 实现思路 原生的Tabs组件&#xff0c…

IP地址SSL证书的申请流程——五步轻松实现https

没有域名或者不方便提供域名&#xff0c;只有IP地址也可以申请SSL证书&#xff0c;为IP地址申请ssl证书是需要开放443或者80端口&#xff0c;一般开放几分钟用来验证IP管理权即可&#xff01; 具体流程如下 IP地址证书 ssl证书点击这里直接申请 https://www.joyssl.com/certif…

鸿蒙应用开发之Web组件6

前面学习怎么样设置Web界面显示不同的颜色配置,这种适合不同时间来设置,比如白天要亮一些,晚上要暗一些。现在来学习使用Web组件选择文件文件列表的功能。 这个功能主要就是使用在Web打开一个页面,然后有上传文件的按钮,比如下面的界面: 当用户点击选择文件按钮时,就会…

nvidia-smi 输出内容详解

一、nvidia-smi 介绍 nvidia-smi&#xff08;NVIDIA System Management Interface&#xff09;是一种命令行实用程序&#xff0c;主要用于监控和管理NVIDIA GPU&#xff08;图形处理器&#xff09;的状态和性能。它提供了一个简单而强大的方式来获取有关GPU的实时信息&#xf…

javaWeb项目-财务管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、Springboot框架 …

管理集群工具之LVS

管理集群工具之LVS 集群概念 将很多机器组织在一起&#xff0c;作为一个整体对外提供服务集群在扩展性、性能方面都可以做到很灵活集群分类 负载均衡集群&#xff1a;Load Balance高可用集群&#xff1a;High Availability高性能计算&#xff1a;High Performance Computing …