Mini Shell

Direktori : /lib/python3.6/site-packages/blivet/__pycache__/
Upload File :
Current File : //lib/python3.6/site-packages/blivet/__pycache__/fcoe.cpython-36.opt-1.pyc

3

{)cv�@s�ddlZddlmZddlmZddlmZddlZddlZddlZddlm	Z	ej
d�Zdad	d
�Z
Gdd�de�Ze�ZdS)
�N�)�errors)�udev)�util)�_ZblivetFcCsHts:tjddg�dadtj�kr:tjd�tjddg�tjdtj�S)NZmodprobeZlibfcT�bnx2xzfcoe: loading bnx2fc�bnx2fcz/sys/module/libfc)	�_fcoe_module_loadedr�run_programZlsmod�log�info�os�access�X_OK�rr�/usr/lib/python3.6/fcoe.py�has_fcoe!s
rc@sleZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
ddd�Zdd�Zdd�Z
ddd�ZdS)�FCoEa� FCoE utility class.

        This class will automatically discover and connect to EDD configured
        FCoE SAN's when the startup() method gets called. It can also be
        used to manually configure FCoE SAN's through the add_san() method.

        As this class needs to make sure certain things like starting fcoe
        daemons and connecting to firmware discovered SAN's only happens once
        and as it keeps a global list of all FCoE devices it is
        implemented as a Singleton.

        .. warning::
            Since this is a singleton class, calling deepcopy() on the instance
            just returns ``self`` with no copy being created.
    cCsd|_d|_g|_g|_dS)NF)�started�lldpad_started�nicsZ
added_nics)�selfrrr�__init__?sz
FCoE.__init__cCs|S)Nr)rrrr�__call__Fsz
FCoE.__call__cCs|S)Nr)rZ	memo_dictrrr�__deepcopy__IszFCoE.__deepcopy__cCstjd�tj�dS)N�
)�time�sleeprZsettle)rrrr�
_stabilizeMs
zFCoE._stabilizecCs�ytjddg�}Wn.tk
r@}ztjd|j�dSd}~XnX|j�jd�\}}}|sd|dkrxtjd|j��dS|j	|�dk}tjd	||�|j
||d
d�dS)
Nz/usr/libexec/fcoe/fcoe_edd.shz-iz Failed to read FCoE EDD info: %s�=ZNICzNo FCoE EDD info found: %srrz(FCoE NIC found in EDD: %s, using dcb: %sT)�dcb�	auto_vlan)rr)rZcapture_output�OSErrorrr�strerror�strip�	partition�rstrip�
_iface_driver�add_san)rZbuf�e�keyZ_equals�valr rrr�
_start_eddRszFCoE._start_eddcCs&|jr
dSt�sdS|j�d|_dS)NT)rrr,)rrrr�startupcszFCoE.startupcCs$|jr
dStjdddg�d|_dS)N�	systemctl�startzlldpad.serviceT)rrr
)rrrr�
_start_lldpadmszFCoE._start_lldpadFTcCszt�stjtd���tjd|||�d}d}d}|�rd}d}|j�dddgfd	d
d|dd
gfdd
d|ddddgfdd
d|ddddgfg}	x`|	D]X\}}
tj|
�\}}x6|dkr�|d8}t	j
d�|dkr�Ptj|
�\}}q�W|dkr�Pq�W|dk�rt	j
d�ntjd|�|dk�r>|j|||d�tjdddg�\}}|dk�rd|j�|j
j|||f�ntjd||�|}|S)z�Activates FCoE SANs attached to interface specified by nic.

           Returns error message, or empty string if succeeded.
        zFCoE not availablez8Activating FCoE SAN attached to %s, dcb: %s autovlan: %sr��<zwaiting for lldpad to be readyZlldptoolz-pzretrying to turn dcb onZdcbtoolZscr Zonzretrying to set up dcb with pfcZpfcze:1za:1zw:1zretrying to set up dcb for fcoezapp:fcoerzTimed out when %s)r r!r.Zrestartzfcoe.servicez!Activating FCoE SAN failed: %s %s)rrZ	FCoEErrorrrrr0rZrun_program_and_capture_outputrr�write_nic_fcoe_cfgrr�append�debug)r�nicr r!Zrc�outZ	error_msgZtimeoutZtimeout_msgZcommand_list�cmdrrrr(tsL






zFCoE.add_sancCsXytjd|�}Wn4tk
rF}ztjd||�d}WYdd}~XnXtjj|�}|S)Nz/sys/class/net/%s/device/driverz"Can't find driver of device %s, %sr1)r
�readlinkr"rr5�path�basename)rr6Zdpathr)Zdriverrrrr'�szFCoE._iface_drivercCs8|js
dS|d}tjj|�r(tj|�tjd|�dS)Nz	/etc/fcoe)rr
r:�isdir�shutilZrmtreeZcopytree)r�rootZdest_cfg_dirrrr�write�s
z
FCoE.writeNr1c

Cs�|d}tjj|d�}tj|tj�r4t|d�j�}	nd}
|
jd�}	ttjj|d|�d���}|jd�x�|	D]�}|j	�j
d	�s�|j
d
�r�|r�d}q�d}nJ|j
d
�r�|r�d}q�d}n0|j
d�r�|r�d}q�d}n|j
d�r�|r�d|}|j|�qlWWdQRXdS)Nz	/etc/fcoezcfg-ethx�rzCFCOE_ENABLE="yes"
DCB_REQUIRED="yes"
AUTO_VLAN="yes"
MODE="fabric"
Tzcfg-%s�wz"# Generated by Anaconda installer
�#ZFCOE_ENABLEzFCOE_ENABLE="yes"
zFCOE_ENABLE="no"
ZDCB_REQUIREDzDCB_REQUIRED="yes"
zDCB_REQUIRED="no"
Z	AUTO_VLANzAUTO_VLAN="yes"
zAUTO_VLAN="no"
ZMODEz
MODE="%s"
)r
r:�joinr�R_OK�open�	readlines�
splitlinesr?r$�
startswith)
rr6r r!�enable�moder>Zcfg_dirZexample_cfg�linesZanaconda_cfgZnew_cfg�linerrrr3�s4






zFCoE.write_nic_fcoe_cfg)FT)TTTNr1)�__name__�
__module__�__qualname__�__doc__rrrrr,r-r0r(r'r?r3rrrrr-s

8
r)r
r1rrrZloggingrr=Zi18nrZ	getLoggerrr	r�objectrZfcoerrrr�<module>s
=