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

Z9
g����0�dZddlZddlZddlZddlmZddlZddlmZddl	m
Z
mZmZddl
mZmZej d�Zd	Z	dd
lmZddlmZddlmZGd
�de�ZdZGd�dej8�Zy#e$rej6d�Y�/wxYw)znetplan status command line�N)�NetplanRoute�)�utils)�NetplanConfigState�SystemConfigState�JSON)�DiffJSONEncoder�NetplanDiffStatez\[([a-z0-9]+)\].*\[\/\1\]F)�Console)�RegexHighlighter)�Themec��eZdZdZddgZy)�NetplanHighlighterznetplan.z"(^|[\s\/])(?P<int>\d+)([\s:]?\s|$)z(?P<str>(\"|\').+(\"|\'))N)�__name__�
__module__�__qualname__�
base_style�
highlights���5/usr/share/netplan/netplan_cli/cli/commands/status.pyrr's���
�1�(��
rrTz4python3-rich not found, falling back to plain outputc	�\��eZdZ�fd�Zd�Zd�Zdefd�Zdefd�Z	de
de
d	e
dee
fd
�Zde
de
d	e
de
fd�Z
de
de
d	e
defd�Zde
de
d	e
defd
�Zdee
fd�Zdee
fd�Zdee
fd�Zdee
fd�Zdee
fd�Zde
fd�Zdeefd�Zdeefd�Zdefd�Zdefd�Zde
fd�Zde
fd�Zde
fd�Zde
fd�Zde
fd�Z de
fd�Z!dee
fd�Z"dee
fd�Z#defd �Z$defd!�Z%d"�Z&de
fd#�Z'de
fd$�Z(de
fd%�Z)de
fd&�Z*d'�Z+d(�Z,d)�Z-d*�Z.d+�Z/de
fd,�Z0d-�Z1d.�Z2d/�Z3d5d1e4d2e5dd0fd3�Z6d4�Z7�xZ8S)6�
NetplanStatusc�T��t�|�ddd��d|_d|_i|_y)N�statusz,Query networking state of the running systemT)�
command_id�description�leafF)�super�__init__�all�
state_diff�route_lookup_table_names)�self�	__class__s �rr zNetplanStatus.__init__3s5���
���H�%S�"�	�	$�������(*��%rc��|jjddtdd��|jjdddd�	�|jjd
ddd�	�|jjd
ddd��|jjddd�	�|jjddd�	�|jjdd��|j|_|j�|j
�y)N�ifname�?zShow only this interface)�nargs�type�default�helpz-az--all�
store_truez(Show all interface data (incl. inactive))�actionr,z-vz	--verbosezShow extra informationz-fz--format�tabularz2Output in machine readable `json` or `yaml` format)r+r,z--diffz>Show the differences between the system's and netplan's statesz--diff-onlyzCOnly show the differences between the system's and netplan's statesz
--root-dirzBSearch for configuration files in this root directory instead of /)r,)�parser�add_argument�str�command�func�
parse_args�run_command�r$s r�runzNetplanStatus.run;s����� � ���3��&@�	!�	B���� � ��w�|�&P�	!�	R���� � ��{�<�&>�	!�	@���� � ��z�9�&Z�	!�	\���� � ��,�&h�	!�	j���� � ��|�&m�	!�	o���� � ��&j�	!�	l��L�L��	��������rc
���trWtdddddddd��}|jrtdddddddd��}tt	�||d	�
�}|j
}|S|j}|S)Nz	bold cyan�yellow�grey62z
green boldzred boldzyellow bold�bold)znetplan.intznetplan.str�muted�online�offline�unknown�	highlightF)�highlighter�theme�width�emoji)�RICH_OUTPUTr
�diffrr�print�plain_print)r$�_console_widthrC�console�pprints     r�_create_pretty_printz"NetplanStatus._create_pretty_printOs�����*�'�!�&�%�(�#���E��y�y��#+�#+�%�*�)�,�!'�����*<�*>�e�$2�%�A�G��]�]�F��
��%�%�F��
r�returnc��|jrD|jdj|�x}r$|jd�s|jd�r|SiS)N�
interfaces�system_state�
netplan_state�r"�get�r$r'rGs   r�_get_interface_diffz!NetplanStatus._get_interface_diffnsI���?�?����|�4�8�8��@�@�t�@��8�8�N�+�t�x�x��/H��K��	rc�`�|jr"|jjd�x}r||vryy)N�missing_interfaces_netplanTFrS)r$r'�missings   r� _is_interface_missing_in_netplanz.NetplanStatus._is_interface_missing_in_netplanus2���?�?��/�/�-�-�.J�K�K�w�K��W�$��rr'�state�propertyc��|jrB|jdj|�x}r"|j|i�j|g�SgS�NrPrS�r$r'r[r\rGs     r�_get_missing_property_listz(NetplanStatus._get_missing_property_list|sK���?�?����|�4�8�8��@�@�t�@��x�x��r�*�.�.�x��<�<��	rc��|jrB|jdj|�x}r"|j|i�j|d�Sy)NrP�rSr_s     r�_get_missing_property_strz'NetplanStatus._get_missing_property_str�sI���?�?����|�4�8�8��@�@�t�@��x�x��r�*�.�.�x��<�<�rc���|jrJ|jdj|�x}r*|j|i�j|t��St�Sr^)r"rT�setr_s     r�_get_missing_property_setz'NetplanStatus._get_missing_property_set�sO���?�?����|�4�8�8��@�@�t�@��x�x��r�*�.�.�x���?�?��u�rc��|jrB|jdj|�x}r"|j|i�j|d�Sy)NrPFrSr_s     r�_get_missing_property_boolz(NetplanStatus._get_missing_property_bool�sI���?�?����|�4�8�8��@�@�t�@��x�x��r�*�.�.�x��?�?�rc�(�|j|dd�S)NrR�missing_addresses�r`�r$r's  r�_get_missing_netplan_addressesz,NetplanStatus._get_missing_netplan_addresses�s���.�.�v��H[�\�\rc�(�|j|dd�S)NrQ�missing_nameservers_addressesrkrls  r�_get_missing_system_nameserversz-NetplanStatus._get_missing_system_nameservers�s���.�.�v�~�Gf�g�grc�(�|j|dd�S)NrRrorkrls  r� _get_missing_netplan_nameserversz.NetplanStatus._get_missing_netplan_nameservers�s���.�.�v��Hg�h�hrc�(�|j|dd�S)NrR�missing_nameservers_searchrkrls  r�_get_missing_netplan_searchz)NetplanStatus._get_missing_netplan_search�s���.�.�v��Hd�e�erc�(�|j|dd�S)NrQrtrkrls  r�_get_missing_system_searchz(NetplanStatus._get_missing_system_search�s���.�.�v�~�Gc�d�drc�(�|j|dd�S)NrQ�missing_macaddress�rcrls  r�_get_missing_system_macaddressz,NetplanStatus._get_missing_system_macaddress�s���-�-�f�n�FZ�[�[rc�(�|j|dd�S)NrR�missing_routes�rfrls  r�_get_missing_netplan_routesz)NetplanStatus._get_missing_netplan_routes�s���-�-�f�o�GW�X�Xrc�(�|j|dd�S)NrQr}r~rls  r�_get_missing_system_routesz(NetplanStatus._get_missing_system_routes�s���-�-�f�n�FV�W�Wrc�(�|j|dd�S)NrQ�missing_dhcp4_address�rhrls  r�_is_missing_dhcp4_addressz'NetplanStatus._is_missing_dhcp4_address�����.�.�v�~�G^�_�_rc�(�|j|dd�S)NrQ�missing_dhcp6_addressr�rls  r�_is_missing_dhcp6_addressz'NetplanStatus._is_missing_dhcp6_address�r�rc�(�|j|dd�S)NrQ�missing_bond_linkrzrls  r�_get_missing_system_bond_linkz+NetplanStatus._get_missing_system_bond_link�s���-�-�f�n�FY�Z�Zrc�(�|j|dd�S)NrRr�rzrls  r�_get_missing_netplan_bond_linkz,NetplanStatus._get_missing_netplan_bond_link�s���-�-�f�o�GZ�[�[rc�(�|j|dd�S)NrQ�missing_bridge_linkrzrls  r�_get_missing_system_bridge_linkz-NetplanStatus._get_missing_system_bridge_link�s���-�-�f�n�F[�\�\rc�(�|j|dd�S)NrRr�rzrls  r� _get_missing_netplan_bridge_linkz.NetplanStatus._get_missing_netplan_bridge_link�s���-�-�f�o�G\�]�]rc�(�|j|dd�S)NrQ�missing_vrf_linkrzrls  r�_get_missing_system_vrf_linkz*NetplanStatus._get_missing_system_vrf_link�s���-�-�f�n�FX�Y�Yrc�(�|j|dd�S)NrRr�rzrls  r�_get_missing_netplan_vrf_linkz+NetplanStatus._get_missing_netplan_vrf_link�s���-�-�f�o�GY�Z�Zrc�(�|j|dd�S)NrR�missing_interfacesrkrls  r�_get_missing_netplan_membersz*NetplanStatus._get_missing_netplan_members�s���.�.�v��H\�]�]rc�(�|j|dd�S)NrQr�rkrls  r�_get_missing_system_membersz)NetplanStatus._get_missing_system_members�s���.�.�v�~�G[�\�\rc�V�|jr|jjdi�SiS)N�missing_interfaces_systemrSr7s r�_get_missing_system_interfacesz,NetplanStatus._get_missing_system_interfaces�s&���?�?��?�?�&�&�'B�B�G�G��	rc���|j|�ry|jrC|jdj|�x}r#|jd�s|jd�ryy)NTrPrQrRF)rZr"rTrUs   r�	_has_diffzNetplanStatus._has_diff�sV���0�0��8���?�?����|�4�8�8��@�@�t�@��8�8�N�+�t�x�x��/H��rc
���|jdi�}|jd|jzdzjd|jdd�rdnd�	��|jd
i�}|jdg�}|jd�}|jd
g�}|r`t	|�D]R\}}|jd|jzdzj|dk(rdnd||rdj|�nd����T|rLt	|�D]>\}}|jd|jzdzj|dk(rdnd|�	���@|j�y)N�netplan-global-state�{title:>�	} {value}z
Online state:r>Fz[online]online[/online]z[offline]offline[/offline]��title�value�nameservers�	addresses�mode�searchz} {value}[muted]{mode}[/muted]r�DNS Addresses:rb� ({}))r�r�r��DNS Search:)rTrL�PAD�format�	enumerate)	r$�data�global_state�ns�dns_addr�dns_mode�
dns_search�i�vals	         r�_display_global_statez#NetplanStatus._display_global_state�sd���x�x� 6��;�����Z����(��4�<�<�!�/;�/?�/?��%�/P�+�Vr�=��	��
�
�m�R�
0������R�0�����v����6�6�(�B�/�
��#�H�-�
���3����Z����0�1Q�Q�Y�Y�./�1�f�*�"��5=�����1�2�Z���
��#�J�/�
���3����Z����0��<�D�D�+,��6�-�r��E���
�
	
���
rc�6�|jdd�dz|jdd�z}d}|dk(rd}d}n	|d	k(rd
}d}|jdd
�}|jd�}|jd�}|dk(r|r|d|zdzz
}n|dk(r
|r|d|zz
}d}|jd�r dj|jd��nd}	d}
d}|jrZ|j|�r|j}d}|dz
}n5d}|jd�r dj|jd��nd}	|j
r|j
|�rJ|j|j|||jdd�||||jdd�|	|
� �	�yy)!N�	operstate�UNKNOWN�/�
adminstater@zUP/UP�UPr>z	DOWN/DOWN�DOWNr?r*�other�ssid�tunnel_mode�wifiz/"�"�tunneluU[{col}]●[/{col}] {idx:>2}: {name} {type} [{col}]{state}[/{col}] ({backend}{netdef})�idz: [highlight]{}[/highlight]rbuC{sign} [{col}]●[/{col}] {idx:>2}: [green][highlight]{name} {type}z? [{col}]{state}[/{col}] ({backend}{netdef})[/highlight][/green]uH  [muted]● {idx:>2}: {name} {type} {state} ({backend}{netdef})[/muted]z: {}�indexr(�backend�	unmanaged)	�sign�col�idx�namer*r[r��netdef�extra)rTr�rGrZ�PLUS�	diff_onlyr�rL)r$r'r�r[�scolor�	full_typer�r�r�r�r�r�s            r�_display_interface_headerz'NetplanStatus._display_interface_header�s�������i�0�3�6����,�PY�9Z�Z�����G���E��F�
�k�
!��E��F��H�H�V�W�-�	��x�x�����h�h�}�-�����4��$��+��+�,�I�
�(�
"�{��#��+�,�I�h��IM���RV��.�5�5�d�h�h�t�n�E�]_�������9�9��4�4�V�<��y�y��^���[�[��c��:>�(�(�4�.����t�x�x��~�6�b���~�~�����!7��K�K��
�
����H�H�W�c�*��������K�8���&�
�

�"8rc
���|jd�x}�r`d}|j|�}d|jzdz}d}|jr#|s!d|jzdz}|jr/d}n,|jr |r|j
}d	|jzd
z}|s�|j
|j|d||jd�r!d
j|jdd��nd���|jrx|ru|j}d	|jzdz}|j
|j|d||jd�r!d
j|jdd��nd���yyyyy)N�
macaddressFr�z} {mac}[muted]{vendor}[/muted]rb�  [muted]{title:>z} {mac}{vendor}[/muted]T�{sign} {title:>z5} [green][highlight]{mac}{vendor}[/highlight][/green]zMAC Address:�vendorr�)r�r��macr�z1} [red][highlight]{mac}{vendor}[/highlight][/red])	rTr{r�rGr�r�rLr��MINUS)r$r'r�r��hide_macaddress�missing_system_macaddressr�r�s        r�_display_mac_addressz"NetplanStatus._display_mac_addresssh�����,�/�/�:�/�#�O�(,�(K�(K�F�(S�%�����(�)I�I�F��D��y�y�!:�,�T�X�X�5�6O�O���>�>�&*�O����8��y�y��*�4�8�8�3�4k�k��"����V�O�O��(�"�EI�X�X�h�EW�7�>�>�$�(�(�8�R�*@�A�]_�	,����9�9�!:��:�:�D�.�t�x�x�7�8k�k�F��K�K����!� �5�IM���RZ�I[�w�~�~�d�h�h�x��.D�E�ac�	!0�!��";�9�#�0rc
��|jdg�}d}|�rR|j|�}|D�];}d}d}t|j��d\}	}
|
jdd�}g}|
jd�r|
jdg�}d}
d}|rd|vrd}
d	}|	�d
|��}|jr)||vr%d|j
zdz}d}
d}|jrHd
}nE|jr'||vr#|j}d|j
zdz}d}
d	}nd|j
zdz}|r��|j|j||dk(rdnd|	||rddj|�zdznd|
|���|dz
}��>|j|�x}�r|j}|jdi�jd�x}rF|D]A}	|jd|j
zdzj||dk(rdnd|	���|dz
}�C|j|�r>|jd|j
zdzj||dk(rdnd���|dz
}|j|�r:|jd|j
zdzj||dk(rdnd���yyy)Nr�rrbF�prefix�flags�dhcp�[highlight]�[/highlight]r�r�z*} {start}{ip}/{prefix}{end}{extra}[/muted]Tr�z1} [green]{start}{ip}/{prefix}{extra}{end}[/green]r�z1} {start}{ip}/{prefix}{end}[muted]{extra}[/muted]z
Addresses:� (�, �))r�r��ipr�r��start�end�rQrjz(} [highlight][red]{ip}[/red][/highlight]�r�r�r�z4} [highlight][red]0.0.0.0/0 (dhcp)[/red][/highlight])r�r�z/} [highlight][red]::/0 (dhcp)[/red][/highlight])rTrm�list�itemsrGr�r�r�rLr��joinrVr�r�r�)r$r'r��lst�addresses_displayed�missing_netplan_addresses�objr��hide_addressr�r�r�r��highlight_start�
highlight_end�addressr�rGrjs                   r�_display_ip_addressesz#NetplanStatus._display_ip_addresses<s����H�H�[�"�-�����(,�(K�(K�F�(S�%��'
-����$�� �����-�a�0�	��E����8�R�0�����9�9�W�%�!�I�I�g�r�2�E�"$�� "�
���%��&3�O�$2�M��D��&��*���9�9��0I�!I�0����9�:f�f�F�&(�O�$&�M��~�~�'+���Y�Y�7�.G�#G��9�9�D�.�t�x�x�7�8k�k�F�&3�O�$2�M�'����0�1d�d�F�#��K�K����!�.A�Q�.F�l�B��%�;@�d�4�9�9�U�#3�3�C�7�b�-�)�!0�!��(�1�,�'�O'
-�R�+�+�F�3�3�4�3��:�:�D�$(�H�H�^�R�$@�$D�$D�EX�$Y�Y� �Y�+�-�B��K�K�!2�4�8�8�!;�<f�!f� n� n�!�.A�Q�.F�l�B��!o�!��
(�1�,�'�
-��-�-�f�5����.�t�x�x�7�8n�n�v�v��*=��*B�,��w���$�q�(�#��-�-�f�5����.�t�x�x�7�8i�i�q�q��*=��*B�,��r���6�!4rc
��|jdg�}d}|r�|j|�}|D]�}d}d}|jr)||vr%d|jzdz}	d}
d}|jrLd}nI|jr'||vr#|j
}d|jzd	z}	d
}
d}nd|jzd
z}	d}
d}|r��|j
|	j||dk(rdnd||
|���|dz
}��|j|�rg|j|�x}rS|j}|D]A}
|j
d|jzdzj||dk(rdnd|
���|dz
}�Cyyy)N�
dns_addressesrrbFr��} {value}[/muted]Tr��$} [green]{start}{value}{end}[/green]r�r�r�r�r��r�r�r�r�r�r�z(} [red][highlight]{ip}[/highlight][/red]r�)rTrrrGr�r�r�rLr�r�rpr�)r$r'r�r��nameservers_displayed�missing_netplan_nameserversr�r��hide_nameserverr�r�r�ror�s              r�_display_dns_addressesz$NetplanStatus._display_dns_addresses�s����h�h���+�� !���*.�*O�*O�PV�*W�'��
/����"'���9�9��,G�!G�0����9�:M�M�F�&(�O�$&�M��~�~�*.���Y�Y�3�*E�#E��9�9�D�.�t�x�x�7�8^�^�F�&3�O�$2�M�'����0��<�F�&(�O�$&�M�&��K�K����!�2G�1�2L�.�RT�!�-�)�!0�!��*�Q�.�)�7
/�:�>�>�&�!�04�0T�0T�U[�0\�\�,�\��z�z��7�/�B��K�K�!2�4�8�8�!;�<f�!f� n� n�!�2G�1�2L�.�RT��!o�!��
*�Q�.�)�
/�]�"rc
���|jdg�}d}|r�|j|�}t|�D]�\}}d}d}	|jr)||vr%d|jzdz}
d}d}|j
rLd}	nI|jr'||vr#|j}d|jzd	z}
d
}d}nd|jzd
z}
d}d}|	r��|j|
j||dk(rdnd|||���|dz
}��|j|�rg|j|�x}
rS|j}|
D]A}|jd|jzdzj||dk(rdnd|���|dz
}�Cyyy)Nr�rrbFr�r�Tr�rr�r�r�r�r�rr�z,} [red][highlight]{domain}[/highlight][/red])r�r��domain)rTrur�rGr�r�r�rLr�r�rwr�)r$r'r�r��searches_displayed�missing_netplan_searchr�r�r��hide_searchr�r�r�rtrs               r�_display_dns_searchz!NetplanStatus._display_dns_search�s����h�h�|�R�(�����%)�%E�%E�f�%M�"�#�C�.�
,���3���#���9�9��,B�!B�0����9�:M�M�F�&(�O�$&�M��~�~�&*���Y�Y�3�*@�#@��9�9�D�.�t�x�x�7�8^�^�F�&3�O�$2�M�'����0��<�F�&(�O�$&�M�"��K�K����!�/A�Q�/F�m�B�!�-�)�!0�!��'�!�+�&�7
,�:�>�>�&�!�-1�-L�-L�V�-T�T�)�T��z�z��8�,�F��K�K�!2�4�8�8�!;�<j�!j� r� r�!�/A�Q�/F�m�B�%�!s�!��
'�!�+�&�
,�U�"rc��	�|jdg�}|j|�}|j|�}d}|�r�|jst	j
�|_t
dd�}|D�cgc]}|j|���}	}|js
td�|	�}	|	D�]m}d}
d}d}|jdk(rd}d}d}
|jrd	|jz}
d}|jrd
|jz}d}|jtjkrdt!|j�z}d}|jrN|j"dkDr?dj%|jj|j"|j"��}g}|j&r,|j&d
k7r|j&}|j)|�|j*r,|j*dk7r|j*}|j)|�|j,r,|j,dk7r|j,}|j)|�d}|j.r)||vr%d|j0zdz}d}d}|j2rId}
nF|j.r(||vr$|j4}d|j0zdz}|dz
}nd|j0zdz}|
r��|j7|j%||dk(rdnd|j|
||||rddj9|�zdznd||��
�|dz
}��p|j.�r�|D�]�}d}
|jrd	|jz}
d}|jrd
|jz}d}|jtjkrdt!|j�z}d}|jrN|j"dkDr?dj%|jj|j"|j"��}g}|j*r,|j*dk7r|j*}|j)|�|j,r,|j,dk7r|j,}|j)|�|j:}d|j0zdz}|j7|j%||dk(rdnd|j|
||||rddj9|�zdznddd��
�|dz
}���yycc}w)N�routesrc� �|jdk(S)N�)�table)�rs r�<lambda>z/NetplanStatus._display_routes.<locals>.<lambda>�s��!�'�'�S�.�rFrbr+r�r�z via z from z metric z	 table {}�kernel�global�unicastr�z:} {start}{to}{via}{src}{metric}{table}{end}{extra}[/muted]Tr�z1} [green][highlight]{start}{to}{via}{src}{metric}z'{table}{end}{extra}[/highlight][/green]r�zA} {start}{to}{via}{src}{metric}{table}{end}[muted]{extra}[/muted]zRoutes:r�r�r�)
r�r��to�via�src�metricrr�r�r�r�z=} {start}[red]{to}{via}{src}{metric}{table}{extra}[/red]{end})rTrr�r#r�route_table_lookupr
�_system_route_to_netplan�verbose�filterrr�	from_addrrr�_METRIC_UNSPEC_r2rr��protocol�append�scoper*rGr�r�r�rLr�r�)r$r'r�r��missing_netplan_routes�missing_system_routes�routes_displayed�
diff_state�router
�
hide_route�
default_start�default_endrrrrr��protor"r*r�r�s                       r�_display_routeszNetplanStatus._display_routes�s����h�h�x��$��!%�!A�!A�&�!I�� $� ?� ?�� G������0�0�05�0H�0H�0J��-�)�$��5�J�NQ�R�U�j�9�9�%�@�R�F�R��<�<�� 8�&�A���9
*��"�
� "�
� ���8�8�y�(�$1�M�"0�K����9�9�!�E�I�I�-�C����?�?�"�U�_�_�4�C����<�<�,�">�">�>�'�#�e�l�l�*;�;�F����<�<�E�K�K�!�O�'�.�.�t�/L�/L�/P�/P�QV�Q\�Q\�^c�^i�^i�/j�k�E����>�>�e�n�n��&@�!�N�N�E��L�L��'��;�;�5�;�;�(�#:�!�K�K�E��L�L��'��:�:�%�*�*�	�"9� �:�:�D��L�L��&����9�9��.D�!D�0����9�:v�v�F�$&�M�"$�K��~�~�%)�
��Y�Y�5�,B�#B��9�9�D�.�t�x�x�7�8k�k�F��G�G�F�'����0�1t�t�F�!��K�K��
�
�!�+;�q�+@�i�b� �8�8���%�#�;@�d�4�9�9�U�#3�3�C�7�b�+�'�!.�
!)�
*�%��)�$�s9
*�v�9�9�.�#
&�����9�9�!�E�I�I�-�C����?�?�"�U�_�_�4�C����<�<�,�">�">�>�'�#�e�l�l�*;�;�F����<�<�E�K�K�!�O�'�.�.�t�/L�/L�/P�/P�QV�Q\�Q\�^c�^i�^i�/j�k�E����;�;�5�;�;�(�#:�!�K�K�E��L�L��'��:�:�%�*�*�	�"9� �:�:�D��L�L��&��z�z��*�4�8�8�3�4s�s�����F�M�M��'7�1�'<�)�"��x�x���!��7<�$�t�y�y��/�/��3�"�'�&�*�
(�
)�!�A�%� �G#
&���Ss�/S#c�&�|jd�}|r�|j|�}d|jzdz}d}d}|jr#|s!d|jzdz}|jr1d}n.|jr"|r |j
}d	|jzd
z}|}|s#|j
|j|d|���|j|�x}rB|j}d	|jzd
z}|j
|j|d|���yy)N�bridger�r�rbFr�r�Tr��/} [highlight][green]{value}[/green][/highlight]zBridge:�r�r�r��+} [highlight][red]{value}[/red][/highlight])
rTr�r�rGr�r�rLr�r�r�)	r$r'r�r��missing_netplan_bridge_linkr�r��hide_bridge�missing_system_bridge_links	         r�_display_bridgezNetplanStatus._display_bridgeIs!���h�h�x� ���*.�*O�*O�PV�*W�'�����(��4�F��D��K��y�y�!<�,�T�X�X�5�6I�I���>�>�"&�K����:��y�y��*�4�8�8�3�4e�e��1������V�O�O��#��,���
*.�)M�)M�f�)U�U�%�U��:�:�D�&�t�x�x�/�0]�]�F��K�K������0�(��
�Vrc�&�|jd�}|r�|j|�}d|jzdz}d}d}|jr#|s!d|jzdz}|jr1d}n.|jr"|r |j
}d	|jzd
z}|}|s#|j
|j|d|���|j|�x}rB|j}d	|jzd
z}|j
|j|d|���yy)N�bondr�r�rbFr�r�Tr�r/zBond:r0r1)
rTr�r�rGr�r�rLr�r�r�)	r$r'r�r��missing_netplan_bond_linkr�r��	hide_bond�missing_system_bond_links	         r�
_display_bondzNetplanStatus._display_bondhs ���h�h�v����(,�(K�(K�F�(S�%�����(��4�F��D��I��y�y�!:�,�T�X�X�5�6I�I���>�>� $�I����8��y�y��*�4�8�8�3�4e�e��/������V�O�O��!��,���
(,�'I�'I�&�'Q�Q�#�Q��:�:�D�&�t�x�x�/�0]�]�F��K�K������.�(��
�Rrc�&�|jd�}|r�|j|�}d|jzdz}d}d}|jr#|s!d|jzdz}|jr1d}n.|jr"|r |j
}d	|jzd
z}|}|s#|j
|j|d|���|j|�x}rB|j}d	|jzd
z}|j
|j|d|���yy)N�vrfr�r�rbFr�r�Tr�r/zVRF:r0r1)
rTr�r�rGr�r�rLr�r�r�)	r$r'r�r��missing_netplan_vrf_linkr�r��hide_vrf�missing_system_vrf_links	         r�_display_vrfzNetplanStatus._display_vrf�s���h�h�u�o���'+�'I�'I�&�'Q�$�����(��4�F��D��H��y�y�!9�,�T�X�X�5�6I�I���>�>�#�H����7��y�y��*�4�8�8�3�4e�e��.������V�O�O�� ��,���
'+�&G�&G��&O�O�"�O��:�:�D�&�t�x�x�/�0]�]�F��K�K������-�(��
�Prc
��|jdg�}d}|r�|j|�}|D]�}d}d}|jr)||vr%d|jzdz}	d}
d}|jrLd}nI|jr'||vr#|j
}d|jzd	z}	d
}
d}nd|jzd
z}	d}
d}|r��|j
|	j||dk(rdnd||
|���|dz
}��|j|�rg|j|�x}rS|j}|D]A}
|j
d|jzdzj||dk(rdnd|
���|dz
}�Cyyy)NrPrrbFr�r�Tr�rr�r�r�r�zInterfaces:rr�z,} [red][highlight]{member}[/highlight][/red])r�r��member)rTr�rGr�r�r�rLr�r�r�r�)r$r'r�r��members_displayed�missing_netplan_interfacesr�r��hide_memberr�r�r��missing_membersrCs              r�_display_memberszNetplanStatus._display_members�s����h�h�|�R�(�����)-�)J�)J�6�)R�&��
+����#���9�9��,F�!F�0����9�:M�M�F�&(�O�$&�M��~�~�&*���Y�Y�3�*D�#D��9�9�D�.�t�x�x�7�8^�^�F�&3�O�$2�M�'����0��<�F�&(�O�$&�M�"��K�K����!�/@�A�/E�m�2�!�-�)�!0�!��&��*�%�7
+�:�>�>�&�!�"&�"B�"B�6�"J�J��J��z�z��-�+�F��K�K�!2�4�8�8�!;�<j�!j� r� r�!�/@�A�/E�m�2�%�!s�!��
&��*�%�
+�K�"rc��|jd�}|r3|jd|jzdzjd|���yy)N�activation_moder�r�zActivation Mode:r�)rTrLr�r�)r$r�r�s   r�_display_activation_modez&NetplanStatus._display_activation_mode�sL���h�h�(�)����K�K��D�H�H�,�[�8�@�@�(��A��
�rc�~�|j�}|j}t|j�d�D]�\}\}}|jr|j|k7r�%|jdj
|dd||jd����|t|�k7s�h|jr�u|j���y)Nr�u1{sign} [{col}]● {idx:>2}  {name} {type}[/{col}]�redrbr*)r�r�r�r�r*)	r�r�r�r�r'rLr�rT�len)r$r�r�r��	interface�
propertiess      r�_display_missing_interfacesz)NetplanStatus._display_missing_interfaces�s���!�@�@�B���z�z��.7�8J�8P�8P�8R�TU�.V�	�*�E�*�I�z��{�{�t�{�{�i�7���K�K�K�R�R������^�^�F�+�S��
���.�/�/�������
�	rc�.�t|�r�t|�}	tj|d�}|snN|D]H}|dj	dj|�d�j	dj|�d�|d<�J�it
|i|��St
|i|��S)Nrz[{}]rbz[/{}])rNr��
MATCH_TAGS�findall�replacer�rH)r$�args�kwargsr��tags�tags      rrIzNetplanStatus.plain_print�s����t�9��t�*�C��!�)�)�#�a�&�1�����E�C� ��V�^�^�F�M�M�#�,>��C�$+�G�G�N�N�3�,?��$D���F�E�	��#�(��(�(��d�%�f�%�%rNr��totalc����j|��_d�_d�_d�_�j
rd�_�j
s�j
|�|D�cgc]}|dk7s�	|||f��}}�jrtt�fd�|��}�j�}t|d�D�]E\}\}}	�jr�j|k7r�&�j||	��j||	��j||	��j!||	��j#||	��j%||	��j'||	��j)||	��j+||	��j-||	��j/|	��jr�j1|�s��
|t3|�k7st3|�dkDs��(�jr��6�j���H�j
r�j5�|t3|�z
}
|
dkDr,�j
s �jd	j7|
���j
r�js�jd
�yyycc}w)Nz[green]+[/green]z[red]-[/red]�18�20r�c�,���j|d�S)Nr)r�)r�r$s �rrz,NetplanStatus.pretty_print.<locals>.<lambda>s���t�~�~�a��d�/C�rr�rz8
{} inactive interfaces hidden. Use "--all" to show all.zn
Use [yellow]"--diff-only"[/yellow] to omit the information that is consistent between the system and Netplan.)rMrLr�r�r�rGr�r�r�rr�r�r'r�r�r�rrr,r5r;rArHrKr�rNrQr�)r$r�rZrJ�keyrPr�r�r'�ifconfig�hiddens`          r�pretty_printzNetplanStatus.pretty_print�s5����/�/��?���&��	�#��
�����9�9��D�H��y�y��&�&�t�,�37�X�3�#�AW�:W�s�D��I�&�X�
�X��>�>��f�%C�Z�P�Q�J�!�@�@�B��)2�:�q�)A�	"�%�E�%�F�H��{�{�t�{�{�f�4���*�*�6�8�<��%�%�f�h�7��&�&�v�x�8��'�'���9��$�$�V�X�6�� � ���2�� � ���2����v�x�0����f�h�/��!�!�&�(�3��)�)�(�3��>�>�T�^�^�F�%;��S��_�,��4F�0G�!�0K�UY�U`�U`��K�K�M�)	"�,�9�9��,�,�.���Z��(���A�:�d�i�i��K�K�S�Z�Z�[a�b�c��9�9�T�^�^��K�K�B�
�,�9��GYs�!
J�,	Jc��|jrd|_|jrd|_t|j|j�}|j
j
�}|jr�t|j��}t||�}|j|j�|_|dk(r/ttj|jt���y|dk(rWtj|jt��}tt!j"tj$|���y|dk(r-ttj|j'���y|dk(r-tt!j"|j'���y|j)|j'�|j*�y)NT)�rootdir�json)�cls�yaml)r�rGr!rr'r��lowerr�root_dirr
�get_diffr"rHre�dumpsr	rg�dump�loads�get_datarb�number_of_interfaces)r$rQ�
output_formatrRr&�
serializeds      rr3zNetplanStatus.command4s;���>�>��D�I��9�9��D�H�(����d�h�h�?�����)�)�+�
��9�9�.�t�}�}�E�M�)�,�
�F�J�(�1�1�$�+�+�>�D�O���&��d�j�j����o�F�G���&�(�!�Z�Z����_�M�
��d�i�i��
�
�:� 6�7�8���F�"��$�*�*�\�2�2�4�5�6�
�f�
$��$�)�)�L�1�1�3�4�5����l�3�3�5�|�7X�7X�Yr)N)9rrrr r8rM�dictrV�boolrZr2r�r`rcrerfrhrmrprrrurwr{rrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr,r5r;rArHrKrQrIr�intrbr3�
__classcell__)r%s@rrr2s����+��(�>�T���$�����S��C��TX�Y\�T]�����C��3��SV�����C��3��SV�����S��C��TX��]��S�	�]�h��c��h�i�$�s�)�i�f�T�#�Y�f�e�D��I�e�\��\�Y�S��5F�Y�X�C��4E�X�`�4�`�`�4�`�[�s�[�\��\�]��]�^�#�^�Z�c�Z�[�s�[�^�d�3�i�^�]�T�#�Y�]����
�4���2)��)�V�3��@B�C�B�H+/�S�+/�Z+,�Zm&�^�>�>�>++�s�++�Z��(&�5��5�c�5�4�5�n Zrr)�__doc__re�logging�re�netplan.netdefrrgrbrr[rrrr"r	r
�compilerSrF�rich.consoler�rich.highlighterr�
rich.themer
r�ImportError�debug�NetplanCommandrrrr�<module>r�s���$"���	�'���?�?�:��R�Z�Z�4�
5�
���
J�$�1� ��-���K�
bZ�E�(�(�bZ��	�J��G�M�M�H�I�J�s�A;�;B�B