Current File : //usr/share/netplan/netplan_cli/cli/__pycache__/utils.cpython-312.pyc
�

Z9
g�1�	���ddlZddlZddlZddlZddlZddlZddlZddlZddlm	Z	ddl
mZddlm
Z
mZdZdZdZd	Zd
ddd
ddddd�ZeeefZd�Zd�Zd�Zdedefd�Zd�Zd�Zdedefd�Zdeddfd�Zd7d�Z d7ded ed!e!fd"�Z"d#�Z#d$�Z$d%�Z%d&�Z&d'�Z'd(�Z(d)�Z)d*�Z*d7d+�Z+dede	efd,�Z,dede	efd-�Z-deefd.�Z.dede	efd/�Z/d0efd1�Z0d2ede!fd3�Z1de2fd4�Z3Gd5�d6ejh�Z5y)8�N)�Optional�)�ConfigurationError)�
NetDefinition�NetplanExceptionzNetworkManager.servicez+snap.network-manager.networkmanager.servicez/etc/iproute2/rt_tablesz/usr/share/iproute2/rt_tables�unspec�default�main�local���)rrr
rrr	r
rc�B�tjjdd�S)N�NETPLAN_GENERATE_PATHz/usr/libexec/netplan/generate)�os�environ�get���+/usr/share/netplan/netplan_cli/cli/utils.py�get_generator_pathr+s��
�:�:�>�>�1�3R�S�Src�b�tjdddtgtj��dk(S)N�	systemctl�--quiet�
is-enabled)�stderrr)�
subprocess�call�NM_SNAP_SERVICE_NAME�DEVNULLrrr�is_nm_snap_enabledr!/s*���?�?�K��L�BV�W�`j�`r�`r�s�wx�x�xrc�t�tjdg|ztjtj��y)N�nmcli��stdoutr�r�
check_callr ��argss rr#r#3s)�����7�)�d�*�:�3E�3E�j�N`�N`�arr)�returnc�8�tjdg|zd��S)Nr#T��text)r�check_outputr(s r�	nmcli_outr/9s���"�"�G�9�t�#3�$�?�?rc�\�	tdg�y#ttjf$rYywxYw)z"Check if NetworkManager is running�generalTF)r#�OSErrorr�SubprocessErrorrrr�
nm_runningr4?s1���
�y�k�����Z�/�/�0����s��+�+c
�F�tjd�}t�}|D]p}t|d�5}|D]T}|j	|�}|s�|jtt
j||jd����nddd��r|S#1swY�~xYw)Nz^interface-name=(.*)$�r�)	�re�compile�set�open�match�update�fnmatch�filter�group)�paths�devices�pat�
interfaces�path�f�line�ms        r�
nm_interfacesrIIs���
�*�*�,�
-�C���J����
�$��_�	���
���I�I�d�O����%�%�c�'�.�.��!�'�'�!�*�*M�&N�O��
�	�	����	�	�s�B�AB�B 	�	interfacec	��tdddddd|g�}|j�jd�}|d}|d	k7r|Sd
S)Nz-m�tabularz-fzGENERAL.CONNECTION�device�show�
r7z--�)r/�strip�split)rJ�output�lines�
connections    r�nm_get_connection_for_interfacerVWsN��
��i��/C�X�v�W`�a�
b�F��L�L�N� � ��&�E��q��J�#�t�+�:�3��3rrUc�T�	tdd|g�y#tj$rYywxYw)NrU�up)r#r�CalledProcessError)rUs r�nm_bring_interface_uprZ^s.��
�
�|�T�:�.�/���(�(�
��
�s��'�'c�^�t�rt|tg|�St|tg|�S�N)r!rr�NM_SERVICE_NAME)�action�syncs  r�systemctl_network_managerr`es/������"6�!7��>�>��V�o�.��5�5rr^�servicesr_c��t|�dk\r>d|g}|s|jd�|j|�tj|�yy)Nr7rz
--no-block)�len�append�extendrr')r^rar_�commands    rrrmsF��
�8�}�����'����N�N�<�(����x� ����g�&�rc��t�}tjgd�d��}|j�D]Q}|j	�jd�}|dj
�s�6|ddvs�>|j|d��S|S)N)�
networkctlz
--no-pagerz--no-legendTr,� r���)�	unmanaged�linger)r:rr.�
splitlinesrQrR�	isnumeric�add)rD�outrG�ss    r�networkd_interfacesrrys{����J�
�
!�
!�"M�TX�
Y�C���� �!���J�J�L���s�#���Q�4�>�>���"��-D� D��N�N�1�Q�4� �!��rc�2�tjddg�y)Nrh�reload�rr'rrr�networkctl_reloadrv�s�����<��2�3rc�h�t|�dk\r$tjddgt|�z�yy)Nr7rh�reconfigure)rcrr'�list)rDs r�networkctl_reconfigurerz�s0��
�:��!�����|�]�;�d�:�>N�N�O�rc�>�tjddd|g�dk(ryy)z4Return True if at least one matching unit is runningrrz	is-activerTF)rr)�unit_patterns r�systemctl_is_activer}�s"������Y��\�J�K�q�P��rc��tjdd|gtjtjd��}|jdkDrd|jvryy)z5Return True if output is "masked" or "masked-runtime"rrT�r%rr-r�maskedF)r�run�PIPE�
returncoder%�r|�ress  r�systemctl_is_maskedr��sH��
�.�.�+�|�\�B� *���
���"�$�C��~�~���h�#�*�*�4��rc��tjdd|gtjtjd��}|jdk7ryy)z7Return True if returncode is other than "not-found" (4)rrTr�F)rr�r�r�r�s  r�systemctl_is_installedr��s=��
�.�.�+�|�\�B� *���
���"�$�C��~�~����rc�2�tjgd��y)zEReload systemd unit files from disk and re-calculate its dependencies)rz
daemon-reloadz--no-ask-passwordNrurrr�systemctl_daemon_reloadr��s�����M�Nrc�t�tjddd|gtjtj��y)z8Flush all IP addresses of a given interface via iproute2�ip�addr�flushr$Nr&)�ifaces r�
ip_addr_flushr��s*�����4���%�8��AS�AS�\f�\n�\n�orc	���tjjd|�}|rx	ttjj|d��5}|j	�j�}|dk7r!t
jd||�	ddd�y	ddd�	tjjtjj|dd��}tjj|�}|S#1swY�ixYw#t$r*}t
jd|t|��Yd}~yd}~wwxYw#t$r+}t
jd||t|��Yd}~yd}~wwxYw)	Nz/sys/class/net�	operstate�downz'device %s operstate is %s, not changingz$Cannot determine operstate of %s: %srM�driverz0Cannot replug %s: cannot read link %s/device: %s)
rrE�joinr;�readrQ�logging�debug�IOError�error�str�realpath�basename)rJ�	only_down�devdirrF�state�er��driver_names        r�get_interface_driver_namer��s'��
�W�W�\�\�*�I�
6�F��	��b�g�g�l�l�6�;�7�8�
 �A�������(���F�?��M�M�"K�Y�X]�^��	
 �
 �"�
 �����!�!�"�'�'�,�,�v�x��"J�K���g�g�&�&�v�.��
��!
 �
 ��
�	��M�M�@�)�S�QR�V�T���	�����
�
�H�)�U[�]`�ab�]c�d����sN�)D�
<C;�	D�D�AD=�;D�D�	D:� D5�5D:�=	E1�!E,�,E1c��d}	tjdd|g�jd�}|jd�}t	|�dk(r/t|dj
��r|dj
�}|S#t$r|cYSwxYw)N�ethtoolz-P�utf-8z: rr7)rr.�decoderRrc�is_valid_macaddressrQ�	Exception)rJ�macrprRs    r�_get_permanent_macaddressr��s���
�C���%�%�y�$�	�&B�C�J�J�7�S���	�	�$����u�:��?�2�5��8�>�>�3C�D���(�.�.�"�C��J�����
��s�A5A;�;B	�B	c��	td|�d��5}|j�j�cddd�S#1swYyxYw#t$rYywxYw)Nz/sys/class/net/z/address)r;r�rQr�)rJrFs  r�_get_macaddressr��sP���
�O�I�;�h�7�
8�	$�A��6�6�8�>�>�#�	$�	$�	$������s*�A�9�	A�A�A�A�	A�Ac���	tjgd��jd�}tj|�}|D�cgc]}|d��	c}Scc}w#t
$rgcYSwxYw)N)r�z--json�linkr��ifname)rr.r��json�loadsr�)rp�out_jsonr�s   r�get_interfacesr��s\����%�%�&>�?�F�F�w�O���:�:�c�?��-5�6�E��h��6�6��6�����	��s#�?A�A�
A�A�A#�"A#c�6�t|�}|st|�}|Sr\)r�r�)rJr�s  r�get_interface_macaddressr��s��
#�I�
.�C���i�(���JrrDc����t�t�sJ��jsJ�tt	�fd�|��}t|�dk7rt
j|�y|dS)Nc�P���j|t|�t|���S)N)�
iface_name�iface_driver�	iface_mac)�_match_interfacer�r�)�itf�netdefs �r�<lambda>z%find_matching_iface.<locals>.<lambda>�s*���f�&=�&=��2�3�7�.�s�3�'>�'5�rr7r)�
isinstancer�
_has_matchryr?rcr��info)rDr��matchess ` r�find_matching_ifacer��sg����f�m�,�,�,�������6�5�7A�B�C�G��7�|�q�����W����1�:�r�
macaddressc�6�d}tj||�duS)NzT^[a-fA-F0-9][a-fA-F0-9](:[a-fA-F0-9][a-fA-F0-9]){5}((:[a-fA-F0-9][a-fA-F0-9]){14})?$)r8r<)r��MAC_PATTERNs  rr�r��s��h�K�
�8�8�K��,�D�8�8rc���i}t}tjj|�st}	t|d�5}|D]]}|j
�}t|�dk(s�"|dj�s�6|d|t|d�<t|d�||d<�_	ddd�|S#1swY|SxYw#t$r"tjd|�d��tcYSwxYw)Nr6rrr7z
Cannot open 'z
' for reading)�NEW_RT_TABLES_PATHrrE�exists�OLD_RT_TABLES_PATHr;rRrcrn�intr�r�r��RT_TABLES_DEFAULT)�lookup_tablerE�	rt_tablesrG�
split_lines     r�route_table_lookupr�s����L��D�
�7�7�>�>�$��!��
!�
�$��_�	E�	�!�
E��!�Z�Z�\�
��z�?�a�'�J�q�M�,C�,C�,E�7A�!�}�L��Z��]�!3�4�25�j��m�2D�L��A��/�	
E�	E���	E�����!��
�
��t�f�N�;�<� � �!�s:�B6�$B)� B)�4*B)�B6�)B3�.B6�3B6�6(C!� C!c�8�eZdZd	d�Zd�Zd�Zd�Zd�Zd�Zd�Z	y)
�NetplanCommandc�X�||_||_||_||_d|_d|_d|_d|_i|_d|_	d|_
tjtjd�d|��|d��|_|jj!ddd�	�|jj!d
dtj"�	�|s^|jj%ddd
��|_|j&j)ddd��}|j+|j,��yy)NFrriT)�prog�description�add_helpz--debug�
store_truezEnable debug messages)r^�helpz--breakpointzAvailable commandsrP�
subcommand)�title�metavar�destr�zShow this help message)r�r�)�func)�
command_idr��leaf_command�testing�_argsr��
breakpoint�commandclass�subcommandsr�r��argparse�ArgumentParser�sys�argv�parser�add_argument�SUPPRESS�add_subparsers�
subparsers�
add_parser�set_defaults�print_usage)�selfr�r��leafr��p_helps      r�__init__zNetplanCommand.__init__s%��$���&��� ��������
���
���� �����������	��-�-�c�h�h�q�k�:�3V�:E�7;�=���	
��� � ��<�&=�	!�	?���� � ���&.�&7�&7�	!�	9��"�k�k�8�8�?S�AC�,�9�X�D�O��_�_�/�/��<T�5M�0�O�F�
���T�%5�%5��6�
rc��||_yr\)r�)r�r)s  rr=zNetplanCommand.update8s	����
rc���|jj|j|��\}|_|js9|js,tdtj��|j�yyy)N)r)�	namespacezYou need to specify a command��file)	r��parse_known_argsr�r�r��printr�rr�)r��nss  r�
parse_argszNetplanCommand.parse_args;sW�����5�5�4�:�:�QU�5�V���D�J����t�'8�'8��1��
�
�C�����(9�rc��|jr%|jj|j�|jrd|jvr|j	�|j
r
t�|j
�y)Nr�)r�r=r�r�r�r�r��r�s r�run_commandzNetplanCommand.run_commandBsZ��������$�$�T�Z�Z�0�����4�:�:�!5������?�?��L��	�	�rc��|jjtj��tjt
j�y)Nr�)r��
print_helpr�r�exitr�EX_USAGErs rr�zNetplanCommand.print_usageNs+�������C�J�J��/�������rc��|�}i|j|<||j|d<||j|d<|jr!tjj	dd�sy|j
j
|j|j|jd��}|j|j|��||j|d<y)N�class�instance�ENABLE_TEST_COMMANDSF)r�r�r�)r�r�r�)r�r�rrrr�r�r�r�r�r�)r��namer�r	�ps     r�_add_subparser_from_classz(NetplanCommand._add_subparser_from_classRs����>��!#������*.������w�'�-5������z�*�����:�:�>�>�"8�$�?���O�O�&�&�x�':�':�3;�3G�3G�,4�,@�,@�05�
'�
7��	
���H�L�L�x��@�+,������x�(rc��ddl}|j|�D]:\}}|j|�s�t|t�s�)|j||��<y)Nr)�inspect�
getmembers�isclass�
issubclassr�r
)r��
submodulesrr�objs     r�_import_subcommandsz"NetplanCommand._import_subcommandsdsH��� �+�+�J�7�	:�I�D�#����s�#�
�3��(G��.�.�t�S�9�	:rN)TF)
�__name__�
__module__�__qualname__r�r=r�rr�r
rrrrr�r�s%��7�8��
��-�$:rr�)F)6r�rr�r�rr>r8r��typingr�
configmanagerr�netplanrrr]rr�r�r��RuntimeError�
config_errorsrr!r#ryr�r/r4rIrVrZr`�boolrrrrvrzr}r�r�r�r�r�r�r�r�r�r�r��dictr��	Namespacer�rrr�<module>r!s���$�	�����	���.�3�+��D��.��4�� �y�v�G� �S�#��M��$�%5�|�D�
�T�y�b�@�D�@�S�@���4�s�4�s�4�
�c�
�d�
�6�	'�c�	'�T�	'��	'��4�P�
���O�
p�
�.
��
��#��
��s��x��}����S�	�������
��
�D�
� 9�C�9�D�9�
�D��,N:�X�'�'�N:r