背景:对服务器手工上下电比较麻烦,需要登录服务器的ILO口页面,然后进行关机(如果直接掉电服务器的电源可能会影响到硬件以及软件),下面的代码通过调用服务器提供的接口信息自动实现对多个服务器实行上下电的操作需要提前将服务器的用户名和密码输入到devicePower.csv文件中保存,我来为大家科普一下关于python通过wifi发送数据?以下内容希望对你有帮助!
python通过wifi发送数据
背景:对服务器手工上下电比较麻烦,需要登录服务器的ILO口页面,然后进行关机(如果直接掉电服务器的电源可能会影响到硬件以及软件),下面的代码通过调用服务器提供的接口信息自动实现对多个服务器实行上下电的操作。需要提前将服务器的用户名和密码输入到devicePower.csv文件中保存。
另外脚本涉及到多个模块,需要在python中提前部署和安装
## 实现在服务器ILO口页面对服务器的电源进行各种操作,代码接口依赖于不同服务器厂商,仅供参考
import requests
import urllib3
import json
import pandas as pd
import numpy as np
#脚本文件和excel表格放罝路径,可以自己调整
workpath = "D:/"
#参数取值:On:上电:ForceOff:强制下电:Gracefulshutdown:正常关机:ForceRestart:强制重启
powerParm ="On"
#通过ssl._create_unverified_context全局取消证书验证
ssl._create_default_https_context = ssl._create unverified_context
#强制取消未经验证的HTTPS url的警告信息
url1ib3.disable_warnings()
#输入:csv格式,存放交换机的ip地址:用户名和密码,格式如下:
#deviceIP Username Password
#192.36.1.139 root adn123456
path = workpath '/devicePower.csv'
#以下步骤将excel文档内容解析成列表的形式,便于后续的进一步解析
dataframe = pd.read_csv(path, encoding=" gb18030")
#将dataframe转换成数组
data = np.array(dataframe)
#再将数組转换成列表
data_list = data.tolist()
#公共部分
headers = {
"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Mobile Safari/537.36",
"Accept-Encoding": "gzip, deflate, br",
"content-type": "application/json; charset=utf-8"
}
index = 0
for item in data_list:
#获取设备工地址,登录用户名,密码
host_ip = item[0]
username = item[1]
password= item[2]
#刨建会话的页面
url_session = "https://" host_ip "/SessionService/Sessions"
#会话请求体
FormData = {'UserName': username, 'Password': password}
resp = "" #先定义变量,否则在下面try语句的except无法使用该变量
try:
resp = requests.post(url_session, data=json.dumps (FormData), headers=headers, verify=False)
except:
print("========== %d ================登录服务器 %s 失败" % (index, host_ip))
index = index 1
continue
if resp.status_code == 201:
print("========== %d ================登录服务器 %s 成功" % (index, host_ip))
index = index 1
else:
print("========== %d ================服务器 %s 不支持,请升级HDM或者BIOS,返回码:%s,返回错误信息:\n%s" % (index, host_ip, str(resp.status_code), resp.text))
index = index 1
continue
#获取token值,用于后续的操作
token = resp.headers["X-Auth-Token"]
#服务器电源进行採作
url_power = "https://" host_ip "/Actions/1.Reset"
#利用上面步骤获取到的token更新本次请求体的报文头
headers.update({'X-Auth-Token': token})
request_body= json.dumps({"ResetType": powerParm})
resp_power = requests.post(url_power, data=request_body, headers=headers, verify=False)
if resp_power.status_code == 204 or resp_power.status_code == 200:
print("对当前服务器电源进行 %s 操作成功,返回码:%s " % (powerParm, resp_power.status_code))
else:
print("登录服务器 %s 失败,返回码:%s,返回错误信息:%s" % (host_ip, str(resp_power.status_code), resp_power.text))
print("========== 执行结束 ================ ")