Sindbad~EG File Manager
#!/opt/alt/python37/bin/python3 -bb
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2018 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# https://cloudlinux.com/docs/LICENCE.TXT
#
from __future__ import absolute_import
import argparse
import logging
import sys
from clconfigure import task
from clconfigure.limits import set_default_limits_state
from clconfigure.services import set_service_state, STATE_RUNNING, STATE_MASKED, STATE_STOPPED, STATE_UNMASKED
from clconfigure.packages import set_package_state, STATE_INSTALLED, STATE_REMOVED
from lve_utils.sentry import init_lve_utils_sentry_client
from clconfigure import setup_logger
from clcommon.lib.cledition import is_cl_solo_edition, is_cl_admin_edition, is_container
LOGS_PATH = '/var/log/cloudlinux/clcustomizer.log'
CONFLICTED_PACKAGES = (
'ea-apache24-mod_lsapi',
'mod_lsapi',
'httpd24-mod_lsapi',
'mod_hostinglimits',
'ea-apache24-mod_hostinglimits',
'httpd24-mod_hostinglimits',
'governor-mysql',
)
def _disable_lve_services():
"""
Turn off all lve-related services.
"""
set_service_state(STATE_STOPPED, 'lve')
set_service_state(STATE_STOPPED, 'lve_namespaces')
set_service_state(STATE_STOPPED, 'lvestats')
set_service_state(STATE_STOPPED, 'lvectl')
set_service_state(STATE_MASKED, 'lve')
set_service_state(STATE_MASKED, 'lve_namespaces')
set_service_state(STATE_MASKED, 'lvestats')
set_service_state(STATE_MASKED, 'lvectl')
@task("Configuring environment for CloudLinux OS Solo: is_posttrans='{is_posttrans}'")
def install_cl_solo(is_posttrans):
"""
Converts "normal" CloudLinux into CL Solo by disabling
some services and installing some packages.
:param is_posttrans:
When true, we must do only actions that need to be done during
%posttrans section of cloudlinux-solo-meta package
"""
if not is_posttrans:
for conflicted_package in CONFLICTED_PACKAGES:
set_package_state(STATE_REMOVED, conflicted_package)
set_package_state(STATE_INSTALLED, 'cloudlinux-solo-meta')
else:
_disable_lve_services()
@task("Configuring environment for CloudLinux OS Shared (container): is_posttrans='{is_posttrans}'")
def install_cl_container(is_posttrans):
"""
Converts "normal" CloudLinux Shared into container by disabling
some services and installing some packages.
:param is_posttrans:
When true, we must do only actions that need to be done during
%posttrans section of cloudlinux-container package
"""
if not is_posttrans:
set_package_state(STATE_INSTALLED, 'cloudlinux-container')
else:
_disable_lve_services()
@task("Configuring environment for CloudLinux OS Admin: is_posttrans='{is_posttrans}'")
def install_cl_admin(is_posttrans):
"""
Converts "normal" CloudLinux into CL Admin by changing default limits
and some other stuff that may be added later.
:param is_posttrans:
When true, we must do only actions that need to be done during
%posttrans section of cloudlinux-solo-meta package
"""
if not is_posttrans:
# TODO: mysql-governor is not so easy to install and
# also we don't support shared -> admin migration in production
# so just omit this case for now
set_package_state(STATE_INSTALLED, 'cloudlinux-admin-meta')
else:
set_default_limits_state('unlimited')
@task("Converting environment from CloudLinux OS Solo to CloudLinux OS Shared: is_posttrans='{is_posttrans}'")
def uninstall_cl_solo(is_posttrans):
"""
Converts CL Solo into "normal" CloudLinux by enabling
some services and installing some packages.
:param is_posttrans:
When true, we must do only actions that need to be done during
%posttrans section of cloudlinux-solo-meta package
"""
if not is_posttrans:
set_package_state(STATE_REMOVED, 'cloudlinux-solo-meta')
set_package_state(STATE_INSTALLED, 'cagefs')
else:
set_service_state(STATE_UNMASKED, 'lve')
set_service_state(STATE_UNMASKED, 'lve_namespaces')
set_service_state(STATE_UNMASKED, 'lvestats')
set_service_state(STATE_UNMASKED, 'lvectl')
set_service_state(STATE_RUNNING, 'lve')
set_service_state(STATE_RUNNING, 'lve_namespaces')
set_service_state(STATE_RUNNING, 'lvectl')
set_service_state(STATE_RUNNING, 'lvestats')
def main():
"""
Entry point for this program.
Parses arguments and calls needed methods.
"""
setup_logger(None, LOGS_PATH)
logging.debug('Executing "%s"', ' '.join(sys.argv))
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='action')
reconfigure = subparsers.add_parser('reconfigure')
reconfigure.add_argument('-t', '--target', choices=[
'solo',
'shared',
'container',
'admin',
'auto'
], required=True)
reconfigure.add_argument('--posttrans', default=False, action='store_true')
args = parser.parse_args()
if args.action is None:
parser.print_help()
return
if args.target == 'solo':
install_cl_solo(args.posttrans)
elif args.target == 'admin':
install_cl_admin(args.posttrans)
elif args.target == 'container':
install_cl_container(args.posttrans)
elif args.target == 'shared':
uninstall_cl_solo(args.posttrans)
elif args.target == 'auto':
if is_container():
install_cl_container(args.posttrans)
elif is_cl_solo_edition(skip_jwt_check=False):
install_cl_solo(args.posttrans)
elif is_cl_admin_edition(skip_jwt_check=False):
install_cl_admin(args.posttrans)
else:
# uninstall is currently not supported
pass
else:
raise NotImplementedError()
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
init_lve_utils_sentry_client('clconfigure')
main()
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists