Your IP : 216.73.217.13


Current Path : /proc/thread-self/root/usr/share/netplan/netplan/cli/__pycache__/
Upload File :
Current File : //proc/thread-self/root/usr/share/netplan/netplan/cli/__pycache__/utils.cpython-38.pyc

U

�]a�/�@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	ZdZ
dZGdd�de�Z
Gdd�dej�Ze�ej�d��Zeje�e�e��gej_ejej_ejgej_ejej_d	d
�Zdd�ZGd
d�d�Zdd�Zdd�Zdd�Z dd�Z!dd�Z"dd�Z#d4dd�Z$dgfdd�Z%d d!�Z&d"d#�Z'd$d%�Z(d5d&d'�Z)d(d)�Z*d*d+�Z+d,d-�Z,d.d/�Z-d0d1�Z.Gd2d3�d3ej/�Z0dS)6�NzNetworkManager.servicez+snap.network-manager.networkmanager.servicec@seZdZdS)�LibNetplanExceptionN)�__name__�
__module__�__qualname__�rr�'/usr/share/netplan/netplan/cli/utils.pyr#src@s(eZdZdejfdejfdejfgZdS)�_GErrorZdomain�code�messageN)rrr�ctypesZc_uint32�c_int�c_char_pZ_fields_rrrrr'sr�netplancCsnt��t�t��}tt�|��t�|���}|sDt	|j
j�d���t�
t�|��|rjt	|j
j�d���dS)N�utf-8T)�libZnetplan_clear_netdefsr�POINTERr�bool�netplan_parse_yaml�encodeZbyref�	Exception�contentsr
�decodeZnetplan_finish_parse)�path�errZretrrr�
netplan_parse2srcCs&t�|��|���}|r"|�d�SdS�Nr)r�netplan_get_filename_by_idrr)Z	netdef_id�rootdir�resrrrr?src@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_NetdefIdIteratorcCst�|�d��|_dSr)r�#_netplan_iter_defs_per_devtype_initr�iterator)�self�devtyperrr�__init__Esz_NetdefIdIterator.__init__cCst�|j�dS�N)r�#_netplan_iter_defs_per_devtype_freer!�r"rrr�__del__Hsz_NetdefIdIterator.__del__cCs|Sr%rr'rrr�__iter__Ksz_NetdefIdIterator.__iter__cCst�|j�}|dkrt�|Sr%)r�#_netplan_iter_defs_per_devtype_nextr!�
StopIteration)r"Z
next_valuerrr�__next__Nsz_NetdefIdIterator.__next__N)rrrr$r(r)r,rrrrrDsrcCs�ttd�std��tjgtj_tjtj_tjgtj	_tjtj	_tjgtj
_dtj
_tjgtj_tjtj_t�|�
d��tt|��}dd�|D�S)Nr z�
            The current version of libnetplan does not allow iterating by devtype.
            Please ensure that both the netplan CLI package and its library are up to date.
        rcSsg|]}t�|��d��qS)r)r�_netplan_netdef_idr)�.0Zndrrr�
<listcomp>isz/netplan_get_ids_for_devtype.<locals>.<listcomp>)�hasattrrrrr
r �argtypesZc_void_p�restyper*r&r-�process_yaml_hierarchyr�listr)r#rZndsrrr�netplan_get_ids_for_devtypeUs



r5cCstj�dd�S)NZNETPLAN_GENERATE_PATHz/lib/netplan/generate)�os�environ�getrrrr�get_generator_pathlsr9cCstjdddtgtjd�dkS)N�	systemctl�--quietz
is-enabled)�stderrr)�
subprocess�call�NM_SNAP_SERVICE_NAME�DEVNULLrrrr�is_nm_snap_enabledpsrAcCs,d}t�rd}tj|g|tjtjd�dS)N�nmcliznetwork-manager.nmcli��stdoutr<)rAr=�
check_callr@)�argsZbinary_namerrrrBtsrBc	Cs2ztdg�WdSttjfk
r,YdSXdS)z"Check if NetworkManager is runningZgeneralTFN)rB�OSErrorr=ZSubprocessErrorrrrr�
nm_running}s

rHcCslt�d�}t�}|D]R}t|d��>}|D]2}|�|�}|r(|�tt�||�d����q\q(W5QRXq|S)Nz^interface-name=(.*)$�r�)	�re�compile�set�open�match�update�fnmatch�filter�group)�pathsZdevicesZpat�
interfacesr�f�line�mrrr�
nm_interfaces�s

rYFcCs<t}d|g}|s|�d�t�r$t}|�|�t�|�dS)Nr:�
--no-block)�NM_SERVICE_NAME�appendrAr?r=rE)�action�syncZservice_name�commandrrr�systemctl_network_manager�s

r`cCsBd|g}|s|�d�|�d�|D]}|�|�q$t�|�dS)Nr:rZzsystemd-networkd.service)r\r=rE)r]r^Zextra_servicesr_�servicerrr�systemctl_networkd�s

rbcCst�ddd|g�dkrdSdS)z4Return True if at least one matching unit is runningr:r;z	is-activerTF)r=r>)Zunit_patternrrr�systemctl_is_active�srccCst�ddg�dS)zEReload systemd unit files from disk and re-calculate its dependenciesr:z
daemon-reloadN)r=rErrrr�systemctl_daemon_reload�srdcCs tjddd|gtjtjd�dS)z8Flush all IP addresses of a given interface via iproute2Zip�addr�flushrCN)r=rEr@�Zifacerrr�
ip_addr_flush�srhc
Cstj�d|�}|r�zTttj�|d���8}|����}|dkrZt�d||�W5QR�WdSW5QRXWn:tk
r�}zt�	d|t
|��WY�dSd}~XYnXz(tj�tj�|dd��}tj�|�}Wn>tk
�r}zt�d||t
|��WY�dSd}~XYnX|S)	Nz/sys/class/netZ	operstateZdownz'device %s operstate is %s, not changingz$Cannot determine operstate of %s: %sZdevice�driverz0Cannot replug %s: cannot read link %s/device: %s)
r6r�joinrN�read�strip�logging�debug�IOError�error�str�realpath�basename)�	interfaceZ	only_downZdevdirrV�state�eri�driver_namerrr�get_interface_driver_name�s$rxcCs&t�|��tjig�d}|�dd�S)Nrre�)�	netifacesZifaddressesr8ZAF_LINK)rt�linkrrr�get_interface_macaddress�sr|cCst�||�Sr%)rQ�fnmatchcase)rtZ
match_namerrr�is_interface_matching_name�sr~cCst|�}t�||�Sr%)rxrQr})rtZmatch_driverrwrrr�!is_interface_matching_driver_name�srcCst|�}|��|��kSr%)r|�lower)rtZ	match_mac�
macaddressrrr� is_interface_matching_macaddress�sr�cs�t�t�st���dd�r$��d�nd}t�||�}t|�dkr`��d�r`tt�fdd�|��}t|�dkr���d�r�tt�fd	d�|��}t|�dkr�t�	|�dS|d
S)N�nameF�*rJr�cst|��d��S)Nr�)r�r8rg�rOrr�<lambda>��z%find_matching_iface.<locals>.<lambda>ricst|��d��S)Nri)rr8rgr�rrr�r�r)
�
isinstance�dict�AssertionErrorr8rQrR�lenr4rm�info)rUrOZ	name_globZmatchesrr�r�find_matching_iface�s
r�c@sFeZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Zdd�Z	dS)�NetplanCommandTFcCs�||_||_||_||_d|_d|_d|_i|_d|_d|_	t
jdtj
d|f|dd�|_|jjdddd	�|s�|jjd
ddd
�|_|jjdddd�}|j|jd�dS)NFz%s %srT)�prog�description�add_helpz--debug�
store_truezEnable debug messages)r]�helpzAvailable commandsry�
subcommand)�title�metavar�destr�zShow this help message)r�r�)�func)�
command_idr��leaf_command�testing�_argsrn�commandclass�subcommandsr�r��argparse�ArgumentParser�sys�argv�parser�add_argumentZadd_subparsers�
subparsers�
add_parser�set_defaults�print_usage)r"r�r��leafr�Zp_helprrrr$s6�
���zNetplanCommand.__init__cCs
||_dSr%)r�)r"rFrrrrP$szNetplanCommand.updatecCs>|jj|j|d�\}|_|js:|js:tdtjd�|��dS)N)rF�	namespacezYou need to specify a command��file)	r�Zparse_known_argsr�r�r��printr�r<r�)r"�nsrrr�
parse_args'szNetplanCommand.parse_argscCs8|jr|j�|j�|jr,d|jkr,|��|��dS)Nr�)r�rPr�r�r�r�r'rrr�run_command.s
zNetplanCommand.run_commandcCs |jjtjd�t�tj�dS)Nr�)r�Z
print_helpr�r<�exitr6�EX_USAGEr'rrrr�8szNetplanCommand.print_usagecCs�|�}i|j|<||j|d<||j|d<|jrDtj�dd�sDdS|jj|j|j|jdd�}|j	|j
|d�||j|d<dS)N�class�instanceZENABLE_TEST_COMMANDSF)r�r�r�)r�r�r�)r�r�r6r7r8r�r�r�r�r��run)r"r�r�r��prrr�_add_subparser_from_class<s

�z(NetplanCommand._add_subparser_from_classcCs@ddl}|�|�D](\}}|�|�rt|t�r|�||�qdS)Nr)�inspectZ
getmembersZisclass�
issubclassr�r�)r"Z
submodulesr�r��objrrr�_import_subcommandsNsz"NetplanCommand._import_subcommandsN)TF)
rrrr$rPr�r�r�r�r�rrrrr�	s

r�)F)F)1r�r6rmrQr�r=rzrKrZctypes.utilr[r?rrZ	StructurerZCDLL�utilZfind_libraryrr
rrr1rr2r3rrrr5r9rArBrHrYr`rbrcrdrhrxr|r~rr�r�Z	Namespacer�rrrr�<module>sN