Files
aaPanel/class/projectModel/bt_docker/dk_network.py
T
2024-04-29 15:35:04 +08:00

69 lines
4.9 KiB
Python

#coding: utf-8
#-------------------------------------------------------------------
# 宝塔Linux面板
#-------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
#-------------------------------------------------------------------
# Author: zouhw <zhw@bt.cn>
#-------------------------------------------------------------------
#------------------------------
# Docker模型
#------------------------------
import public #line:1
import projectModel .bt_docker .dk_public as dp #line:2
import docker .errors #line:3
class main :#line:5
def docker_client (O00O0O000OO0000O0 ,OOO0OOOO0O0000OO0 ):#line:7
import projectModel .bt_docker .dk_public as dp #line:8
return dp .docker_client (OOO0OOOO0O0000OO0 )#line:9
def get_host_network (OO0O00O000O000O0O ,O00OO00OO00OOOOOO ):#line:11
""#line:16
import projectModel .bt_docker .dk_setup as ds #line:17
O00OO00O00000000O =ds .main ()#line:18
O000O0O0O00OO000O =O00OO00O00000000O .check_docker_program ()#line:19
O0O00O000OOO0OO0O =O00OO00O00000000O .get_service_status ()#line:20
OO0O0O00OO0OO0OO0 =OO0O00O000O000O0O .docker_client (O00OO00OO00OOOOOO .url )#line:21
if not OO0O0O00OO0OO0OO0 :#line:22
O0000O0000O0O0OO0 ={"images_list":[],"registry_list":[],"installed":O000O0O0O00OO000O ,"service_status":O0O00O000OOO0OO0O }#line:28
return public .returnMsg (True ,O0000O0000O0O0OO0 )#line:29
O000OO0OO00OOOO0O =OO0O0O00OO0OO0OO0 .networks #line:30
O0OOO0O00O00OO000 =OO0O00O000O000O0O .get_network_attr (O000OO0OO00OOOO0O )#line:31
O0000O0000O0O0OO0 =list ()#line:32
for OOOO0O0OOOO0O00O0 in O0OOO0O00O00OO000 :#line:33
OOOO00OOOO0O0000O =""#line:34
O00O000OOOO000O0O =""#line:35
if OOOO0O0OOOO0O00O0 ["IPAM"]["Config"]:#line:36
if "Subnet"in OOOO0O0OOOO0O00O0 ["IPAM"]["Config"][0 ]:#line:37
OOOO00OOOO0O0000O =OOOO0O0OOOO0O00O0 ["IPAM"]["Config"][0 ]["Subnet"]#line:38
if "Gateway"in OOOO0O0OOOO0O00O0 ["IPAM"]["Config"][0 ]:#line:39
O00O000OOOO000O0O =OOOO0O0OOOO0O00O0 ["IPAM"]["Config"][0 ]["Gateway"]#line:40
OOOOO000000OO000O ={"id":OOOO0O0OOOO0O00O0 ["Id"],"name":OOOO0O0OOOO0O00O0 ["Name"],"time":OOOO0O0OOOO0O00O0 ["Created"],"driver":OOOO0O0OOOO0O00O0 ["IPAM"]["Driver"],"subnet":OOOO00OOOO0O0000O ,"gateway":O00O000OOOO000O0O ,"labels":OOOO0O0OOOO0O00O0 ["Labels"]}#line:49
O0000O0000O0O0OO0 .append (OOOOO000000OO000O )#line:50
OOOOOOO000O0O0O0O ={"network":O0000O0000O0O0OO0 ,"installed":O000O0O0O00OO000O ,"service_status":O0O00O000OOO0OO0O }#line:56
return public .returnMsg (True ,OOOOOOO000O0O0O0O )#line:57
def get_network_attr (OO0O00O00O000OO00 ,O0OO0000O0OOO0O0O ):#line:59
O000OOOO0OOO00O00 =O0OO0000O0OOO0O0O .list ()#line:60
return [O00O0000O0OO00O00 .attrs for O00O0000O0OO00O00 in O000OOOO0OOO00O00 ]#line:61
def add (O0OOO0O0O0000OO0O ,O0OOO0O000000000O ):#line:63
""#line:75
import docker #line:76
O0O0000OO00OO00OO =docker .types .IPAMPool (subnet =O0OOO0O000000000O .subnet ,gateway =O0OOO0O000000000O .gateway ,iprange =O0OOO0O000000000O .iprange )#line:81
OOOO00000O000OO0O =docker .types .IPAMConfig (pool_configs =[O0O0000OO00OO00OO ])#line:84
O0OOO0O0O0000OO0O .docker_client (O0OOO0O000000000O .url ).networks .create (name =O0OOO0O000000000O .name ,options =O0OOO0O000000000O .options if O0OOO0O000000000O .options else None ,driver ="bridge",ipam =OOOO00000O000OO0O ,labels =dp .set_kv (O0OOO0O000000000O .labels ))#line:91
dp .write_log ("Add network [{}] [{}] successful!".format (O0OOO0O000000000O .name ,O0OOO0O000000000O .iprange ))#line:92
return public .returnMsg (True ,"Added successfully!")#line:93
def del_network (OOOOO0OO0O00O000O ,OOO0OOOO0O0O0O0O0 ):#line:95
""#line:100
try :#line:101
O000O0OO00O0OO000 =OOOOO0OO0O00O000O .docker_client (OOO0OOOO0O0O0O0O0 .url ).networks .get (OOO0OOOO0O0O0O0O0 .id )#line:103
O0OOOOOO0OO0O0OOO =O000O0OO00O0OO000 .attrs #line:104
if O0OOOOOO0OO0O0OOO ['Name']in ["bridge","none"]:#line:105
return public .returnMsg (False ,"The system default network cannot be deleted!")#line:106
O000O0OO00O0OO000 .remove ()#line:107
dp .write_log ("Delete network [{}] successful!".format (O0OOOOOO0OO0O0OOO ['Name']))#line:108
return public .returnMsg (True ,"Successfully deleted!")#line:109
except docker .errors .APIError as OOOOOO0O00O0O0OO0 :#line:110
if " has active endpoints"in str (OOOOOO0O00O0O0OO0 ):#line:111
return public .returnMsg (False ,"The network is in use and cannot be deleted!")#line:112
return public .returnMsg (False ,"Failed to delete! {}".format (str (OOOOOO0O00O0O0OO0 )))