Server IP : 184.154.167.98 / Your IP : 3.138.134.77 Web Server : Apache System : Linux pink.dnsnetservice.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 User : puertode ( 1767) PHP Version : 8.2.26 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/cloudlinux/ |
Upload File : |
#!/opt/cloudlinux/venv/bin/python3 -bb # coding=utf-8 # Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2022 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # http://cloudlinux.com/docs/LICENSE.TXT import subprocess import sys import json from typing import List, Set, Tuple, Optional from xml.dom import minidom as xml from clveconfig import ve_config from clcommon.lib.cledition import lve_supported_or_exit LVECTL = '/usr/sbin/lvectl' def lvectl_list_packages() -> Set[Tuple[str, Optional[str]]]: """ Parse packages list from `lvectl all-package-list` command Ex: {('pack1', 'reseller1'), ('pack2', None), ...} """ res = [] _, response = subprocess.getstatusoutput(f'{LVECTL} all-package-list --json') data = json.loads(response).get('data', []) for package in data: _reseller = package.get('RESELLER') if not _reseller or _reseller == 'N/A': _reseller = None res.append( (package.get('ID'), _reseller) ) return set( filter(lambda x: x[0] not in {'VE_DEFAULT'}, res) ) def xml_get_packages(xml_element: xml.Element) -> List[Tuple[str, Optional[str]]]: """ Parse packages list from ve.cfg """ res = [] packages = xml_element.getElementsByTagName('package') for package in packages: res.append( (package.getAttribute('id'), package.getAttribute('reseller') or None) ) return res @lve_supported_or_exit def main(): """ Check that ve.cfg contains no orphan package elements Otherwise delete these packages """ changed = False xml_config, _ = ve_config.get_xml_config(use_cache=False) xml_packages = xml_get_packages(xml_config) raw_xml_packages = xml_config.getElementsByTagName('package') lvectl_packages = lvectl_list_packages() for package in xml_packages: package_id, package_reseller = package if package not in lvectl_packages: try: package_element = next( filter( lambda x, pid=package_id, pres=package_reseller: x.getAttribute('id') == pid and ( (x.hasAttribute('reseller') is False and pres is None) or x.getAttribute('reseller') == str(pres) ), raw_xml_packages, ) ) package_element.parentNode.removeChild(package_element) changed = True except StopIteration: pass if changed: ve_config.save_xml(xml_config) return 0 if __name__ == '__main__': sys.exit(main())