mirror of
https://jihulab.com/spiritlhl/qinglong_auto_tools.git
synced 2026-06-05 21:07:21 +08:00
516 lines
17 KiB
Python
516 lines
17 KiB
Python
# -*- coding:utf-8 -*-
|
||
# 作者仓库:https://jihulab.com/spiritlhl/qinglong_auto_tools.git
|
||
# 觉得不错麻烦点个star谢谢
|
||
# 频道:https://t.me/qinglong_auto_tools
|
||
# 根据主青龙同步到副青龙中去,脚本默认同步更新副青龙环境变量的状态和值
|
||
# 如果有环境变量在副青龙不存在需要新增,若是JD_COOKIE,请使用二叉树ck分发脚本,
|
||
# 若是其他名字的变量,本脚本第一次运行自动在副青龙新增,但需要运行第二次才能同步新增变量的启用禁用状态
|
||
|
||
'''
|
||
cron: 1
|
||
new Env('二叉树环境变量状态同步');
|
||
'''
|
||
|
||
# 在脚本管理里修改这个文件的配置,然后保存,然后禁用 二叉树环境变量状态同步 这个任务,有需要再点运行
|
||
|
||
|
||
# 主青龙,需要修改环境变量的容器,事先需要在容器里创建应用,给所有权限,然后重启容器,应用设置才会生效,
|
||
# 副青龙,被同步环境变量的容器,事先需要在容器里创建应用,给所有权限,然后重启容器,应用设置才会生效,
|
||
# 按照格式有几个写几个,没有的空的删除
|
||
'''
|
||
# ec_config.txt中填写如下设置
|
||
|
||
# 二叉树环境变量状态同步
|
||
### 主青龙
|
||
cks_sync_able_cilent_id1="xxxxxxxx"
|
||
cks_sync_able_cilent_secret1="xxxxxxxxxx"
|
||
cks_sync_able_url1="http://xxxxxxxx:xxxx/"
|
||
|
||
### 副青龙
|
||
cks_sync_able_client_ids=["",""]
|
||
cks_sync_able_client_secrets=["",""]
|
||
cks_sync_able_urllist=["http://xxxxxxxxx:xxxx/",""]
|
||
|
||
'''
|
||
# client_id1=""
|
||
# client_secret1=""
|
||
# url1 = "http://ip:端口/"
|
||
# client_ids=['','','']
|
||
# client_secrets=['','','']
|
||
# urllist = ["http://xxxx:xxxx/","",""]
|
||
|
||
|
||
import time
|
||
import json
|
||
import re
|
||
try:
|
||
import requests
|
||
except Exception as e:
|
||
print(e, "\n缺少requests 模块,请执行命令安装:python3 -m pip install requests")
|
||
exit(3)
|
||
|
||
|
||
try:
|
||
with open("ec_config.txt", "r", encoding="utf-8") as fp:
|
||
t = fp.readlines()
|
||
try:
|
||
for i in t:
|
||
try:
|
||
temp = re.findall(r"cks_sync_able_cilent_id1=\"(.*?)\"", i)[0]
|
||
client_id1 = temp
|
||
if client_id1 == "":
|
||
print("cks_sync_able_cilent_id1 未填写")
|
||
except:
|
||
pass
|
||
except:
|
||
print("cks_sync_able_cilent_id1 未创建")
|
||
exit(3)
|
||
|
||
try:
|
||
for i in t:
|
||
try:
|
||
temp = re.findall(r"cks_sync_able_cilent_secret1=\"(.*?)\"", i)[0]
|
||
client_secret1 = temp
|
||
if client_secret1 == "":
|
||
print("cks_sync_able_cilent_secret1 未填写")
|
||
except:
|
||
pass
|
||
except:
|
||
print("cks_sync_able_cilent_secret1 未创建")
|
||
exit(3)
|
||
|
||
try:
|
||
for i in t:
|
||
try:
|
||
temp = re.findall(r"cks_sync_able_url1=\"(.*?)\"", i)[0]
|
||
url1 = temp
|
||
if url1 == "":
|
||
print("cks_sync_able_url1 未填写")
|
||
except:
|
||
pass
|
||
except:
|
||
print("cks_sync_able_url1 未创建")
|
||
exit(3)
|
||
except:
|
||
print("找不到配置文件或配置文件有错误, 请填写ec_config.txt")
|
||
|
||
|
||
try:
|
||
try:
|
||
for i in t:
|
||
try:
|
||
temp = "["+re.findall(r"cks_sync_able_client_ids=\[(.*?)\]", i)[0]+"]"
|
||
try:
|
||
client_ids = json.loads(temp)
|
||
except:
|
||
print("cks_sync_able_client_ids 填写有误")
|
||
if client_ids == []:
|
||
print("cks_sync_able_client_ids 未填写")
|
||
except:
|
||
pass
|
||
except:
|
||
print("cks_sync_able_client_ids 未创建")
|
||
exit(3)
|
||
|
||
try:
|
||
for i in t:
|
||
try:
|
||
temp = "["+re.findall(r"cks_sync_able_client_secrets=\[(.*?)\]", i)[0]+"]"
|
||
try:
|
||
client_secrets = json.loads(temp)
|
||
except:
|
||
print("cks_sync_able_client_secrets 填写有误")
|
||
if client_secrets == []:
|
||
print("cks_sync_able_client_secrets 未填写")
|
||
except:
|
||
pass
|
||
except:
|
||
print("cks_sync_able_client_secrets 未创建")
|
||
exit(3)
|
||
|
||
try:
|
||
for i in t:
|
||
try:
|
||
temp = "["+re.findall(r"cks_sync_able_urllist=\[(.*?)\]", i)[0]+"]"
|
||
try:
|
||
urllist = json.loads(temp)
|
||
except:
|
||
print("cks_sync_able_urllist 填写有误")
|
||
if urllist == []:
|
||
print("cks_sync_able_urllist 未填写")
|
||
except:
|
||
pass
|
||
except:
|
||
print("cks_sync_able_urllist 未创建")
|
||
exit(3)
|
||
except:
|
||
print("找不到配置文件或配置文件有错误, 请填写ec_config.txt")
|
||
|
||
requests.packages.urllib3.disable_warnings()
|
||
|
||
|
||
def gettimestamp():
|
||
return str(int(time.time() * 1500))
|
||
|
||
def gettoken(self,url_token):
|
||
r = requests.get(url_token).text
|
||
res = json.loads(r)["data"]["token"]
|
||
self.headers.update({"Authorization": "Bearer "+res})
|
||
|
||
def login(self, baseurl, client_id_temp, client_secret_temp):
|
||
url_token = baseurl+'open/auth/token?client_id='+client_id_temp+'&client_secret='+client_secret_temp
|
||
gettoken(self, url_token)
|
||
|
||
def getitem(self, baseurl, typ):
|
||
url = baseurl + typ + "/envs?t=%s" % gettimestamp()
|
||
r = self.get(url)
|
||
item = json.loads(r.text)["data"]
|
||
return item
|
||
|
||
|
||
def getenvitem(self, baseurl, value, typ, sm, tm):
|
||
url = baseurl + typ + "/envs?search=%s&t=%s" % (sm ,gettimestamp())
|
||
r = self.get(url)
|
||
for i in json.loads(r.text)["data"]:
|
||
if value in i[tm]:
|
||
return i
|
||
return []
|
||
|
||
def getsingleenv(self, baseurl, value, typ):
|
||
url = baseurl + typ + "/envs?searchValue=%s&t=%s" % (value ,gettimestamp())
|
||
r = self.get(url)
|
||
return r.json()
|
||
|
||
def getenvstatus(self, baseurl, typ, sm):
|
||
url = baseurl + typ + "/envs?searchValue=%s&t=%s" % (sm ,gettimestamp())
|
||
r = self.get(url)
|
||
for i in json.loads(r.text)["data"]:
|
||
return i["_id"]
|
||
|
||
def update(self, baseurl, typ, text, qlid, name):
|
||
url = baseurl + typ + "/envs?t=%s" % gettimestamp()
|
||
self.headers.update({"Content-Type": "application/json;charset=UTF-8", 'Connection': 'close'})
|
||
data = {
|
||
"name": name,
|
||
"value": text,
|
||
"_id": qlid
|
||
}
|
||
r = self.put(url, data=json.dumps(data))
|
||
if json.loads(r.text)["code"] == 200:
|
||
return True
|
||
else:
|
||
return False
|
||
|
||
|
||
def insert(self, baseurl, typ, text, nam):
|
||
url = baseurl + typ + "/envs?t=%s" % gettimestamp()
|
||
self.headers.update({"Content-Type": "application/json;charset=UTF-8", 'Connection': 'close'})
|
||
data = []
|
||
data_json = {
|
||
"value": text,
|
||
"name": nam
|
||
}
|
||
data.append(data_json)
|
||
r = self.post(url, json.dumps(data))
|
||
if json.loads(r.text)["code"] == 200:
|
||
return True
|
||
else:
|
||
return False
|
||
|
||
def remark(self, baseurl, typ, data):
|
||
url = baseurl + typ + "/envs?t=%s" % gettimestamp()
|
||
self.headers.update({"Content-Type": "application/json;charset=UTF-8", 'Connection': 'close'})
|
||
r = self.put(url, data=json.dumps(data))
|
||
return r.text
|
||
|
||
|
||
def enable(self, baseurl, typ, ids):
|
||
url = baseurl + typ + "/envs/enable?t=%s" % gettimestamp()
|
||
self.headers.update({"Content-Type": "application/json;charset=UTF-8", 'Connection': 'close'})
|
||
r = self.put(url, data=json.dumps(ids))
|
||
if json.loads(r.text)["code"] == 200:
|
||
return True
|
||
else:
|
||
return False
|
||
|
||
def disable(self, baseurl, typ, ids):
|
||
url = baseurl + typ + "/envs/disable?t=%s" % gettimestamp()
|
||
self.headers.update({"Content-Type": "application/json;charset=UTF-8", 'Connection': 'close'})
|
||
r = self.put(url, data=json.dumps(ids))
|
||
if json.loads(r.text)["code"] == 200:
|
||
return True
|
||
else:
|
||
return False
|
||
|
||
|
||
if __name__ == '__main__':
|
||
# 不需要新增值的环境变量名
|
||
except_list = ["JD_COOKIE"]
|
||
|
||
#主容器
|
||
s = requests.session()
|
||
login(s, url1, client_id1, client_secret1)
|
||
|
||
#获取主青龙信息
|
||
print("=========== 主青龙 环境变量信息获取中 =============")
|
||
|
||
env_data = getitem(s, url1, "open")
|
||
enable_values = []
|
||
enable_names = []
|
||
disable_values = []
|
||
disable_names = []
|
||
env_values = []
|
||
env_names = []
|
||
remarks_list = []
|
||
for i in env_data:
|
||
if i['status'] == 1:
|
||
if i["name"] == "JD_COOKIE":
|
||
ptpin = re.findall(r"pt_pin=(.*?);", i["value"])[0]
|
||
disable_values.append(ptpin)
|
||
else:
|
||
disable_values.append(i['value'])
|
||
disable_names.append(i['name'])
|
||
else:
|
||
if i["name"] == "JD_COOKIE":
|
||
ptpin = re.findall(r"pt_pin=(.*?);", i["value"])[0]
|
||
enable_values.append(ptpin)
|
||
else:
|
||
enable_values.append(i["value"])
|
||
enable_names.append(i['name'])
|
||
|
||
try:
|
||
i["remarks"]
|
||
print(i["remarks"])
|
||
remarks_list.append(i)
|
||
except:
|
||
pass
|
||
env_values.append(i["value"])
|
||
env_names.append(i['name'])
|
||
|
||
remarks_pin_or_name = []
|
||
for k in remarks_list:
|
||
try:
|
||
ptpin = re.findall(r"pt_pin=(.*?);", k["value"])[0]
|
||
remarks_pin_or_name.append(ptpin)
|
||
except:
|
||
remarks_pin_or_name.append(k["name"])
|
||
|
||
print("环境变量启用:{} 禁用:{}".format(len(enable_values), len(disable_values)))
|
||
print("=========== 主青龙环境变量获取完毕 =============")
|
||
|
||
print()
|
||
print("脚本默认同步更新副青龙环境变量的状态和值")
|
||
print("有环境变量在副青龙不存在需要新增,若是JD_COOKIE,请使用二叉树ck分发脚本,若是其他名字的变量,本脚本自动新增,但需要运行第二次才能同步新增变量的启用禁用状态")
|
||
print()
|
||
|
||
|
||
|
||
|
||
ucount = 0
|
||
for rrr in urllist:
|
||
print("=========== 副青龙{} 环境变量信息获取中 =============".format(ucount + 1))
|
||
print()
|
||
a = requests.session()
|
||
url_token = urllist[ucount] + 'open/auth/token?client_id=' + client_ids[ucount] + '&client_secret=' + \
|
||
client_secrets[
|
||
ucount]
|
||
gettoken(a, url_token)
|
||
fenv_data = getitem(a, urllist[ucount], "open")
|
||
fenv_values = []
|
||
fenable_values = []
|
||
fenable_names = []
|
||
fdisable_values = []
|
||
fdisable_names = []
|
||
for i in fenv_data:
|
||
if i['status'] == 1:
|
||
if i["name"] == "JD_COOKIE":
|
||
ptpin = re.findall(r"pt_pin=(.*?);", i["value"])[0]
|
||
fdisable_values.append(ptpin)
|
||
else:
|
||
fdisable_values.append(i['value'])
|
||
fdisable_names.append(i['name'])
|
||
else:
|
||
if i["name"] == "JD_COOKIE":
|
||
ptpin = re.findall(r"pt_pin=(.*?);", i["value"])[0]
|
||
fenable_values.append(ptpin)
|
||
else:
|
||
fenable_values.append(i["value"])
|
||
fenable_names.append(i['name'])
|
||
|
||
fenv_values.append(i['value'])
|
||
|
||
print("环境变量启用:{} 禁用:{}".format(len(fenable_values), len(fdisable_values)))
|
||
print()
|
||
|
||
|
||
# 更新环境变量
|
||
print("更新环境变量值中")
|
||
print()
|
||
co = 0
|
||
fpin = []
|
||
for k in env_values:
|
||
name = env_names[co]
|
||
co += 1
|
||
if name not in except_list:
|
||
item = getenvitem(a, urllist[ucount], name, "open", name, "name")
|
||
if item != []:
|
||
qlid = item["_id"]
|
||
if update(a, urllist[ucount], "open", k, qlid, name):
|
||
|
||
# 更新备注
|
||
if name in remarks_pin_or_name:
|
||
for k in remarks_list:
|
||
if name == k["name"]:
|
||
data = {
|
||
"value": k["value"],
|
||
"name": k["name"],
|
||
"remarks": k["remarks"],
|
||
"_id": qlid
|
||
}
|
||
print("更新备注 {}".format(k["remarks"]))
|
||
remark(a, urllist[ucount], "open", data)
|
||
|
||
print("第%s个环境变量更新成功" % (co))
|
||
else:
|
||
print("第%s个环境变量更新失败" % (co))
|
||
else:
|
||
if insert(a, urllist[ucount], "open", k, name):
|
||
print("第%s个环境变量添加成功" % co)
|
||
else:
|
||
print("第%s个环境变量添加失败" % co)
|
||
elif name == "JD_COOKIE":
|
||
continue
|
||
|
||
else:
|
||
print("无法识别{}".format(name))
|
||
|
||
print()
|
||
|
||
|
||
|
||
|
||
print("环境变量值更新完毕(不含JD_COOKIE的值更新)")
|
||
print()
|
||
|
||
print("环境变量同步备注和启用禁用中")
|
||
print()
|
||
|
||
# 同步启用环境变量
|
||
co = 0
|
||
enable_ids = []
|
||
for k in enable_values:
|
||
name = enable_names[co]
|
||
co += 1
|
||
if name not in except_list and k in fenv_values:
|
||
item = getenvitem(a, urllist[ucount], k, "open", name, "value")
|
||
enable_ids.append(item["_id"])
|
||
elif name == "JD_COOKIE" and k in fdisable_values:
|
||
ptpin = "pt_pin="+k+";"
|
||
print("{}启用成功".format(k))
|
||
item = getenvstatus(a, urllist[ucount], "open", ptpin)
|
||
enable_ids.append(item)
|
||
|
||
else:
|
||
pass
|
||
|
||
if name == "JD_COOKIE":
|
||
ptpin = "pt_pin=" + k + ";"
|
||
item = getenvstatus(a, urllist[ucount], "open", ptpin)
|
||
# 修改备注
|
||
if k in remarks_pin_or_name:
|
||
for c in remarks_list:
|
||
try:
|
||
if re.findall(r"pt_pin=(.*?);", c["value"])[0] == k:
|
||
try:
|
||
data = {
|
||
"value": getsingleenv(a, urllist[ucount], ptpin, "open")["data"][0]["value"],
|
||
"name": c["name"],
|
||
"remarks": c["remarks"],
|
||
"_id": item
|
||
}
|
||
print("更新备注 {}".format(c["remarks"]))
|
||
remark(a, urllist[ucount], "open", data)
|
||
except:
|
||
pass
|
||
except:
|
||
pass
|
||
|
||
|
||
|
||
|
||
enable(a, urllist[ucount], "open", enable_ids)
|
||
print("环境变量状态更新启用完毕")
|
||
print()
|
||
|
||
|
||
# 同步禁用变量
|
||
|
||
co = 0
|
||
disable_ids = []
|
||
for k in disable_values:
|
||
name = disable_names[co]
|
||
co += 1
|
||
if name not in except_list and k in fenv_values:
|
||
item = getenvitem(a, urllist[ucount], k, "open", name, "value")
|
||
enable_ids.append(item["_id"])
|
||
elif name == "JD_COOKIE" and k in fenable_values:
|
||
ptpin = "pt_pin="+k+";"
|
||
print("{}禁用成功".format(k))
|
||
item = getenvstatus(a, urllist[ucount], "open", ptpin)
|
||
disable_ids.append(item)
|
||
else:
|
||
pass
|
||
|
||
if name == "JD_COOKIE":
|
||
ptpin = "pt_pin=" + k + ";"
|
||
item = getenvstatus(a, urllist[ucount], "open", ptpin)
|
||
# 修改备注
|
||
if k in remarks_pin_or_name:
|
||
|
||
for c in remarks_list:
|
||
try:
|
||
if re.findall(r"pt_pin=(.*?);", c["value"])[0] == k:
|
||
try:
|
||
data = {
|
||
"value": getsingleenv(a, urllist[ucount], k, "open")["data"][0]["value"],
|
||
"name": c["name"],
|
||
"remarks": c["remarks"],
|
||
"_id": item
|
||
}
|
||
print("更新备注 {}".format(c["remarks"]))
|
||
remark(a, urllist[ucount], "open", data)
|
||
except:
|
||
pass
|
||
except:
|
||
pass
|
||
|
||
disable(a, urllist[ucount], "open", disable_ids)
|
||
|
||
print("环境变量状态更新禁用完毕")
|
||
print()
|
||
|
||
print("环境变量备注同步完毕")
|
||
print()
|
||
|
||
ucount += 1
|
||
print("=========== 副青龙%s更新环境变量完毕 ===========" % ucount)
|
||
print()
|
||
|
||
|
||
print("所有环境变量同步更新完毕")
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|