简介:服务器风扇速率和控制在BMC中是一个很重要的功能,在服务器中风扇是非常高速也耗电的,根据统计在数据中心的运维成本上,电费占6-7成,并且如果让风扇长期处在全转状态也会有噪音和耗损度的问题。一般而言,获取服务器的风扇速度和控制需要先登录服务器,然后获取风扇,控制风速的模式或者百分比,这个过程是比较繁琐的,特别需要经常开关机换卡等操作时,为了防止未满速运行风扇造成设备过热,往往需要人工登录查看核实和调整。 历史攻略: Python:requests + bmc开机、关机、优雅重启、强制重启 实现思路:本质是cookie免登录。 1、手动登录 2、获取cookie 3、通过requests发送请求获取或者修改 操作步骤:需要注意的是有条件的话最好是单独开设一个账户用于管理风扇。 1、手动登录:略 2、获取cookie 3、通过requests发送请求获取或者修改 案例源码: # -*- coding: utf-8 -*- # time: 2023/3/12 12:16 # file: fan.py # 公众号: 玩转测试开发 import requests import warnings
warnings.filterwarnings('ignore')
def get_fans_speed(ip, username='admin', password='admin'): headers = { 'content-type': 'application/json', 'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36', 'X-CSRFTOKEN': 'PZYlUuJk', 'Cookie': 'i18next=zh-cn; lang=zh-cn; QSESSIONID=ef420de2050a7efacecN26J61JI0tlTj; refresh_disable=1', } s = requests.session() s.auth = (username, password)
# BMC地址ip:192.168.1.xxx url = 'https://192.168.1.1/api/status/fan_info'
response = s.get(url=url, verify=False, headers=headers) response.encoding = 'utf-8' print(f'返回信息:{response}')
fan_speed_percent_list = [] for i in response.json()['fans']: for k, v in i.items(): if k == 'speed_percent': fan_speed_percent_list.append(v)
print('fan_number:', len(fan_speed_percent_list)) print(fan_speed_percent_list)
def change_fans(ip, username='admin', password='admin'): headers = { 'content-type': 'application/json', 'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36', 'X-CSRFTOKEN': 'fwd6lS4i', 'Cookie': 'i18next=zh-cn; lang=zh-cn; QSESSIONID=d9490daf3b0a7ee293UBtgzJiMomddNK; refresh_disable=1', } s = requests.session() s.auth = (username, password)
# BMC地址ip:192.168.1.xxx url = 'https://192.168.1.1/api/settings/fan/2'
data = {'duty': 100} response = s.put(url=url, json=data, verify=False, headers=headers) response.encoding = 'utf-8' print(f'返回信息:{response}') print('r:', response.json())
if __name__ == '__main__': ip = '192.168.1.1' # login() get_fans_speed(ip) # change_fans(ip)
运行获取风速: 运行调整风速百分比: |
|