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

Z9
g�q���ddlZddlZddlZddlZddlZddlZddlZddlmZm	Z	ddl
mZddlm
Z
mZmZddlmZmZmZmZddlmZddlZddlZddlmZeeed	fed	eeeeedfZid
d
�dd�dd
�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�d d!dddddd
d"d
dd d!d#�
�Z Gd$�d%�Z!Gd&�d'�Z"Gd(�d)�Z#y)*�N)�defaultdict�
namedtuple)�StringIO)�AF_INET�AF_INET6�	inet_ntop)�Dict�List�Type�Union)�parse�)�utils�JSON�bond�bridge�dummyzdummy-device�erspan�tunnel�ether�ethernet�gretap�ipgre�ip6gre�loopback�sit�tun�tunnel6�	wireguard�wlan�wifi�wwan�modem�vethzvirtual-ethernet�vlan�vrfz	nm-device)
r%r&�vxlan�ieee80211_radiotap�wifis�	ethernets�bridges�bondsz
nm-devicesz
dummy-devices�modems�vlans�vrfsc�D�eZdZdedefd�Zggddfdededededef
d	�Zd
edefd�Z	dedefd
�Z
defd�Zede
fd��Zede
fd��Zedefd��Zedefd��Zedefd��Zedefd��Zedefd��Zedefd��Zedefd��Zdedefd�Zy)�	Interface�ip�returnc�d�t|jdd�x}�dk(r|j�Sy)z�
        Extract the MAC address if it's set inside the JSON data and seems to
        have the correct format. Return 'None' otherwise.
        �address��N)�len�get�lower)�selfr2r5s   �+/usr/share/netplan/netplan_cli/cli/state.py�
