gM7ddlZddlZddlmZddlmZmZmZmZddl m Z m Z ddl m Z mZddlmZddlmZddlmZmZmZdd lmZdd lmZmZmZd d lmZGd dZdS)N)Feature)admin_packagesis_adminis_panel_feature_supportedresellers_packages) MySQLGovernorMySQLGovException)print_dictionaryreplace_params)CloudlinuxLicenseLib)LvectlException)ClQuotaException ClQuotaLibQuotaDisabledException) LveCtlPackage)DEFAULT_PACKAGEis_active_reseller_limitslve)parse_cloudlinux_packages_optscNeZdZdZgdZdZdZdZdZdZ dZ dd Z dd Z dS)CloudlinuxPackagesz4 Class for run cloudlinux-packages commands ) speednprocpmemvmem maxEntryProcsioiopsinodes mysql-cpumysql-iocd|_i|_t|_t t jrtnd|_t t j rtnd|_ dS)NF) _is_json_optsr_clquota_pack_librrLVEr_lvectl_pack_libGOVERNORr_mysql_governor)selfs py/clpackages/packages.py__init__zCloudlinuxPackages.__init__ sc  !+3Mgk3Z3Z d `d2LWM]2^2^h}dhct}|sd|_|ddiSd|v|_|||_|jdr*tjs|ddi|jdr| S| S)z$ Run command action TresultzCloudlinux license isn't validz--json--for-resellerzLerror: reseller limits are not supported, can not use --for-reseller option.set) r get_license_statusr$_error_and_exit _parse_argsr%getrreseller_limit_supported_set_run_get_run)r+argvlicences r,runzCloudlinuxPackages.run's'(())++ V DM''3S(TUU U D( %%d++ :>>* + + C4P4R4R   h"    :e  #==?? "}}r.c~t||j\}}|s"|t||S)z% Parse CLI arguments )rr$r4r )r+r:statusdatas r,r5zCloudlinuxPackages._parse_args;sB6dDMJJ  7  !5!5 6 6 6 r.c |j}t|dtr|ddndt fd|jD}i}|jd}d}|jd2|jdd}g}ttj rb |j |||jd}n9#t$r,}||j|jd Yd}~nd}~wwxYw|d r|jsd |d <i|d <d|d d <nc|jsd |d <i|d <d|d d <n3 |j |}nc#t($r.}i}i|d <t||d d <d |d <Yd}~n0d}~wt*$r }i}|j|d<|j|d<Yd}~nd}~wwxYwttj r0|D],} | d} | |vr|| | dd <-nkdt/Ddt3Dzddiz|fd|Dz }d|d<ttj r;g} |D]6} d| ddi| dd<| | d7ttjr|jrd|d< |jd|jd| vr}|j|jd} |D]U} | d}|t>krd}|| vr:| |d| ddd<| |d | dd d<VnI#t@$r<}|ddkr&d |d<d |vri|d <t||d d<Yd}~nd}~wwxYw|D]} | d} |ds| d=| dd=| dikr| d=|d!s| d!=|d"sd"| vr| d"=|d#s| d$=|d%sd%| vr| d%=|d s| d d=| d ikr| d =|d&sd&| vr| d&=|d's"d| dvr| dd=| dikr| d=|d(s&d | vr"d| d vr| d d=| d ikr| d =tC||d)<||d<|"|d*S)+z# Run 'get' command z--limits,Nc3*K|] }| p|vfVdSN).0klks r, z.CloudlinuxPackages._get_run..Ls3MMaA2v0b1MMMMMMr. --provider --packageunicode-escapez--human-readable-numbersr0contextr errorquotaerrorsz'LVE Manager/quota package not installedz#Quotas not activated on this systemwarningrMpackagelimitsc$i|] \}}|D]}||SrDrD)rEresellerpackagesrRs r, z/CloudlinuxPackages._get_run..~sC,,,.Hh^f,,SZ ,,,,r.ci|]}|dS)rootrD)rErRs r,rWz/CloudlinuxPackages._get_run..s',3r.defaultcjg|]/\}}|dkr|nt|ddd|id0S)rZr[Fr )rRprovider enabledLimitsrS)rr6)rE package_name inodes_limitspackage_to_resellerss r, z/CloudlinuxPackages._get_run..sg&&&8L- 8Dy7P7P||Ve(<(@(@r(R(R-2'/&? &&&r.disabledmySqlGovallrcpuenabledmysqlrrrreprrr!r"itemsr)#r% isinstancestrsplitdict _LIMITS_KEYSencodedecoderrr'r(get_reseller_package_limitsr r4messagerMr&is_clquota_presentis_clquota_activatedrrpoprrjrappendr)r*is_governor_presentget_package_limitsrr len _print_data)r+o limits_keysr0 reseller_namer_ packages_datae quotas_dict package_datapackage_name_quota package_namespackage_limits_governor limits_dictrGras @@r,r9zCloudlinuxPackages._get_runEs% J)3AjM3)G)G QQz]  % % %TMMMM4;LMMMMM  <0  :k " .:k299;;BBCSTTL$& %gk 2 2 R R $ 5 Q QR_P\PTPZ[uPv!x!x # R R R$$ ai%P%PQQQQQQQQ R x / )<<>>. ")w#%x ,Ux ))+@@BB) ")w#%x ,Qx )) 2"&"8"T"TUa"b"bKK-..."$K')F8$03AF8$W-&-F7OOOOOO'222"$K() F9%() F9%%%%%%2.gk::(5cc -9)-D*-<M - > > 16 X8Nw8W0X X&u-$$\)%<==== %g&6 7 7 >D!*F:  >:k*2dj6MQ^6^6^.2.B.U.UVZV`alVm.n.n+(5pp '3I'> '?::+4L'+BBBE\]iEjkpEqL259'BD[\hDijnDoL248A$ > > >*%22)0F:&v--+-x(7:1vvx(4  >*% *% *L&x0Kw' +(&u-u%++#E*v& ('v& (6[+@+@'/ &%w' )G{,B,B(t$ *%e,t$**#D)v& (6[+@+@'{+ +;u;M0M0M&w/u%++#E*z* *t{/B/BwR]^bRcGcGc%g.t$**#D)m,,w)y    qsU'C66 D,"D''D,F44 H>$G'' H4HHBO77 P=2P88P=c |jd}|jd}|8t|s)t|s|dd|id|jdd}i}|j}ttj rt|d |d |d |d |d |d|dgr|d |d |d|d |d |d |dd}| |||d| D} |j |||n9#t$r,}||j|jdYd}~nd}~wwxYw|dr\ |j||dn9#t&$r,}||j|jdYd}~nd}~wwxYwttjr|d|d}|jrd |j||d|dn:#t0f$r,}||j|jdYd}~nd}~wwxYw||dS)z# Run 'set' command rIr1Nz5error: reseller limits for %(reseller)s are disabled.rUrLrJrKz--speedz--pmemz--vmemz--maxEntryProcsz--nprocz--ioz--iops)rrrrrrrci|] \}}||| SrCrD)rEkeyvalues r,rWz/CloudlinuxPackages._set_run..s#WWWZS%UEVc5EVEVEVr.z--inodesz --mysql-cpuz --mysql-ior)r%r6rrr4rprqrrr'any%_check_hoster_permissions_for_packagerjr(set_reseller_package_limitsr rsrMr&rr)r*rxset_package_limitsr r{)r+r~ for_resellerr_r0r|rSrs r,r8zCloudlinuxPackages._set_runs` <0 z~~&677  #H\,B,B #(66 $  Q& 6""    z+.5577>>?OPP  J %gk 2 2 Rs y\1X;( Q7H5I1YO>WWWF R%AA-Q]_effff" R R R$$ ai%P%PQQQQQQQQ R Z= R R&BB>6Q R$77 a FVXYZfXghhhh%( R R R$$ ai%P%PQQQQQQQQ R    qsH!E>> F4"F//F4!G"" H,"HH(J J>"J99J>ch|-t|r d}||d|iddSdSdS)NzMerror: hoster cannot manage package limits for reseller's package %(package)srRrL)rr4)r+rr_r~rss r,rz8CloudlinuxPackages._check_hoster_permissions_for_packagesh  $=m$L$L =G  G.7-F"H"H I I I I I   r.Fsuccessct|tr)||tjdt ||jp|dS)z Output data wrapper :param: `dict` data - data for output to stdout :param: `bool` force_json - always output json format )r0 timestampN)rkrnupdatetimer r$)r+r? force_jsonr0s r,r{zCloudlinuxPackages._print_datasT dD ! ! F KK6 DD E E Et}: ;;;;;r.rc~|jr9|dtjit|dnh t t |d|dizn-#t$r }t d|d|dYd}~nd}~wwxYwtj |dS) z Print error and exit :param dict message: Dictionary with keys "result" as string and optional "context" as dict rTr0rMzError: z []N) r$rrr printrlr6KeyErrorsysexit)r+rs error_coders r,r4z"CloudlinuxPackages._error_and_exit$s = 1 NNK5 6 6 6 Wd + + + + 1c'(+,,w{{9b/I/IIJJJJ 1 1 1///W///00000000 1 s9A<< B&B!!B&N)Fr)r) __name__ __module__ __qualname____doc__ror-r<r5r9r8rr{r4rDr.r,rrsxwwLiii(TTTl555nIII<<<<      r.r) rrclcommon.constrclcommon.cpapirrrr clcommon.librr cli_utilsr r cllicenser cllimitsr cllimits.clquota_librrr clpackagesr lvectllibrrrcl_packages_arg_parserrrDr.r,rs? """"""cccccccccccc9999999966666666******$$$$$$UUUUUUUUUU$$$$$$EEEEEEEEEEAAAAAAWWWWWWWWWWr.