§
?r5j. ã ó` — d Z ddlmZ ddlmZ ddlZn
# e$ r dZY nw xY wd„ Zd„ Zd„ Z d „ Z
dS )
z2Kernel-side LVP/LVE operations via pylve bindings.é )ÚPyLveé )ÚLvdErrorNc óÈ — t €t d¦ « ‚t t ¦ « } | ¦ « | ¦ « st d¦ « ‚| S )z'Initialize and return a PyLve instance.Nzpylve module not availablezDkernel does not support per-domain limits (requires lve_lvp_create2))Úpylver r Ú
initializeÚdomains_supported)Úpys úpy/websiteisolation/limits.pyÚ get_pylver s^ € å€}ÝÐ3Ñ4Ô4Ð4Ý �u‰Œ€B؇M‚M�O„O€OØ
×ÒÑ!Ô!ð 5Ýð 4ñ 5ô 5ð 5à
€Ió c óZ — | ¦ « }d|v rt |d ¦ « |_ d|v rt |d ¦ « |_ d|v rt |d ¦ « |_ d|v rt |d ¦ « |_ d|v rt |d ¦ « |_ |S )z*Create liblve_settings from a limits dict.ÚcpuÚpmemÚioÚnprocÚiops)Úliblve_settingsÚintÚls_cpuÚ
ls_memory_phyÚls_ioÚls_nprocÚls_iops)r
ÚlimitsÚsettingss r Úsettings_from_limitsr s € à×!Ò!Ñ#Ô#€HØ�€€Ý˜f UœmÑ,Ô,ˆŒØ
�ÐÐÝ!$ V¨F¤^Ñ!4Ô!4ˆÔ؈v€~€~ݘV Dœ\Ñ*Ô*ˆŒØ�&ÐÐÝ w¤Ñ0Ô0ˆÔØ
�ÐÐݘv fœ~Ñ.Ô.ˆÔØ€Or
c óD — | j | j | j | j | j dœS )z2Convert liblve_settings to a dict of limit fields.)r r r r r )r r r r r )r s r Úsettings_to_dictr . s/ € ð ŒØÔ&ØŒnØÔ"ØÔ ðð ð r
c ó0 — t j | |¦ « }|S )zÀCall pylve.lve_lvp_setup directly, bypassing the lveapi wrapper.
The lveapi wrapper iterates /proc/lve/resellers/ which doesn't exist
for nested domain LVPs (they are leaf containers).)r Ú
lve_lvp_setup)Ú domain_idr Úrcs r Úlvp_setup_directr$ 9 s € õ
Ô ˜Y¨Ñ 1Ô 1€BØ
€Ir
)Ú__doc__Úlve_utils.pylve_wrapperr Ú
exceptionsr r ÚImportErrorr r r r$ © r
r ú