__extract_maczInterface.__extract_macQs0��
�"�&�&��B�/�/�w�0�B�6��=�=�?�"��)NN�nd_data�nm_data�
resolved_data�
route_datac���|jdd��_|jdd��_d|jdg�vrdnd�_|jdd�j	��_�j
|��_d�_d�_	d�_
g�_i�_|xsg}t�fd	�|D�d��_t�fd
�|D�d��_�jr �j!�j��_d�_|dr�g�_|dD]�}t%|d�t%�j�k(s�(|d}|d
}�j"j't)|dj+|D�	cgc]}	|	j-dd���c}	�����d�_|dr]g�_|dD]N}	t%|	d�t%�j�k(s�(�j.j't1|	d���Pg}
d�_|dr|
|dz
}
|dr|
|dz
}
|
�rg�_|
D�]}|jd��jk(s�#d|jd�i}|jd�x}
r|
|d<|jd�x}
r|
|d<|jd�x}
r|
|d<|jd�x}
r|
|d<|jd�x}
r|
|d<|jd�x}
r|
|d<|jd�x}
r|
|d<|jd�x}
r|
|d<�j2j'|���d�_|jd�x}�rgt7�}�j2r��j2D]�}|jd�dk(s�|jd�dk7s�-|jd�t8j:k(s�P|j=t?j@|d�jB���g�_|D�]�}g}t?jD|d �jFr|j'd!�|jd"d#�r|j'd"�t?j@|d �d$|d%���}tI|t>jJ�rk|jB|vr|j'd��jjd&i�jt1|��x}r|d'k(r|j'd(��j2rh�j2D]Y}d|vs�t?jD|d�t?jD|d �k(s�:|dd(k(s�Cd(|vs�H|j'd(�n|d jM�}|d)|d%ii}|r|||d<�j4j'|����d�_'|jd*i�jd+�x}r|jQ��_'�jS�j�xsd,�_*ycc}	w)-N�ifindex����ifname�unknown�UP�flags�DOWN�	operstatec3�H�K�|]}|d�jk(s�|���y�w)�IndexN)�idx��.0�xr;s  �r<�	<genexpr>z%Interface.__init__.<locals>.<genexpr>is �����K�A�A�g�J�$�(�(�4J�a�K���"�"c3�H�K�|]}|d�jk(s�|���y�w)�deviceN��namerOs  �r<rRz%Interface.__init__.<locals>.<genexpr>js �����M�A�A�h�K�4�9�9�4L�a�M�rSrr�r>�big�dev�to�dst�family�gateway�via�prefsrc�from�metric�type�scope�protocol�table�	addr_info�ra�default�local�link�dynamicF�/�	prefixlen�	addresses�DHCPv6�dhcp�prefix�linkinfo�	info_kindr6)+r9rNrW�
adminstate�upperrK�_Interface__extract_mac�
macaddressrrr&�members�data_sources�next�nd�nm�_find_data_sources�
dns_addresses�int�appendr�join�to_bytes�
dns_search�str�routesro�setr�value�add�	ipaddress�ip_interface�network�
ip_address�
is_link_local�
isinstance�IPv6Addressr:�iproute_type�strip�query_networkctl�_networkctl)r;r2r?r@rArB�itr�ipfamily�dns�v�_routes�obj�elem�valrg�ra_networks�route�addrrI�ip_addr�ip_dsrts`                     r<�__init__zInterface.__init__Zs�������y�"�-�������)�4��	�'+�r�v�v�g�r�/B�'B�t���� �f�f�[�)�<�B�B�D���#�1�1�"�5��������	����"$�������-�R���K��K�T�R����M��M�t�T����7�7� $� 7� 7���� @�D��$(������!#�D��$�Q�'�
r���s�1�v�;�#�d�h�h�-�/�"�1�v�H��a�&�C��&�&�-�-�i��#�(�(�jm�Kn�ef�A�J�J�WX�Z_�L`�Kn�Bo�.p�q�	
r�
!%������ �D�O�"�1�%�
6���q��t�9��D�H�H�
�-��O�O�*�*�3�q��t�9�5�
6�
�� ����a�=��z�!�}�$�G��a�=��z�!�}�$�G���D�K��
-���7�7�5�>�T�Y�Y�.� �#�'�'�%�.�1�D�!�g�g�h�/�/�s�/�),��X��!�g�g�i�0�0�s�0�&)��U��!�g�g�i�0�0�s�0�'*��V��!�g�g�h�/�/�s�/�),��X��!�g�g�f�o�-�s�-�'*��V��!�g�g�g�.�.�s�.�(+��W�
�!�g�g�j�1�1�s�1�+.��Z�(�!�g�g�g�.�.�s�.�(+��W�
��K�K�&�&�t�,�'
-�* $������{�+�+�9�+��%�K��{�{�!�[�[�U�E��	�	�*�-��5� %�	�	�$��9� <� %�	�	�(� 3�x�~�~� E�#���	�(>�(>�u�T�{�(K�(S�(S�T�	U� �D�N�!�
,�� ���'�'��W�
�6�D�D��L�L��(��8�8�I�u�-��L�L��+�$�0�0�D��M�?�!�D��DU�CV�1W�X���g�y�'<�'<�=����+�5����T�*� $� 1� 1� 5� 5�k�2� F� J� J�3�w�<� X�X�u�X� �H�,�!�L�L��0��;�;�!%���&��"�e�O� )� 4� 4�U�6�]� C�y�G[�G[�\`�ah�\i�Gj� j�$�Z�0�F�:�v�U�?R� %���V� 4� %�&��w�-�-�-�/���(�D��,=�!>�?���-2�D��M�'�*����%�%�d�+�?
,�B"&������z�2�.�2�2�;�?�?�9�?� )��� 1�D��!%� 5� 5�d�i�i� @� F�B����qLos�Y�con_namec	���d}	tjddddd|g�}|j�S#t$r9}t	j
dj
|t|���Yd}~|Sd}~wwxYw)Nz--get-valuesz802-11-wireless.ssid�con�show�idz+Cannot query NetworkManager SSID for {}: {})r�	nmcli_outr��	Exception�logging�warning�formatr�)r;r��ssid�es    r<�
query_nm_ssidzInterface.query_nm_ssid�sx����	/��?�?�N�4J�$)�6�4��$C�D�D��:�:�<����	/��O�O�I�P�P�$�c�!�f�.�
/�
/����	/�s�*/�	A1�.A,�,A1rFc	���d}	tjddd|gd��}|S#t$r9}tjdj|t
|���Yd}~|Sd}~wwxYw)N�
networkctl�statusz--T��textz"Cannot query networkctl for {}: {})�
subprocess�check_outputr�r�r�r�r�)r;rF�outputr�s    r<r�zInterface.query_networkctl�sn����	!��,�,�l�H�d�F�-S�Z^�_�F��
���	!��O�O�@�G�G���A�� �
!�
!��
��	!�s�!�	A#�.A�A#c���|j|j|jd�}|jr|j|d<|jr|j|d<|j
r|j
|d<|jr|j|d<|jr|j|d<|jr|j|d<|jr|j|d<|jr|j|d	<|jr|j|d
<|jr|j|d<|jr|j|d<|jr|j|d
<|jr|j|d<|j r|j |d<|j"r|j"|d<|j$r|j$|d<|j&|fS)N)�indexrurKrcr��tunnel_mode�backendr�rx�vendorrorr�r��activation_moderrr&�
interfaces)rNrurKrcr�r�r��	netdef_idrxr�rorr�r�r�rrr&ryrW)r;�jsons  r<r�zInterface.json�s����X�X��/�/������
�9�9��9�9�D��L��9�9��9�9�D��L����"&�"2�"2�D����<�<�"�l�l�D��O��>�>����D��J��?�?�!%���D����;�;�!�[�[�D��N��>�>� $���D������$(�$6�$6�D��!��?�?�!%���D����;�;�!�[�[�D��N����&*�&:�&:�D�"�#��;�;�!�[�[�D��N��9�9��9�9�D��L��8�8��(�(�D��K��<�<�!%���D����	�	�4� � r>c�B�|jdk(xr|jdk(S)NrH�rurK�r;s r<�upzInterface.ups�����$�&�A�4�>�>�T�+A�Ar>c�B�|jdk(xr|jdk(S)NrJr�r�s r<�downzInterface.downs�����&�(�E�T�^�^�v�-E�Er>c�X�|jr|jjd�nd}|dk(r|jjd�}|dk(r|jjd�x}r|}tj|�x}r|Stjdj|��y)Nr�none�KindrzUnknown device type: {})r|r9�DEVICE_TYPESr�r�r�)r;�nd_type�kind�device_types    r<rczInterface.types���)-���$�'�'�+�+�f�%�d���f���g�g�k�k�&�)�G��g���w�w�{�{�6�*�*�t�*���&�*�*�7�3�3�;�3������1�8�8��A�B�r>c�R�|jdk(r|jr|jSy)Nr)rcr�r�s r<r�zInterface.tunnel_mode(s%���9�9�� �T�%6�%6��$�$�$�r>c���|jr=d|jjdd�vrd|jjdd�vry|jrd|jjdd�vry	y)
N�	unmanaged�
SetupStater6�run/systemd/network/10-netplan-�NetworkFile�networkd�.run/NetworkManager/system-connections/netplan-�filename�NetworkManager)r|r9r}r�s r<r�zInterface.backend.sa���G�G��4�7�7�;�;�|�R�#@�@�1�T�W�W�[�[��PR�5S�S��
�W�W�I�T�W�W�[�[�Yc�eg�Mh�h�#�r>c��|jdk(r@|jjdd�jd�djd�dS|jdk(r�|jjd	d�jd
�djd�d}|jjdd�d
k(r�|j|jjd��}||vrR|j
d�}|D�cgc]
}t|���}}dj|�dz}tj|�}|r|jd|z�d}|Sycc}w)Nr�r�r6r�rz.networkrr�r�r�z
.nmconnectionrcz802-11-wirelessrW�utf-8�;�-)r�r|r9�splitr}r��encoder�r�r
�quote)r;�netdefr��ssid_encoded�b�
ssid_bytes�ssid_nm_escapeds       r<r�zInterface.netdef_id8sI���<�<�:�%��7�7�;�;�}�b�1�7�7�1�3�34�6�6;�e�J�6G��K�
K�
�\�\�-�
-��W�W�[�[��R�0�6�6�@�B�BC�E�EJ�U�?�E[�\]�_�F��w�w�{�{�6�2�&�*;�;��)�)�$�'�'�+�+�f�*=�>���v�%�$(�;�;�w�#7�L�2>�!?�Q�#�a�&�!?�J�!?�&)�h�h�z�&:�S�&@�O�!�;�;��7�D��#�\�\�#��*�5�a�8�F��M���"@s�Ec��|jr:d|jvr,|jdr|jdj�Sy)N�Vendor)r|r�r�s r<r�zInterface.vendorWs:���7�7�x�4�7�7�*�t�w�w�x�/@��7�7�8�$�*�*�,�,�r>c���|jdk(r�|jdk(r+|j|jj	dd��S|j
j
�D]�}|j�}d}tj||�x}s�.|jd�}|jd�jd�jd�jd	�}|r|cSdcSy)
Nr!r�rWr6z!^Wi-?Fi access point: (.*) \(.*\)r�latin1zunicode-escaper�)
rcr�r�r}r9r��
splitlinesr��re�match�groupr��decode)r;�line�keyr�r�s     r<r�zInterface.ssid]s����9�9����|�|�/�/��)�)�$�'�'�+�+�f�b�*A�B�B�
�(�(�3�3�5�

2���z�z�|��:���H�H�S�$�/�/�5�/� �;�;�q�>�D�
 �;�;�x�0�7�7�8H�I�P�P�QY�Z�a�a�bi�j�D�#'�4�1�T�1�

2�r>c�D�|jdk(rl|jj�D]N}|j�}d}|j	|�s�'|t|�dj�}|dk7r|cSdcSy|jdk(r|jddk(rdSdSy)Nr�zActivation Policy: r�r��autoconnect�no�manual)r�r�r�r��
startswithr8r})r;r�r��modes    r<r�zInterface.activation_modess����<�<�:�%��(�(�3�3�5�
:���z�z�|��+���?�?�3�'���C��	�?�0�0�2�D�#'�4�<�4�9�T�9�
:���\�\�-�
-�#�w�w�}�5��=�8�G�4�G�r>�datac�L�i}|jdg�x}rOi|d<|D]E}tjt|d��}t	|j
�}|d}||d|<�G|jdg�x}ri|d<|D]}	|	d}
|	d}||d|
<�|jdg�x}rxi|d	<|D]n}tjt|d��}|d
}tjt	|j
�d|��z�}
t	|
�}|d}||d	|<�p|S)N�DNSr��Address�ConfigSource�
SearchDomains�search�Domain�	Addressesro�PrefixLengthrm)r9r�r��bytesr�r2)r;r��sourcesror�r��addr_str�source�domainsr��domainr2rr�	full_addrs              r<r~zInterface._find_data_sources�sk��
�������+�+�9�+��G�E�N� �
2�� �-�-�e�C�	�N�.C�D���t�w�w�<���^�,��+1����x�(�	
2��h�h���3�3�7�3� "�G�H��!�
3����)����/��,2���!�&�)�
3�����b�1�1�9�1�#%�G�K� ��
8�� �-�-�e�B�y�M�.B�C���N�+��%�2�2�3�t�w�w�<�A�f�X�,�3N�O�	��y�>���N�+��17���$�X�.�

