@ -10,7 +10,7 @@ import app.modules.db.service as service_sql
import app . modules . service . installation as service_mod
from app . middleware import get_user_params , check_services , page_for_admin , check_group
from app . modules . common . common_classes import SupportClass
from app . modules . roxywi . class_models import BaseResponse, Serv ic eInstall
from app . modules . roxywi . class_models import ServiceInstallFromApi, IdStrResponse , BaseResponse, Serv er Install, HAClusterService
from app . views . service . views import ServiceView
@ -78,11 +78,11 @@ class InstallGetStatus(ServiceView):
class InstallView ( MethodView ) :
methods = [ ' POST ' ]
methods = [ ' POST ' , ' PUT ' , ' DELETE ' ]
decorators = [ jwt_required ( ) , get_user_params ( ) , check_services , page_for_admin ( level = 3 ) , check_group ( ) ]
@validate ( body = ServiceInstall )
def post ( self , service : Literal [ ' haproxy ' , ' nginx ' , ' apache ' , ' keepalived ' ] , server_id : Union [ int , str , None ] , body : ServiceInstall ) :
@validate ( body = ServiceInstall FromApi )
def post ( self , service : Literal [ ' haproxy ' , ' nginx ' , ' apache ' , ' keepalived ' ] , server_id : Union [ int , str , None ] , body : ServiceInstall FromApi ) :
"""
Install a specific service .
- - -
@ -99,33 +99,15 @@ class InstallView(MethodView):
type : ' integer '
required : true
description : The ID or IP of the server
responses :
200 :
description: Successful operation
- name body :
in : body
required: true
schema :
type : ' object '
type : object
properties :
servers :
type : ' array '
items :
type : ' object '
properties :
id :
type : ' integer '
name :
type : ' string '
services :
type : ' object '
description : ' Which service will be installed. '
properties :
haproxy :
type : ' object '
description : ' Status of HAProxy '
properties :
enabled :
type : ' integer '
docker :
type : ' integer '
docker :
type : ' integer '
description : Should be service run in Docker container
syn_flood :
type : ' integer '
checker :
@ -134,6 +116,9 @@ class InstallView(MethodView):
type : ' integer '
auto_start :
type : ' integer '
responses :
201 :
description : Successful operation
default :
description : Unexpected error
"""
@ -142,6 +127,10 @@ class InstallView(MethodView):
server_id = SupportClass ( ) . return_server_ip_or_id ( server_id )
except Exception as e :
return roxywi_common . handler_exceptions_for_json_data ( e , ' ' )
if not body . servers :
body . servers = [ ServerInstall ( id = server_id ) ]
if not body . services :
body . services = { service : HAClusterService ( enabled = 1 , docker = body . docker ) }
try :
output = service_mod . install_service ( service , body )
except Exception as e :
@ -156,4 +145,54 @@ class InstallView(MethodView):
return roxywi_common . handler_exceptions_for_json_data ( e , f ' Cannot update Tools settings for { service . title ( ) } ' )
else :
return output
return BaseResponse ( ) . model_dump ( mode = ' json ' ) , 201
return IdStrResponse ( id = f ' { server_id } - { service } ' ) . model_dump ( mode = ' json ' ) , 201
@validate ( body = ServiceInstallFromApi )
def put ( self , service : Literal [ ' haproxy ' , ' nginx ' , ' apache ' , ' keepalived ' ] , server_id : Union [ int , str , None ] , body : ServiceInstallFromApi ) :
"""
Update service Tools settings .
- - -
tags :
- Service Installation
parameters :
- in : path
name : service
type : ' integer '
required : true
description : The type of service ( haproxy , nginx , apache , keepalived )
- in : path
name : server_id
type : ' integer '
required : true
description : The ID or IP of the server
- name body :
in : body
required : true
schema :
type : object
properties :
docker :
type : ' integer '
description : Should be service run in Docker container
syn_flood :
type : ' integer '
checker :
type : ' integer '
metrics :
type : ' integer '
auto_start :
type : ' integer '
responses :
201 :
description : Successful operation
default :
description : Unexpected error
"""
try :
service_sql . update_hapwi_server ( server_id , body . checker , body . metrics , body . auto_start , service )
except Exception as e :
return roxywi_common . handler_exceptions_for_json_data ( e , f ' Cannot update Tools settings for { service . title ( ) } ' )
return IdStrResponse ( id = f ' { server_id } - { service } ' ) . model_dump ( mode = ' json ' ) , 201
def delete ( self , service : Literal [ ' haproxy ' , ' nginx ' , ' apache ' , ' keepalived ' ] , server_id : Union [ int , str , None ] ) :
return BaseResponse ( ) . model_dump ( mode = ' json ' ) , 204