157 lines
9.9 KiB
Python
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
|