8��r>N)�__name__�
__module__�__qualname__�dictr�rwr�tupler�r�r�r��property�boolr�r�rcr�r�r�r�r�r�r~�r>r<r1r1Ps��������24�R�(4�,�yG�4�yG�$�yG�d�yG� %�yG�BG�yG�v	�c�	�c�	��s��s��&!�d�&!�P�B�D�B��B��F�d�F��F���c������S����
��������3����<������
��c����*�
��
��
�#�t�#��#r>r1c�^�eZdZdZdd�Zedefd��Zedede	fd��Z
ededefd	��Z
edefd
��Zedefd��Zedefd��Zedefd
��Zedefd��Zedefd��Zedefd��Zededeefd��Zedeeddfd��Zedefd��Zdefd�Zy)�SystemConfigStatez- Collects the system's network configuration Nc���tjd�sltjd�r*tjd�tjd�tjd�tjddgd�|j�}|j�}|r|s*tjd�tjd�|j�}|j�\}}|j�\}}	|D�
cgc]}
t|
||||	f||f���c}
|_|j!|j�|jD�
cgc]}
|
j"dk7s�|
��}}
|j%|�}�r t'�fd	�|jD�d�g}|D�
cgc]}
|
��|
��	}}
�r>|gk(r9tjd
j)���tjd�d||j+�d�i|_|r|jn|}|D]$}
|
j/�\�}||j,�<�&ycc}
wcc}
wcc}
w)
Nzsystemd-networkd.servicez^'netplan status' depends on networkd, but systemd-networkd.service is masked. Please start it.rz3systemd-networkd.service is not active. Starting...�startTz,Could not query iproute2 or systemd-networkdrJc3�B�K�|]}|j�k(s�|���y�w�NrV)rP�itfrFs  �r<rRz-SystemConfigState.__init__.<locals>.<genexpr>�s�����W�c�C�H�H�PV�DV�c�W�s��zCould not find interface {}znetplan-global-state)�online�nameservers)r�systemctl_is_active�systemctl_is_maskedr��error�sys�exit�debug�	systemctl�query_iproute2�query_networkd�query_nm�query_routes�query_resolvedr1�interface_list�correlate_members_and_uplinkrK�query_online_stater{r��resolvconf_json�stater�)r;rF�all�iproute2r��nmcli�route4�route6rr�r�filtered�online_stater��itf_iterr�s `              r<r�zSystemConfigState.__init__�s*����(�(�)C�D��(�(�)C�D��
�
�1�2�������M�M�O�P��O�O�G�&@�%A�4�H��&�&�(���&�&�(���x��M�M�H�I��H�H�Q�K��
�
����*�*�,����$(�$7�$7�$9�!�
�z�GO�P�?B� )��h��
�z�?Z�*0�&�)9� ;�P���	
�)�)�$�*=�*=�>�$(�#6�#6�R�C�#�-�-�6�:Q�C�R��R��.�.�x�8����W�T�-@�-@�W�Y]�^�_�H�%-�B�T��1A�D�B��B��h�"�n��M�M�7�>�>�v�F�G��H�H�Q�K�
#�&�#�3�3�5�%�
��
�+.�4�&�&�8���	%�C��(�(�*�K�F�C�!$�D�J�J�v��	%��9P��S��Cs�I
�I�+I�(I�0Ir3c��ggdd�}	td�5}|j�}d|vrd|d<n	d|vrd|d<|g|j�zD]Y}|jd�r|d	xx|j	�d
dz
cc<|jd�s�D|j	�d
d|d<�[	ddd�|S#1swY|SxYw#t
$r8}t
jdjt|���Yd}~|Sd}~wwxYw)
N)ror�r�z/etc/resolv.confz/# This is /run/systemd/resolve/stub-resolv.conf�stubr�z*# This is /run/systemd/resolve/resolv.conf�compat�
nameserverrorr�z!Cannot parse /etc/resolv.conf: {})
�open�readline�	readlinesr�r�r�r�r�r�r�)�cls�res�f�	firstliner�r�s      r<r&z!SystemConfigState.resolvconf_json�s�������
	P��(�)�
9�Q��J�J�L�	�D�	�Q�"(�C��K�A�Y�N�"*�C��K�&�K�!�+�+�-�7�9�D����|�4��K�(�D�J�J�L���,<�<�(����x�0�(,�
�
��Q�R�(8��H�
�	9�
9��
�
9��
���	P��O�O�?�F�F�s�1�v�N�O�O��
��	P�s;�B?�A;B2�B2�(B?�2B<�7B?�<B?�?	D�-C;�;Dr�c��|D]�}|js�|js�|js�*|js�7g}|jD]>}t	|j��d\}}d|vsd|dvs�.|j
|��@|jD�cgc]}|jdd�dk(s�|��}}|s��|s��|js��yycc}w)NrrIrkr[riTF)r�ror�r�list�itemsr�r9)	r7r�r�
non_local_ipsr�r2�extrarQ�default_routess	         r<r%z$SystemConfigState.query_online_state�s����		 �C��v�v�#�-�-�C�J�J�3�;L�;L� "�
��M�M�1�D� $�T�Z�Z�\� 2�1� 5�I�B���e�+�v�U�7�^�/K�%�,�,�R�0�1�.1�Z�Z�!Z��1�5�5��t�;L�PY�;Y�!�!Z��!Z� �^��8I�8I��		 ���"[s�C�2C�
cmd_outputc�,�tj|�Sr�r��loads�r7rAs  r<�process_genericz!SystemConfigState.process_generics���z�z�*�%�%r>c���d}	tjgd�d��}|j|�}|S#t$r8}t	j
dj
t|���Yd}~|Sd}~wwxYw)N)r2�-d�-jr�Tr�z(Cannot query iproute2 interface data: {})r�r�rFr�r��criticalr�r��r7r�r�r�s    r<rz SystemConfigState.query_iproute2su����	X�$�1�1�2L�7;�=�F��&�&�v�.�D�����	X����G�N�N�s�ST�v�V�W�W����	X���*0�	A1�-A,�,A1c�2�tj|�dS)N�
InterfacesrCrEs  r<�process_networkdz"SystemConfigState.process_networkds���z�z�*�%�l�3�3r>c���d}	tjddgd��}|j|�}|S#t$r8}t	j
dj
t|���Yd}~|Sd}~wwxYw)Nr��--json=shortTr�z(Cannot query networkd interface data: {})r�r�rOr�r�rJr�r�rKs    r<rz SystemConfigState.query_networkdsy����	X�$�1�1�<��2P�7;�=�F��'�'��/�D�����	X����G�N�N�s�ST�v�V�W�W����	X�rLc
���g}|j�D]I}|jd�}|dr|dnd}|s�#|j||d|d|d|d|dd���K|S)	N�:rrrX���)rUrW�uuidr�rcr�)r�r�r�)r7rAr�r�r�rZs      r<�
process_nmzSystemConfigState.process_nm*s~�����)�)�+�	�D��J�J�s�O�E�#�A�h�%��(�D�C�����!�!�!�H�!�!�H� %�a��!�!�H�#(��8�
��		��r>c���d}	tjgd��}|j|�}|S#t$r8}t	j
dj
t|���Yd}~|Sd}~wwxYw)N)z-tz-fz*DEVICE,NAME,UUID,FILENAME,TYPE,AUTOCONNECTr�r�z.Cannot query NetworkManager interface data: {})rr�rXr�r�rr�r�rKs    r<r zSystemConfigState.query_nm;sr����	[��/�/�+:�;�F��>�>�&�)�D�����	[��M�M�J�Q�Q�RU�VW�RX�Y�Z�Z����	[�s�(.�	A/�-A*�*A/c���d}d}	tjgd�d��}|j|�}tjgd�d��}|j|�}|r(|D]#}|jdtji��%|r(|D]#}|jdtji��%||fS#t$r7}t	j
dj
t|���Yd}~��d}~wwxYw)N)r2rHrIz-4r�r�rfr(Tr�)r2rHrIz-6r�r�rfr(z$Cannot query iproute2 route data: {}r])r�r�rFr�r�rr�r��updaterr�r)r7�data4�data6�output4�output6r�r�s       r<r!zSystemConfigState.query_routesGs�������	Q�%�2�2�3l�8<�>�G��-�-�g�6�E�%�2�2�3l�8<�>�G��-�-�g�6�E���
8�����h��
�
�6�7�
8���
9�����h����7�8�
9��u�~����	Q��M�M�@�G�G��A��O�P�P��	Q�s�AB2�2	C2�;-C-�-C2c��d}d}	tjd�}|�td��tj|ddddddd	d
dg
d�
�}tj|�}|jdig�d}|jdi�jd�dk(sJd��|jdi�jd�}|jdi�jd�dk(sJd��|jdi�jd�}||fS#t$r,}tjdt|��Yd}~||fSd}~wwxYw)N�busctlzmissing busctl utilityrQ�callz--systemzorg.freedesktop.resolve1z/org/freedesktop/resolve1zorg.freedesktop.DBus.Properties�GetAll�sz org.freedesktop.resolve1.ManagerTr�r�rr�rcza(iiay)zDNS address type doesn't match�Domainsza(isb)zDNS search type doesn't matchz"Cannot query resolved DNS data: %s)�shutil�which�RuntimeErrorr�r�r�rDr9r�r�rr�)r7ror�ra�json_outr8r��errs        r<r"z SystemConfigState.query_resolved_s\���	���	J��\�\�(�+�F��~�"�#;�<�<�!�.�.�����+�,�2��3�3����H��*�*�X�&�C��7�7�6�B�4�(��+�D��8�8�E�2�&�*�*�6�2�i�?�b�Ab�b�?������+�/�/��7�I��8�8�I�r�*�.�.�v�6�(�B�d�Dd�d�B��X�X�i��,�0�0��8�F��6�"�"���	J��M�M�>��C��I�I��6�"�"��	J�s�DD�	E�E�ErFc	�N�g}d}	tjdddddd|gd�	�}tj|�}|D]"}|j|jd���$|S#t$r9}tjd
jt
|���gcYd}~Sd}~wwxYw)zO Return a list containing the interfaces that are members of a bond/bridge/vrf Nr2rHrIrkr��masterTr�zCannot query bridge: {}rF)r�r�r�r�r�r�r�r�rDr�r9)r7rFryr�r��output_json�members       r<�
query_memberszSystemConfigState.query_members}s�������	��,�,��t�T�6�6�8�V�D�4�Q�F��j�j��(��!�	1�F��N�N�6�:�:�h�/�0�	1�����	��O�O�5�<�<�S��V�D�E��I��	�s�A"�"	B$�+.B�B$�B$c��	�gd��	i}tt�}t�	fd�|�D]a}|j|j�}|D]0}tdddg�}||j|j�||<�2|||j<�c|D]�}|j|j�x}r`|jdk(r|j|_|jdk(r|j|_	|jdk(r|j|_
|j�	vs��|j|j�x}s��||_��y	)
z�
        Associate interfaces with their members and parent interfaces.
        If an interface is a member of a bond/bridge/vrf, identify which interface
        if a member of. If an interface has members, identify what are the members.
        )rrr&c� ��|j�vSr)rc)�i�uplink_typess �r<�<lambda>z@SystemConfigState.correlate_members_and_uplink.<locals>.<lambda>�s���!�&�&�L�*@�r>�MemberrWrcrrr&N)rr<�filterrorWrrcr9rrr&ry)
