v8.0.1: Add ServiceConfigList to retrieve service config files

Introduced a new `ServiceConfigList` MethodView to fetch configuration files for specified services. Updated route definitions to include new endpoints for this functionality, enhancing service configuration management.
pull/399/head
Aidaho 3 months ago
parent 3423595d9b
commit c421b9c437

@ -8,7 +8,8 @@ from app.views.install.views import InstallView
from app.views.server.views import ServerView, ServerGroupView, ServerGroupsView, ServersView, ServerIPView
from app.views.server.cred_views import CredView, CredsView
from app.views.server.backup_vews import BackupView, S3BackupView, GitBackupView
from app.views.service.views import ServiceView, ServiceActionView, ServiceBackendView, ServiceConfigView, ServiceConfigVersionsView
from app.views.service.views import (ServiceView, ServiceActionView, ServiceBackendView, ServiceConfigView,
ServiceConfigVersionsView, ServiceConfigList)
from app.views.ha.views import HAView, HAVIPView, HAVIPsView
from app.views.user.views import UserView, UserGroupView, UserRoles
from app.views.udp.views import UDPListener, UDPListeners, UDPListenerActionView
@ -53,8 +54,10 @@ bp.add_url_rule('/<service>/listeners', view_func=UDPListeners.as_view('listener
register_api_id_ip(ServiceView, 'service', '/status', ['GET'])
register_api_id_ip(ServiceBackendView, 'service_backend', '/backend', ['GET'])
register_api_id_ip(ServiceConfigView, 'config_view')
register_api_id_ip(ServiceConfigView, 'config_view', '/config')
register_api_id_ip(ServiceConfigVersionsView, 'config_version', '/versions', methods=['GET', 'DELETE'])
bp.add_url_rule('/service/<any(nginx, apache):service>/<server_id>/config/list', view_func=ServiceConfigList.as_view('config_list_ip'), methods=['GET'])
bp.add_url_rule('/service/<any(nginx, apache):service>/<int:server_id>/config/list', view_func=ServiceConfigList.as_view('config_list'), methods=['GET'])
register_api_id_ip(CheckerView, 'checker', '/tools')
register_api_id_ip(InstallView, 'install', '/install', methods=['POST'])
register_api_id_ip(ServiceActionView, 'service_action', '/<any(start, stop, reload, restart):action>', methods=['GET'])

@ -435,6 +435,78 @@ class ServiceConfigView(MethodView):
return DataStrResponse(data=stderr).model_dump(mode='json'), 201
class ServiceConfigList(MethodView):
methods = ['GET']
decorators = [jwt_required(), get_user_params(), check_services, page_for_admin(level=3), check_group()]
def get(self, service: str, server_id: Union[int, str]):
"""
Retrieve the list of configuration files for the given service
---
tags:
- Service configs list
parameters:
- name: service
in: path
type: string
required: true
enum: ['nginx', 'apache']
description: Type of service (nginx or apache)
- name: server_id
in: path
type: string
required: true
description: Server ID or IP address
responses:
200:
description: List of configuration files
schema:
type: object
properties:
data:
type: array
items:
type: string
example: [
"/etc/nginx/conf.d/default.conf",
"/etc/nginx/waf/modsecurity.conf",
"/etc/nginx/waf/rulescrs-setup.conf",
"/etc/nginx/waf/waf.conf",
"/etc/nginx/nginx.conf"
]
"""
try:
server_ip = SupportClass(False).return_server_ip_or_id(server_id)
except Exception as e:
return roxywi_common.handler_exceptions_for_json_data(e, 'Cannot find the server')
files = []
service_config_dir = sql.get_setting(f'{service}_dir')
try:
return_files = server_mod.get_remote_files(server_ip, service_config_dir, 'conf')
except Exception as e:
return roxywi_common.handler_exceptions_for_json_data(e, 'Cannot get configs')
return_files = return_files.split('\t\t')
for file in return_files:
if '\r\n' in file:
for f in file.split('\r\n'):
if f == '':
continue
elif '\t' in f:
for f1 in f.split('\t'):
files.append(f1)
else:
files.append(f)
elif file == '':
continue
else:
files.append(file)
files.append(sql.get_setting(f'{service}_config_path'))
return DataResponse(data=files).model_dump(mode='json')
class ServiceConfigVersionsView(MethodView):
methods = ['GET', 'POST', 'DELETE']
decorators = [jwt_required(), get_user_params(), check_services, page_for_admin(level=4), check_group()]

Loading…
Cancel
Save