Files
yakpanel-core/class/projectModel/bt_docker/dk_setup.py
2026-04-07 02:04:22 +05:30

157 lines
9.9 KiB
Python

#coding: utf-8
#-------------------------------------------------------------------
# YakPanel
#-------------------------------------------------------------------
# Copyright (c) 2015-2099 YakPanel(www.yakpanel.com) All rights reserved.
#-------------------------------------------------------------------
# Author: zouhw <zhw@yakpanel.com>
#-------------------------------------------------------------------
#------------------------------
# Docker模型
#------------------------------
import os
import json
import public
import projectModel.bt_docker.dk_public as dp
class main :#line:1
def get_config (O0OO0OO0O0OOO0OOO ,O0OOOO000OOOO0000 ):#line:3
import projectModel .bt_docker .dk_public as dp #line:4
O00O0OOO0O0O0OO00 =O0OO0OO0O0OOO0OOO .get_registry_mirrors (O0OOOO000OOOO0000 )#line:6
if not O00O0OOO0O0O0OO00 ["status"]:#line:7
return O00O0OOO0O0O0OO00 #line:8
else :#line:9
O00O0OOO0O0O0OO00 =O00O0OOO0O0O0OO00 ['msg']#line:10
OOO00O00O00000000 =O0OO0OO0O0OOO0OOO .get_service_status ()#line:11
return public .returnMsg (True ,{"registry_mirrors":O00O0OOO0O0O0OO00 ,"service_status":OOO00O00O00000000 ,"installed":O0OO0OO0O0OOO0OOO .check_docker_program (),"monitor_status":O0OO0OO0O0OOO0OOO .get_monitor_status (),"monitor_save_date":dp .docker_conf ()['SAVE']})#line:18
def set_monitor_save_date (O0OO0000000O0OO0O ,OO0OO0O0O00OO0OOO ):#line:20
""#line:25
import re #line:26
OOOO0O0OO00O00O00 ="{}/data/docker.conf".format (public .get_panel_path ())#line:27
O00OO000O0OO0000O =public .readFile (OOOO0O0OO00O00O00 )#line:28
try :#line:29
OOO00O0000000OO0O =int (OO0OO0O0O00OO0OOO .save_date )#line:30
except :#line:31
return public .returnMsg (False ,"The monitoring save time needs to be a positive integer!")#line:32
if OOO00O0000000OO0O >999 :#line:33
return public .returnMsg (False ,"Monitoring data cannot be retained for more than 999 days!")#line:34
if not O00OO000O0OO0000O :#line:35
O00OO000O0OO0000O ="SAVE={}".format (OOO00O0000000OO0O )#line:36
public .writeFile (OOOO0O0OO00O00O00 ,O00OO000O0OO0000O )#line:37
return public .returnMsg (True ,"Set up successfully!")#line:38
O00OO000O0OO0000O =re .sub (r"SAVE\s*=\s*\d+","SAVE={}".format (OOO00O0000000OO0O ),O00OO000O0OO0000O )#line:39
public .writeFile (OOOO0O0OO00O00O00 ,O00OO000O0OO0000O )#line:40
dp .write_log ("Set the monitoring time to [] days!".format (OOO00O0000000OO0O ))#line:41
return public .returnMsg (True ,"Set up successfully!")#line:42
def get_service_status (OO0O0OOOO00O0000O ):#line:44
import projectModel .bt_docker .dk_public as dp #line:45
OOOO0OO00O00O0O0O ='/var/run/docker.pid'#line:46
if os .path .exists (OOOO0OO00O00O0O0O ):#line:47
try :#line:48
O0O0O0OOO0OO0OOOO =dp .docker_client ()#line:49
if O0O0O0OOO0OO0OOOO :#line:50
return True #line:51
else :#line:52
return False #line:53
except :#line:54
return False #line:55
else :#line:56
return False #line:57
def docker_service (O00OOO000O0000O0O ,OOO00OO000000OOOO ):#line:60
""#line:65
import public #line:66
O000O0OOO0O0O000O ={'start':'start','stop':'stop','restart':'restart'}#line:67
if OOO00OO000000OOOO .act not in O000O0OOO0O0O000O :#line:68
return public .returnMsg (False ,'There is no way to do this!')#line:69
O0000OO0O0OOOOOO0 ='systemctl {} docker'.format (OOO00OO000000OOOO .act )#line:70
if OOO00OO000000OOOO .act =="stop":#line:71
O0000OO0O0OOOOOO0 +="&& systemctl {} docker.socket".format (OOO00OO000000OOOO .act )#line:72
public .ExecShell (O0000OO0O0OOOOOO0 )#line:73
dp .write_log ("Set the Docker service status to [{}] successful".format (O000O0OOO0O0O000O [OOO00OO000000OOOO .act ]))#line:74
return public .returnMsg (True ,"Set the status to [{}] successful".format (O000O0OOO0O0O000O [OOO00OO000000OOOO .act ]))#line:75
def get_registry_mirrors (O000O0OO0O00O0000 ,OO00O0OOO000O00O0 ):#line:78
try :#line:79
if not os .path .exists ('/etc/docker/daemon.json'):#line:80
return public .returnMsg (True ,[])#line:81
O00000OOOOOOOO0O0 =json .loads (public .readFile ('/etc/docker/daemon.json'))#line:82
if "registry-mirrors"not in O00000OOOOOOOO0O0 :#line:83
return public .returnMsg (True ,[])#line:84
return public .returnMsg (True ,O00000OOOOOOOO0O0 ['registry-mirrors'])#line:85
except :#line:86
return public .returnMsg (False ,'Get failed! Reason for failure: {}'.format (public .get_error_info ()))#line:87
def set_registry_mirrors (OO0OO0000OO0OOOO0 ,OOOO000OO0O00O000 ):#line:90
""#line:95
import re #line:96
try :#line:97
O0000O0O0O000O00O ={}#line:98
if os .path .exists ('/etc/docker/daemon.json'):#line:99
O0000O0O0O000O00O =json .loads (public .readFile ('/etc/docker/daemon.json'))#line:100
if not OOOO000OO0O00O000 .registry_mirrors_address .strip ():#line:101
if 'registry-mirrors'not in O0000O0O0O000O00O :#line:103
return public .returnMsg (True ,'Set successfully')#line:104
del (O0000O0O0O000O00O ['registry-mirrors'])#line:105
else :#line:106
O0O0O0O00OOOO0O0O =OOOO000OO0O00O000 .registry_mirrors_address .strip ().split ('\n')#line:107
for O0000OOO0OO0000O0 in O0O0O0O00OOOO0O0O :#line:108
if not re .search ('https?://',O0000OOO0OO0000O0 ):#line:109
return public .returnMsg (False ,'The acceleration address [{}] is malformed<br>Reference: https://mirror.ccs.tencentyun.com'.format (O0000OOO0OO0000O0 ))#line:110
O0000O0O0O000O00O ['registry-mirrors']=O0O0O0O00OOOO0O0O #line:112
public .writeFile ('/etc/docker/daemon.json',json .dumps (O0000O0O0O000O00O ,indent =2 ))#line:115
dp .write_log ("Set up Docker acceleration successfully!")#line:116
return public .returnMsg (True ,'Set successfully')#line:117
except :#line:118
return public .returnMsg (False ,'Setup failed! Reason for failure:{}'.format (public .get_error_info ()))#line:119
def get_monitor_status (OO0O00O0OO0O0O000 ):#line:121
""#line:124
O00O000O00OO00000 =public .process_exists ("python",cmdline ="/www/server/panel/class/projectModel/bt_docker/dk_monitor.py")#line:126
if O00O000O00OO00000 :#line:127
return O00O000O00OO00000 #line:128
O00O000O00OO00000 =public .process_exists ("python3",cmdline ="/www/server/panel/class/projectModel/bt_docker/dk_monitor.py")#line:129
if O00O000O00OO00000 :#line:130
return O00O000O00OO00000 #line:131
return O00O000O00OO00000 #line:132
def set_docker_monitor (OO0OOOOOOO0O00OO0 ,O0O0O0000O0OOO000 ):#line:134
""#line:139
import time #line:140
import projectModel .bt_docker .dk_public as dp #line:141
OOO000O0O0O0OOOO0 ="/www/server/panel/pyenv/bin/python"#line:142
if not os .path .exists (OOO000O0O0O0OOOO0 ):#line:143
OOO000O0O0O0OOOO0 ="/www/server/panel/pyenv/bin/python3"#line:144
O0O000O0O00O0O000 ="/www/server/panel/class/projectModel/bt_docker/dk_monitor.py"#line:145
if O0O0O0000O0OOO000 .act =="start":#line:146
OOO0O00OO0OO0O00O ="nohup {} {} &".format (OOO000O0O0O0OOOO0 ,O0O000O0O00O0O000 )#line:147
public .ExecShell (OOO0O00OO0OO0O00O )#line:148
time .sleep (1 )#line:149
if OO0OOOOOOO0O00OO0 .get_monitor_status ():#line:150
dp .write_log ("Docker monitoring started successfully!")#line:151
return public .returnMsg (True ,"Start monitoring successfully!")#line:152
return public .returnMsg (False ,"Failed to start monitoring!")#line:153
else :#line:154
O0O0OOOOOOOO0O0OO =dp .get_process_id ("python","/www/server/panel/class/projectModel/bt_docker/dk_monitor.py")#line:155
if not O0O0OOOOOOOO0O0OO :#line:156
O0O0OOOOOOOO0O0OO =dp .get_process_id ("python3","/www/server/panel/class/projectModel/bt_docker/dk_monitor.py")#line:157
public .ExecShell ("kill -9 {}".format (O0O0OOOOOOOO0O0OO ))#line:158
dp .write_log ("Docker monitoring stopped successfully!")#line:159
return public .returnMsg (True ,"Stop monitoring successfully!")#line:160
def check_docker_program (O0O00O00OOOO0O000 ):#line:162
""#line:166
O0O0O00O000OOO000 ="/usr/bin/docker"#line:167
O00OO00OO0OOOOOO0 ="/usr/bin/docker-compose"#line:168
if not os .path .exists (O0O0O00O000OOO000 )or not os .path .exists (O00OO00OO0OOOOOO0 ):#line:169
return False #line:170
return True #line:171
def install_docker_program (OOO0000OOO0O0O0O0 ,O0O000O0OO000OO0O ):#line:173
""#line:178
import time #line:179
O000O000O0OO00O00 ="Install Docker service"#line:180
O00O000OOOOOOO000 ="/bin/bash /www/server/panel/install/install_soft.sh 0 install docker_install_en"#line:183
public .M ('tasks').add ('id,name,type,status,addtime,execstr',(None ,O000O000O0OO00O00 ,'execshell','0',time .strftime ('%Y-%m-%d %H:%M:%S'),O00O000OOOOOOO000 ))#line:184
if not public.is_self_hosted():
public .httpPost (public .GetConfigValue ('home')+'/api/panel/plugin_total',{"pid":"1111111",'p_name':"Docker商用模块"},3 )#line:185
public.arequests('post', '{}/api/setupCount/setupPlugin'.format(public.OfficialApiBase()),
data={"pid": "1111111", 'p_name': "Dockerpaymodel"}, timeout=3)
return public .returnMsg (True ,"Install task added to queue!")#line:186