gddlZddlZddlmZddlmZmZmZddlm Z ddl m Z ddl m Z mZmZmZmZmZmZmZddlmZddlmZmZGd d ZdS) N)abstractmethod)DictListOptional)cpapi)GroupInfoReader)ExternalProgramFailedget_cl_versionget_package_db_errorsget_passenger_package_nameis_ea4is_package_installed is_ubuntu run_command)InstallationFailedException)convert_package_version setup_loggerceZdZdZdZdZdZddZdZdZ dZ d Z d Z d Z d Zd ZedZedZedZedZedZdS)WizardInstallerz2 General interface for modules installers NcTtd|jjz|j|_dS)Nzwizard.)r __class____name__LOG_FILE app_loggerselfs py/clwizard/modules/base.py__init__zWizardInstaller.__init__'s#&y4>3J'JDMZZc|jd|jdd| t||}nT#t$rG}|jd|jt |d}~wwxYw|jd|j||jd|S) z!Run external tool and log resultsz<~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zExecuting command %s... )env_datazP...external command failed, see the following lines for tracebacks, errors, etc.Nz3...external command successfully ended with output:z<------------------------------------------------------------)rinfojoinrr errorstr)rcmdcmd_envoutputerrs r _run_commandzWizardInstaller._run_command*s X&&& 6 FFF  w777FF$    O !s t t t O ! !#c(( + + +   RSSS V$$$ X&&& s A B-&AB((B-ct}|r0d|d|}|j|tt |S)z!Check if package exists on serverzCan't check package z presence. Errors: )r rr&rr)r package_name error_message log_messages r_is_package_installedz%WizardInstaller._is_package_installed:s].//  0bbbS`bbK O ! !+ . . .-// /#L111r cFtr |j|S|j|S)z!Install a package and log results)r_install_apt_package_install_yum_packagerpackagess r_install_packagez WizardInstaller._install_packageEs0 ;; 8,4,h7 7(t((33r cti}d|d<d|d<|r)|gdt|z|SdS)z&Install an apt package and log resultsnoninteractiveDEBIAN_FRONTENDtrueDEBCONF_NONINTERACTIVE_SEEN)zapt-getinstall-y)r)Nr,list)rr6apt_envs rr3z$WizardInstaller._install_apt_packageLsY%5!"17-.  e$$%A%A%ADNN%R\c$dd dtr cX|r'|gdt|zSdS)z%Install a yum package and log results)yumr=r>Nr?r5s rr4z$WizardInstaller._install_yum_packageYs8  P$$%=%=%=X%NOO Otr cFtr |j|S|j|S)z Install a package group. At the moment, DEB metapackages are not supported, and provided names are simply installed as normal packages. This will change in the future. )rr3_install_yum_groupsrgroupss r_install_groupszWizardInstaller._install_groups`s0 ;; 6,4,f5 5't'00r cX|r'|gdt|zSdS)z.Install package group with yum and log results)rC groupinstallr>Nr?rFs rrEz#WizardInstaller._install_yum_groupsls8  S$$%B%B%BT&\\%QRR Rtr cd}tj|rdStpd}d|vrt dt jd|}|st dt|}d|d }|j d || |dS) z Check whether cloudlinux-ea4.repo is present and install it if not. It's required only on EA4 to install proper Passenger package z$/etc/yum.repos.d/cloudlinux-ea4.repoNUnknownubuntuz0Functionality currently not supported for Ubuntuz\d+z.Failed to get the distribution's major versionzIhttps://repo.cloudlinux.com/cloudlinux/EA4/cloudlinux-ea4-release-latest-z .noarch.rpmzFUnable to find cloudlinux-ea4 repo. Trying to install it using url: %s) ospathexistsr rresearchintgrouprr$r4)rcl_ea4_repofiledist maj_ver_match dist_maj_ver package_urls r_ensure_cl_ea4_repo_existsz*WizardInstaller._ensure_cl_ea4_repo_existsssA 7>>/ * *  F,9 t  -.`aa a &$//  `-.^__ _=..0011  u[g t t t  egrsss !!+.....r cDtrtdtr|t }|jd| ||dS#t$r}t|d}~wwxYw)zb Install proper passenger package for Selectors if it's not yet installed z+Passenger currently not supported on Ubuntuz'Trying to install Passenger package: %sN) rrr rZr rr$r4r )r passenger extern_faileds r_install_passengerz"WizardInstaller._install_passengers ;; ]-.[\\ \ 88 .  + + - - -.00  F RRR C  % %i 0 0 0 0 0$ C C C-//] B Cs*B B BBctj|}g}|dkrdnd}|D],}|t |d|-|S)z Get a list of available Python, NodeJS, PHP or Ruby module versions. :param group: - group name, e.g: python :return: list of available versions nodejsversion) version_size)rget_group_infovaluesappendr)rTavailable_groups_infoversionsver_size group_datas r_get_available_versionsz'WizardInstaller._get_available_versionssz!0 >u E E ))11q/6688 c cJ OO3Jy4IX`aaa b b b br ctNNotImplementedError)roptionss rrun_installationz WizardInstaller.run_installations"###r ctSrn)setclss rsupported_optionsz!WizardInstaller.supported_optionss uu r ct)z Method that returns dictionary with two required keys: {installed: True|False and options: {...}] This will be used by lvemanager to properly display wizard. rors rinitial_statuszWizardInstaller.initial_statuss"###r cF|jdStj|jS)z9 Checks whether we must :return: NT)_REQUIRED_CL_COMPONENT_SUPPORTris_panel_feature_supportedrus ris_supported_by_control_panelz-WizardInstaller.is_supported_by_control_panels&  - 54/0RSSSr rn)r __module__ __qualname____doc__rr{rr,r1r7r3r4rHrErZr^ staticmethodrlrrr classmethodrwryr}r rrrsYH%)"[[[ 2 2 2444    1 1 1 / / /DCCC*\&$$^$[$$^$TT[TTTr r)rNrQabcrtypingrrrclcommonrclcommon.group_info_readerrclcommon.utilsr r r r r rrrclwizard.exceptionsrclwizard.utilsrrrrr rrsC ''''''''''666666                    <;;;;;@@@@@@@@{T{T{T{T{T{T{T{T{T{Tr