r7r��members_to_uplink�uplink_to_members�	interfaceryrn�member_tuple�uplinkrss
         @r<r$z.SystemConfigState.correlate_members_and_uplink�s2���1����'��-��� @�*�M�	8�I��'�'�	���7�G�!�
Y��)�(�V�V�4D�E��,8�������,X�!�&�)�
Y�18��i�n�n�-�	8�$�	0�I�*�.�.�y�~�~�>�>�v�>��;�;�(�*�'-�{�{�I�$��;�;�&�(�%+�[�[�I�N��;�;�%�'�$*�K�K�I�M��~�~��-�/�3�3�I�N�N�C�C�7�C�(/�I�%�	0r>c�,�t|j�Sr)r8r#r�s r<�number_of_interfacesz&SystemConfigState.number_of_interfaces�s���4�&�&�'�'r>c��|jSr)r'r�s r<�get_datazSystemConfigState.get_data�s���z�z�r>)NF)rrr�__doc__r��classmethodr	r&r<rr%r�rrFrrOrrXr r
r!r"r
ror1r$rr�r}rr
r>r<rr�s���7�6%�p������.�
�D�
�T�
��
��&��&��&��&���t�����4�T�4��4���t������t���� �	��	��	���U����.�#�u�#��#�:��3��4��9����"�0�d�9�o�0�$�0��0�:�(�c�(��(��$�r>rc�0�eZdZdZdd�Zdefd�Zdefd�Zy)�NetplanConfigStatez. Collects the Netplan's network configuration c�R�tj�}|j|�tj�}|j	|�|j
|_t
�|_|dk(r|j|j��y|jd�sdjd|f�}tjd|�}|D�cgc]}|jdd���}}t
�}|j|��tj|||j�ycc}w)Nr()�output_filer��.z	(?<!\\)\.z\.)�netplan�Parser�load_yaml_hierarchy�State�import_parser_results�netdefsrr'�
_dump_yamlr�r�r�r��replace�_dump_yaml_subtree)r;�subtree�rootdir�parser�np_stater��tmp_ins       r<r�zNetplanConfigState.__init__�s������!���"�"�7�+��=�=�?���&�&�v�.��'�'����Z��
��e�����D�J�J��7��%�%�i�0��(�(�I�w�#7�8���h�h�|�W�5�G�<C�D�D�t�|�|�E�3�/�D�G�D��Z�F����F��3��&�&�w���
�
�C��	Es�D$r3c�6�|jj�Sr)r'�getvaluer�s r<�__str__zNetplanConfigState.__str__�s���z�z�"�"�$�$r>c�\�tj|jj��Sr)�yaml�	safe_loadr'r�r�s r<rzNetplanConfigState.get_data�s���~�~�d�j�j�1�1�3�4�4r>N)r(rm)	rrrr�r�r�r�r	rr
r>r<r�r��s#��8�D�2%��%�5�$�5r>r�)$r�r�r�r�rfr�r�collectionsrr�ior�socketrrr�typingr	r
rr�urllibr
r�r�r6rr�r��floatrrr�r1rr�r
r>r<�<module>r�s���(���	�
��
�/��/�/�*�*������T�#�v�+�
��V��c�3��t�T�$�Z�
O�P��$�
�F�$��h�$��^�$�
�h�	$�
�Z�$�
�h�
$��X�$�
�h�$��
�$�
�8�$�
�h�$�
�8�$��x�$���$��F�$� �G�!$�"��#$�$
��
�!����
��#��
��G$��NV�V�r
I�I�X 5� 5r>