66 "W9 ddlmZmZddlmZmZddlmZmZmZm Z m Z ddl m Z ddl mZddlmZdZhd Zhd Zd hZd d hZeezezezZedhzZee jrehdzZnedhzZehdzZgdZdZdZeidedededede dedeeddded ed!e deed"ed#d$ed%e deee d&eed'd(d)d*e deee d+d,d-e deed.d/d0ed1e deed2d/d3e ded4e deid5e ded#d6e dd7ed8d9e dd:ed;d<e dd=ed>d?ed@e dedAe dedBe dedCe dedDe dedEe dedFe dedGe deee dHdIdJe deee dKdLdMe dedNeZ!dOZ"dP#dQe"D$Z%GdRdSZ&GdTdUe&Z'dS)V)TupleUnion) DocoptExitdocopt)SchemaAndUseOr SchemaError)Feature)is_panel_feature_supported) VALUES_STRzcloudlinux-limits>ioiopspmemvmemnprocspeed maxEntryProcs>rrrrrrinodesz mysql-cpuzmysql-ioall>cagefs mysql-govmysql-restrictr>mysql-unrestrict-allrr)--mysql-restrict--mysql-unrestrict-all --mysql-gov --mysql-io --mysql-cpu--cagefs--inodescRtt|tz dkS)z, Validate limits keys for --default r)lensetAVAILABLE_DEFAULTSkeyss py/cllimits/lib/arg_parsers.py_default_keys_validater+#s# s4yy-- . .! 33ctt|dttz dkS)z Validate limits keys ,r)r%r&splitAVAILABLE_LIMITSr(s r*_limits_keys_validater1*s7 s4::c??##c*:&;&;; < < AAr,r&getdisable-reseller-limitsenable-reseller-limitsz--pmem-lower-boundN--jsonc|SNxs r*r;:s!r,z4use --json option, other modes currently unsupported)errorz--human-readable-numbers --unlimited --defaultc,|dS)Nr.)r/r9s r*r;r;=sAGGCLLr,z Invalid keys--save-all-parameters--lve-idc(t|dkSNrintr9s r*r;r;?sQ1r,cDt|Sr7)strlowerr9s r*r;r;@sSVV\\^^r,c|dkS)Ndefaultr8r9s r*r;r;As ir,z8--lve-id must be non-negative integer value or 'default'z --reseller-idc(t|dkSrCrDr9s r*r;r;Csc!ffkr,z0--reseller-id must be non-negative integer value--reseller-namec,| Sr7isdigitr9s r*r;r;Esqyy{{?r,zInvalid reseller namez--all--for-resellerc,| Sr7rNr9s r*r;r;Gsaiikk/r, --username--domain--limitsrc |dvS)N)ignoredwatchedr8r9s r*r;r;Ks a+A&Ar,z: 'ignored', 'watched'r"c |dvS)N)enableddisabledr8r9s r*r;r;Ms 1(?#?r,z: 'enabled', 'disabled'rc |dvS)N) restricted unrestrictedr8r9s r*r;r;Os 10N+Nr,z: 'restricted', 'unrestricted'rz--speedz--pmemz--vmemz--nprocz--ioz--iopsz--maxEntryProcsr!c|dkSrCr8r9s r*r;r;Ys AFr,z.--mysql-cpu must be non-negative integer valuer c|dkSrCr8r9s r*r;r;]s 16r,z---mysql-io must be non-negative integer valuer#--help) zUset [--json] (--lve-id | --username ) (--unlimited) [--for-reseller ]zZset [--json] (--lve-id | --username | --reseller-name ) (--default )zset [--json] (--lve-id | --username ) (--mysql-gov | --cagefs | --mysql-restrict )z%set [--json] (--mysql-unrestrict-all)zset [--json] (--lve-id | --username ) [--speed --io --nproc --pmem --vmem --iops --inodes --maxEntryProcs --mysql-cpu --mysql-io --save-all-parameters]zset [--json] (--lve-id | --username | --reseller-name ) [--speed --io --nproc --pmem --vmem --iops --maxEntryProcs ] [--default ] [--for-reseller ]z2set [--json] (--reseller-name ) (--unlimited)z'set [--json] (--pmem-lower-bound=)z[get] [--json] [--lve-id | --username | --reseller-name | --domain ] [--limits=] [--human-readable-numbers] [--for-reseller ]zNdisable-reseller-limits (--reseller-id | --reseller-name ) [--json]zWenable-reseller-limits ((--reseller-id | --reseller-name ) | --all) [--json]z (-h | --help)z c#.K|]}td|VdS) N) PROG_NAME).0cmds r* rfs0AAs**S**AAAAAAr,c @eZdZdZdedZdZedede de e effdZ de de e effd Z d ede e effd Zde d e de eeffd ZedefdZeded ede eeffdZdde d e de e eeefffdZdS)CloudlinuxLimitsOptsParserz Parse arguments for cloudlinux-limits command :param argv: sys.argv :param _is_json_need: sys.argv contains --json key :return cortege: (error_flag, s_message) 5Utility to get/set any Cloudlinux limits Usage: a> Options: --json Return data in JSON format. --lve-id LVE id. will display record only for that LVE id. --username Execute command only for specific user. --reseller-name Execute command only for specific reseller. --reseller-id Execute command only for specific reseller. --all Execute command for all resellers --for-reseller Use supplied reseller for get/set data. --domain Show data only for specific domain --limits Available keys: speed,nproc,pmem,vmem,maxEntryProcs,io, iops,mysql-gov,mysql-cpu,mysql-io,cagefs,inodes --human-readable-numbers Return PMEM and VMEM limits in KBytes, MBytes or GBytes --unlimited Set all limits to unlimited. --default [limits] Reset limits to the Package defaults. List of comma-separated limits to reset them to default or "all" --mysql-gov Monitor or ignore by MySQL governor. --cagefs Enable or disable CageFS for a user. --mysql-restrict <[un]restricted> Set user restrict status with dbctl (restricted or unrestricted). --mysql-unrestrict-all Unrestrict all restricted users with dbctl. --speed Limit CPU usage for LVE | LVP. --pmem Limit physical memory usage for applications inside LVE | LVP. --vmem Limit virtual memory for applications inside LVE. --nproc Limit number of processes for LVE | LVP. --io Define io limits for LVE | LVP (KB/s). --iops Limit io per second for LVE | LVP. --maxEntryProcs Limit number of entry processes for LVE | LVP. --mysql-cpu Set MySQL governor CPU limit (pct). --mysql-io Set MySQL governor IO limit (read + write MB/s) --inodes Set inode limits. N - soft, M - hard. --pmem-lower-bound Set the PMEM lower bound for the limits. --save-all-parameters Save all parameters even if they match with defaults settings. -h, --help Show this help message and exit )r&r2r3r4optionargvreturncd}d}|D]=}||rd}|s!tD]}||r|}>|r |rdd|dfSdS)z Checks options compatibility with admin options :return: Cortege (flag, message) flag: True/False - compatible/not compatible message - comment if flag is False FTzERROR: option 'z)' is not compatible with '--for-reseller'Trn) startswithADMIN_ONLY_OPTIONS)rjrk option_foundadmin_option_namearg admin_options r*!_is_option_compatible_with_adminsz> G w;  &$.$//DD & & &_N :&4>"99~% % % %  & 77== G w; Rxs6AActS)zQ Returns schema that should be used to validate parsed arguments ) global_schemar8r,r* _get_schemaz&CloudlinuxLimitsOptsParser._get_schemas r,schemac ||}n(#t$r}it|fcYd}~Sd}~wwxYw|dfS)z@ Validate parsed arguments with provided schema Nrn)validater rG)rr|es r*_validate_schemaz+CloudlinuxLimitsOptsParser._validate_schemasa  ??4((DD   s1vv:       Rxs =8==Fc|||\}sd|fStfd|jDsdd<|}||\}sd|fSdfS)zF Parses and validates arguments passed to the utility Fc3BK|]}|VdSr7)r2)rdcommandr|s r*rfz8CloudlinuxLimitsOptsParser.parse_args..s/BB488G$$BBBBBBr,Tr2)ranycommandsrr)rxrkrrzrr|s @r* parse_argsz%CloudlinuxLimitsOptsParser.parse_argss**499 g "'> !BBBBDMBBBBB DK!!##--fd;; g "'> !Tzr,NF)__name__ __module__ __qualname____doc__USAGErr staticmethodrGlistrboolrvr{dictrrrrrrrr8r,r*rhrhs % %%%IfSH#TeDRUIFV\*&$&5s;K&&&&%c :J$%c :J*\ tdCi8H\tduT5QTVZQZK[E[?\r,rhc eZdZdedededededed ZdZd ed eee ffd Z d e d eee ffd Z e d efdZdd eded eeee e ffffd ZxZS)CloudlinuxLimitsNoLveOptsParserrizT set [--json] (--lve-id | --username ) (--cagefs ) zD set [--json] (--lve-id | --username ) (--unlimited) zH set [--json] (--lve-id | --username ) (--default ) z] set [--json] (--lve-id | --username ) [--inodes --save-all-parameters] z[ [get] [--json] [--lve-id | --username | --domain ] [--limits=] a (-h | --help) Options: --json Return data in JSON format. --lve-id LVE id. will display record only for that LVE id. --username Execute command only for specific user. --cagefs Enable or disable CageFS for a user. --unlimited Set supported limits to unlimited. --default [limits] Reset supported limits to the Package defaults. List of comma-separated limits to reset them to default or "all" --domain Show data only for specific domain --limits Available keys: inodes --inodes Set inode limits. N - soft, M - hard. --save-all-parameters Save all parameters even if they match with defaults settings. -h, --help Show this help message and exit )r&r2rkrlcdSNror8)rxrks r*r{z=CloudlinuxLimitsNoLveOptsParser._perform_checks_before_docoptAxr,r|cdSrr8r~s r*rz r2r&r`r5r"rSr#rTrAr>rRr=r@c$i|] \}}|v || Sr8r8)rdrjvalueschema_optionss r* z?CloudlinuxLimitsNoLveOptsParser._get_schema..Ns4   +fe'' E'''r,)rritemsr)optionsrs @r*rz+CloudlinuxLimitsNoLveOptsParser._get_schemaIs\qqq    /rs- %%%%%%%%44444444444444""""""555555  VVVNNN z#Z0#&::=QQTff#ug-gk**9%(Q(Q(QQ+xj8/2i2i2ii===444BBB2 42 42t2d 2 ""T3-- 2  cc$ +abbb 2242D##cc"8"899;QRRZhiii2T24SSXX'<'<==3ss3344//11SUUU2RRcc##c((,A,ABBPRRR2"rr$C)B)B C CKbccc#2$ T%2&bbss3(A(ABBJabbb'2(""T3--)2*4 +22,4.nEEE-2.22dAA)AAACCC/224??&???AAA3264!N!N$.!N!N!NPPP72:d;2<rr$}}=2> bbsmm?2@ bbsmmA2Brr$}}C2D BBtSMME2F bbsmmG2Hrr$}}I2J22dCCC*:*:;;LNNNK2R""T33ss3xx)9)9::JLLLS2`4 a2b dc2222 h >  AAjAAAAAGGIIXXXXXXXXv88888&@88888r,