
    g                     2   S r SSKrSSKrSSKrSSKJr  SSKrSSKJr  SSK	J
r
JrJr  SSKJrJr  \R                   " S5      rS	r SS
KJr  SSKJr  SSKJr   " S S\5      rSr " S S\R8                  5      rg! \ a    \R6                  " S5         N0f = f)znetplan status command line    N)NetplanRoute   )utils)NetplanConfigStateSystemConfigStateJSON)DiffJSONEncoderNetplanDiffStatez\[([a-z0-9]+)\].*\[\/\1\]F)Console)RegexHighlighter)Themec                        \ rS rSrSrSS/rSrg)NetplanHighlighter'   znetplan.z"(^|[\s\/])(?P<int>\d+)([\s:]?\s|$)z(?P<str>(\"|\').+(\"|\')) N)__name__
__module____qualname____firstlineno__
base_style
highlights__static_attributes__r       5/usr/share/netplan/netplan_cli/cli/commands/status.pyr   r   '   s    
1(
r   r   Tz4python3-rich not found, falling back to plain outputc            	         ^  \ rS rSrU 4S jrS rS rS\4S jrS\	4S jr
S\S	\S
\S\\   4S jrS\S	\S
\S\4S jrS\S	\S
\S\4S jrS\S	\S
\S\	4S jrS\\   4S jrS\\   4S jrS\\   4S jrS\\   4S jrS\\   4S jrS\4S jrS\\   4S jrS\\   4S jrS\	4S jrS\	4S jrS\4S jrS\4S jrS\4S jrS\4S jr S\4S jr!S\4S jr"S\\   4S jr#S\\   4S  jr$S\4S! jr%S\	4S" jr&S# r'S\4S$ jr(S\4S% jr)S\4S& jr*S\4S' jr+S( r,S) r-S* r.S+ r/S, r0S\4S- jr1S. r2S/ r3S0 r4S7S2\5S3\6SS14S4 jjr7S5 r8S6r9U =r:$ )8NetplanStatus2   c                 N   > [         TU ]  SSSS9  SU l        S U l        0 U l        g )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    r   r$   NetplanStatus.__init__3   s5    H%S" 	 	$ (*%r   c                    U R                   R                  SS[        S SS9  U R                   R                  SSSSS	9  U R                   R                  S
SSSS	9  U R                   R                  SSSSS9  U R                   R                  SSSS	9  U R                   R                  SSSS	9  U R                   R                  SSS9  U R                  U l        U R                  5         U R                  5         g )Nifname?zShow only this interface)nargstypedefaulthelpz-az--all
store_truez(Show all interface data (incl. inactive))actionr1   z-vz	--verbosezShow extra informationz-fz--formattabularz2Output in machine readable `json` or `yaml` format)r0   r1   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 /)r1   )parseradd_argumentstrcommandfunc
parse_argsrun_commandr(   s    r   runNetplanStatus.run;   s     3&@ 	! 	B  w|&P 	! 	R  {<&> 	! 	@  z9&Z 	! 	\  ,&h 	! 	j  |&m 	! 	o  &j 	! 	l LL	r   c           
          [         (       aY  [        SSSSSSSS.5      nU R                  (       a  [        SSSSSSSS.5      n[        [	        5       UUS	S
9nUR
                  nU$ U R                  nU$ )Nz	bold cyanyellowgrey62z
green boldzred boldzyellow boldbold)znetplan.intznetplan.strmutedonlineofflineunknown	highlightF)highlighterthemewidthemoji)RICH_OUTPUTr   diffr   r   printplain_print)r(   _console_widthrI   consolepprints        r   _create_pretty_print"NetplanStatus._create_pretty_printO   s    ;*'!&%(# E yy#+#+%*),!'  *<*>e$2%AG]]F  %%Fr   returnc                     U R                   (       aS  U R                   S   R                  U5      =n(       a.  UR                  S5      (       d  UR                  S5      (       a  U$ 0 $ )N
interfacessystem_statenetplan_stater&   getr(   r,   rM   s      r   _get_interface_diff!NetplanStatus._get_interface_diffn   sO    ??|488@@t@88N++txx/H/HK	r   c                 v    U R                   (       a(  U R                   R                  S5      =n(       a  X;   a  gg)Nmissing_interfaces_netplanTFrZ   )r(   r,   missings      r    _is_interface_missing_in_netplan.NetplanStatus._is_interface_missing_in_netplanu   s0    ??//--.JKKwK$r   r,   statepropertyc                     U R                   (       aG  U R                   S   R                  U5      =n(       a"  UR                  U0 5      R                  U/ 5      $ / $ NrW   rZ   r(   r,   rd   re   rM   s        r   _get_missing_property_list(NetplanStatus._get_missing_property_list|   sK    ??|488@@t@xxr*..x<<	r   c                     U R                   (       aG  U R                   S   R                  U5      =n(       a"  UR                  U0 5      R                  US5      $ g)NrW    rZ   rh   s        r   _get_missing_property_str'NetplanStatus._get_missing_property_str   sI    ??|488@@t@xxr*..x<<r   c                     U R                   (       aO  U R                   S   R                  U5      =n(       a*  UR                  U0 5      R                  U[        5       5      $ [        5       $ rg   )r&   r[   setrh   s        r   _get_missing_property_set'NetplanStatus._get_missing_property_set   sO    ??|488@@t@xxr*..x??ur   c                     U R                   (       aG  U R                   S   R                  U5      =n(       a"  UR                  U0 5      R                  US5      $ g)NrW   FrZ   rh   s        r   _get_missing_property_bool(NetplanStatus._get_missing_property_bool   sI    ??|488@@t@xxr*..x??r   c                 (    U R                  USS5      $ )NrY   missing_addressesri   r(   r,   s     r   _get_missing_netplan_addresses,NetplanStatus._get_missing_netplan_addresses   s    ..vH[\\r   c                 (    U R                  USS5      $ )NrX   missing_nameservers_addressesrx   ry   s     r   _get_missing_system_nameservers-NetplanStatus._get_missing_system_nameservers   s    ..v~Gfggr   c                 (    U R                  USS5      $ )NrY   r}   rx   ry   s     r    _get_missing_netplan_nameservers.NetplanStatus._get_missing_netplan_nameservers   s    ..vHghhr   c                 (    U R                  USS5      $ )NrY   missing_nameservers_searchrx   ry   s     r   _get_missing_netplan_search)NetplanStatus._get_missing_netplan_search   s    ..vHdeer   c                 (    U R                  USS5      $ )NrX   r   rx   ry   s     r   _get_missing_system_search(NetplanStatus._get_missing_system_search   s    ..v~Gcddr   c                 (    U R                  USS5      $ )NrX   missing_macaddressrm   ry   s     r   _get_missing_system_macaddress,NetplanStatus._get_missing_system_macaddress   s    --fnFZ[[r   c                 (    U R                  USS5      $ )NrY   missing_routesrq   ry   s     r   _get_missing_netplan_routes)NetplanStatus._get_missing_netplan_routes   s    --foGWXXr   c                 (    U R                  USS5      $ )NrX   r   r   ry   s     r   _get_missing_system_routes(NetplanStatus._get_missing_system_routes   s    --fnFVWWr   c                 (    U R                  USS5      $ )NrX   missing_dhcp4_addressrt   ry   s     r   _is_missing_dhcp4_address'NetplanStatus._is_missing_dhcp4_address       ..v~G^__r   c                 (    U R                  USS5      $ )NrX   missing_dhcp6_addressr   ry   s     r   _is_missing_dhcp6_address'NetplanStatus._is_missing_dhcp6_address   r   r   c                 (    U R                  USS5      $ )NrX   missing_bond_linkr   ry   s     r   _get_missing_system_bond_link+NetplanStatus._get_missing_system_bond_link   s    --fnFYZZr   c                 (    U R                  USS5      $ )NrY   r   r   ry   s     r   _get_missing_netplan_bond_link,NetplanStatus._get_missing_netplan_bond_link   s    --foGZ[[r   c                 (    U R                  USS5      $ )NrX   missing_bridge_linkr   ry   s     r   _get_missing_system_bridge_link-NetplanStatus._get_missing_system_bridge_link   s    --fnF[\\r   c                 (    U R                  USS5      $ )NrY   r   r   ry   s     r    _get_missing_netplan_bridge_link.NetplanStatus._get_missing_netplan_bridge_link   s    --foG\]]r   c                 (    U R                  USS5      $ )NrX   missing_vrf_linkr   ry   s     r   _get_missing_system_vrf_link*NetplanStatus._get_missing_system_vrf_link   s    --fnFXYYr   c                 (    U R                  USS5      $ )NrY   r   r   ry   s     r   _get_missing_netplan_vrf_link+NetplanStatus._get_missing_netplan_vrf_link   s    --foGYZZr   c                 (    U R                  USS5      $ )NrY   missing_interfacesrx   ry   s     r   _get_missing_netplan_members*NetplanStatus._get_missing_netplan_members   s    ..vH\]]r   c                 (    U R                  USS5      $ )NrX   r   rx   ry   s     r   _get_missing_system_members)NetplanStatus._get_missing_system_members   s    ..v~G[\\r   c                 `    U R                   (       a  U R                   R                  S0 5      $ 0 $ )Nmissing_interfaces_systemrZ   r<   s    r   _get_missing_system_interfaces,NetplanStatus._get_missing_system_interfaces   s&    ????&&'BBGG	r   c                     U R                  U5      (       a  gU R                  (       aR  U R                  S   R                  U5      =n(       a-  UR                  S5      (       d  UR                  S5      (       a  gg)NTrW   rX   rY   F)rb   r&   r[   r\   s      r   	_has_diffNetplanStatus._has_diff   s_    0088??|488@@t@88N++txx/H/Hr   c           
         UR                  S0 5      nU R                  SU R                  -   S-   R                  SUR                  SS5      (       a  SOSS	95        UR                  S
0 5      nUR                  S/ 5      nUR                  S5      nUR                  S/ 5      nU(       ad  [	        U5       HU  u  pxU R                  SU R                  -   S-   R                  US:X  a  SOSUU(       a  SR                  U5      OSS95        MW     U(       aK  [	        U5       H<  u  pxU R                  SU R                  -   S-   R                  US:X  a  SOSUS	95        M>     U R                  5         g )Nnetplan-global-state{title:>	} {value}zOnline state:rD   Fz[online]online[/online]z[offline]offline[/offline]titlevaluenameservers	addressesmodesearchz} {value}[muted]{mode}[/muted]r   DNS Addresses:rl    ({}))r   r   r   DNS Search:)r[   rR   PADformat	enumerate)	r(   dataglobal_statensdns_addrdns_mode
dns_searchivals	            r   _display_global_state#NetplanStatus._display_global_state   sY   xx 6;Z(4<<!/;/?/?%/P/P+Vr =  	 mR0R0v66(B/
#H-Z01QQYY./1f*"5=12 Z   . #J/Z0<DD+,6-r E   0
 	r   c                    UR                  SS5      S-   UR                  SS5      -   nSnUS:X  a  SnSnO
US	:X  a  S
nSnUR                  SS5      nUR                  S5      nUR                  S5      nUS:X  a  U(       a  USU-   S-   -  nOUS:X  a  U(       a  USU-   -  nSnUR                  S5      (       a   SR                  UR                  S5      5      OSn	Sn
SnU R                  (       ad  U R                  U5      (       a  U R                  nSnUS-  nO:SnUR                  S5      (       a   SR                  UR                  S5      5      OSn	U R
                  (       a  U R                  U5      (       aG  U R                  UR                  UUUR                  SS5      UUUUR                  SS5      U	U
S 9	5        g g )!N	operstateUNKNOWN/
adminstaterF   zUP/UPUPrD   z	DOWN/DOWNDOWNrE   r/   otherssidtunnel_modewifiz/""tunneluU   [{col}]●[/{col}] {idx:>2}: {name} {type} [{col}]{state}[/{col}] ({backend}{netdef})idz: [highlight]{}[/highlight]rl   uC   {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/   rd   r   netdefextra)r[   r   rM   rb   PLUS	diff_onlyr   rR   )r(   r,   r   rd   scolor	full_typer   r   r   r   r   r   s               r   _display_interface_header'NetplanStatus._display_interface_header   s   i036,PY9ZZGEFk!EFHHVW-	xxhh}-4$++,I("{#+,IhIMRV.55dhhtnE]_9944V<<yy^[[c:>((4..txx~6b~~!7!7KKHHWc*K8 & 
 
 "8r   c                 N   UR                  S5      =n(       Ga  SnU R                  U5      nSU R                  -   S-   nSnU R                  (       a-  U(       d&  SU R                  -   S-   nU R                  (       a  SnO6U R                  (       a%  U(       a  U R
                  nS	U R                  -   S
-   nU(       d  U R                  UR                  USUUR                  S5      (       a!  SR                  UR                  SS5      5      OSS95        U R                  (       a  U(       aw  U R                  nS	U R                  -   S-   nU R                  UR                  USUUR                  S5      (       a!  SR                  UR                  SS5      5      OSS95        g g g g g )N
macaddressFr   z} {mac}[muted]{vendor}[/muted]rl     [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])	r[   r   r   rM   r   r   rR   r   MINUS)r(   r,   r   r   hide_macaddressmissing_system_macaddressr   r   s           r   _display_mac_address"NetplanStatus._display_mac_address  so   ,//:/#O(,(K(KF(S%()IIFDyy!:,TXX56OO>>&*O8yy*48834kk"VOO("EIXXhEWEW7>>$((8R*@A]_	 ,   99!:::D.txx78kkFKK! 5IMRZI[I[w~~dhhx.DEac	 !0 !  ";9 # 0r   c                    UR                  S/ 5      nSnU(       Gaz  U R                  U5      nU GHb  nSnSn[        UR                  5       5      S   u  pU
R                  SS5      n/ nU
R                  S5      (       a  U
R                  S/ 5      nSnSnU(       a  SU;   a  SnS	nU	 S
U 3nU R                  (       a/  X;  a*  SU R
                  -   S-   nSnSnU R                  (       a  SnOKU R                  (       a(  X;   a#  U R                  nSU R
                  -   S-   nSnS	nOSU R
                  -   S-   nU(       a  GM  U R                  UR                  UUS:X  a  SOSU	UU(       a  SSR                  U5      -   S-   OSUUS95        US-  nGMe     U R                  U5      =n(       Ga  U R                  nUR                  S0 5      R                  S5      =n(       aF  U H@  n	U R                  SU R
                  -   S-   R                  UUS:X  a  SOSU	S95        US-  nMB     U R                  U5      (       a<  U R                  SU R
                  -   S-   R                  UUS:X  a  SOSS95        US-  nU R                  U5      (       a8  U R                  SU R
                  -   S-   R                  UUS:X  a  SOSS95        g g g )Nr   r   rl   F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   rX   rw   z(} [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])r[   rz   listitemsrM   r   r   r   rR   r   joinr]   r  r   r   )r(   r,   r   lstaddresses_displayedmissing_netplan_addressesobjr   hide_addressr  r   r  r	  highlight_starthighlight_endaddressr   rM   rw   s                      r   _display_ip_addresses#NetplanStatus._display_ip_addresses<  s   HH["-(,(K(KF(S%$ -a0	8R099W%%!IIgr2E"$ "%&3O$2MD&*99!I09:ffF&(O$&M~~'+YY7#G99D.txx78kkF&3O$2M'01ddF#|KK!.AQ.FlB%;@d499U#33C7b-) !0 !  (1,'O R ++F3343::D$(HH^R$@$D$DEX$YY Y+BKK!2488!;<f!f n n!.AQ.FlB !o ! 
 (1,' , --f55.txx78nnvv*=*B, w   $q(#--f55.txx78iiqq*=*B, r   6! 4r   c                    UR                  S/ 5      nSnU(       a  U R                  U5      nU H  nSnSnU R                  (       a/  Xe;  a*  SU R                  -   S-   n	Sn
SnU R                  (       a  SnOOU R                  (       a(  Xe;   a#  U R
                  nSU R                  -   S	-   n	S
n
SnOSU R                  -   S-   n	Sn
SnU(       a  M  U R                  U	R                  UUS:X  a  SOSUU
US95        US-  nM     U R                  U5      (       al  U R                  U5      =n(       aS  U R                  nU H@  nU R                  SU R                  -   S-   R                  UUS:X  a  SOSUS95        US-  nMB     g g g )Ndns_addressesr   rl   Fr   } {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  )r[   r   rM   r   r   r   rR   r   r   r~   r  )r(   r,   r   r  nameservers_displayedmissing_netplan_nameserversr   r   hide_nameserverr   r  r  r}   r  s                 r   _display_dns_addresses$NetplanStatus._display_dns_addresses  s   hh+ !*.*O*OPV*W'"'99!G09:MMF&(O$&M~~*.YY3#E99D.txx78^^F&3O$2M'0<F&(O$&M&KK!2G12L.RT!-) !0 !  *Q.)7 : >>&!!040T0TU[0\\,\zz7BKK!2488!;<f!f n n!2G12L.RT !o ! 
 *Q.) 8 ] "r   c                    UR                  S/ 5      nSnU(       a  U R                  U5      n[        U5       H  u  pgSnSn	U R                  (       a/  Xu;  a*  SU R                  -   S-   n
SnSnU R
                  (       a  Sn	OOU R                  (       a(  Xu;   a#  U R                  nSU R                  -   S	-   n
S
nSnOSU R                  -   S-   n
SnSnU	(       a  M  U R                  U
R                  UUS:X  a  SOSUUUS95        US-  nM     U R                  U5      (       al  U R                  U5      =n(       aS  U R                  nU H@  nU R                  SU R                  -   S-   R                  UUS:X  a  SOSUS95        US-  nMB     g g g )Nr   r   rl   Fr   r$  Tr   r%  r  r  r   r   r   r&  r  z,} [red][highlight]{domain}[/highlight][/red])r   r   domain)r[   r   r   rM   r   r   r   rR   r   r   r   r  )r(   r,   r   r  searches_displayedmissing_netplan_searchr   r   r   hide_searchr   r  r  r   r-  s                  r   _display_dns_search!NetplanStatus._display_dns_search  s   hh|R(%)%E%Ef%M"#C.#99!B09:MMF&(O$&M~~&*YY3#@99D.txx78^^F&3O$2M'0<F&(O$&M"{KK!/AQ/FmB!-) !0 !  '!+&7 ): >>&!!-1-L-LV-TT)Tzz8FKK!2488!;<j!j r r!/AQ/FmB% !s ! 
 '!+& 9 U "r   c                 
   UR                  S/ 5      nU R                  U5      nU R                  U5      nSnU(       Ga(  U R                  (       d  [        R
                  " 5       U l        [        S S 5      nU Vs/ s H  oR                  U5      PM     n	nU R                  (       d  [        S U	5      n	U	 GH  nSn
SnSnUR                  S:X  a  SnSnSnUR                  (       a  S	UR                  -   nSnUR                  (       a  S
UR                  -   nSnUR                  [        R                  :  a  S[!        UR                  5      -   nSnU R                  (       aO  UR"                  S:  a?  SR%                  U R                  R                  UR"                  UR"                  5      5      n/ nUR&                  (       a-  UR&                  S:w  a  UR&                  nUR)                  U5        UR*                  (       a-  UR*                  S:w  a  UR*                  nUR)                  U5        UR,                  (       a-  UR,                  S:w  a  UR,                  nUR)                  U5        SnU R.                  (       a/  X;  a*  SU R0                  -   S-   nSnSnU R2                  (       a  Sn
OLU R.                  (       a)  X;   a$  U R4                  nSU R0                  -   S-   nUS-  nOSU R0                  -   S-   nU
(       a  GMP  U R7                  UR%                  UUS:X  a  SOSUR                  UUUUU(       a  SSR9                  U5      -   S-   OSUUS9
5        US-  nGM     U R.                  (       Ga  U GH  nSnUR                  (       a  S	UR                  -   nSnUR                  (       a  S
UR                  -   nSnUR                  [        R                  :  a  S[!        UR                  5      -   nSnU R                  (       aO  UR"                  S:  a?  SR%                  U R                  R                  UR"                  UR"                  5      5      n/ nUR*                  (       a-  UR*                  S:w  a  UR*                  nUR)                  U5        UR,                  (       a-  UR,                  S:w  a  UR,                  nUR)                  U5        U R:                  nSU R0                  -   S-   nU R7                  UR%                  UUS:X  a  SOSUR                  UUUUU(       a  SSR9                  U5      -   S-   OSSSS9
5        US-  nGM     g g s  snf )Nroutesr   c                      U R                   S:H  $ )N   )table)rs    r   <lambda>/NetplanStatus._display_routes.<locals>.<lambda>  s    !''S.r   Frl   r0   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]zRoutes:r  r  r  )
r   r   toviasrcmetricr7  r   r  r  r  z=} {start}[red]{to}{via}{src}{metric}{table}{extra}[/red]{end})r[   r   r   r'   r   route_table_lookupr
   _system_route_to_netplanverbosefilterr>  r?  	from_addrrA  r   _METRIC_UNSPEC_r7   r7  r   protocolappendscoper/   rM   r   r   r   rR   r  r  )r(   r,   r   r  missing_netplan_routesmissing_system_routesroutes_displayed
diff_staterouter4  
hide_routedefault_startdefault_endr?  r@  rA  r7  r   protorJ  r/   r   r   s                          r   _display_routesNetplanStatus._display_routes  sz   hhx$!%!A!A&!I $ ? ? G00050H0H0J-)$5JNQRcU99%@cFR<< 8&A"
 " 88y($1M"0K99!EII-C??"U__4C<<,">">>'#ell*;;F<<EKK!O'..t/L/L/P/PQVQ\Q\^c^i^i/jkE>>enn&@!NNELL';;5;;(#:!KKELL'::%**	"9 ::DLL&99!D09:vvF$&M"$K~~%)
YY5#B99D.txx78kkFGGF'01ttF!zKK!+;q+@ib 88%#;@d499U#33C7b+' !. 
!) 
* %)$s  v 999.99!EII-C??"U__4C<<,">">>'#ell*;;F<<EKK!O'..t/L/L/P/PQVQ\Q\^c^i^i/jkE;;5;;(#:!KKELL'::%**	"9 ::DLL&zz*48834ssFMM'71'<)"xx!7<$tyy//3"'& * 
( 
) !A% G /  Ss   :Uc                 j   UR                  S5      nU(       a  U R                  U5      nSU R                  -   S-   nSnSnU R                  (       a-  U(       d&  SU R                  -   S-   nU R                  (       a  SnO8U R                  (       a'  U(       a   U R
                  nS	U R                  -   S
-   nUnU(       d   U R                  UR                  USUS95        U R                  U5      =n(       a?  U R                  nS	U R                  -   S-   nU R                  UR                  USUS95        g g )Nbridger   r   rl   Fr   r$  Tr   /} [highlight][green]{value}[/green][/highlight]zBridge:r   r   r   +} [highlight][red]{value}[/red][/highlight])
r[   r   r   rM   r   r   rR   r   r   r  )	r(   r,   r   r   missing_netplan_bridge_linkr   r   hide_bridgemissing_system_bridge_links	            r   _display_bridgeNetplanStatus._display_bridgeI  s"   hhx *.*O*OPV*W'(4FDKyy!<,TXX56II>>"&K:yy*48834ee1VOO# ,  
 *.)M)Mf)UU%U::D&txx/0]]FKK0 (   Vr   c                 j   UR                  S5      nU(       a  U R                  U5      nSU R                  -   S-   nSnSnU R                  (       a-  U(       d&  SU R                  -   S-   nU R                  (       a  SnO8U R                  (       a'  U(       a   U R
                  nS	U R                  -   S
-   nUnU(       d   U R                  UR                  USUS95        U R                  U5      =n(       a?  U R                  nS	U R                  -   S-   nU R                  UR                  USUS95        g g )Nbondr   r   rl   Fr   r$  Tr   rX  zBond:rY  rZ  )
r[   r   r   rM   r   r   rR   r   r   r  )	r(   r,   r   r   missing_netplan_bond_linkr   r   	hide_bondmissing_system_bond_links	            r   _display_bondNetplanStatus._display_bondh  s!   hhv(,(K(KF(S%(4FDIyy!:,TXX56II>> $I8yy*48834ee/VOO! ,  
 (,'I'I&'QQ#Q::D&txx/0]]FKK. (   Rr   c                 j   UR                  S5      nU(       a  U R                  U5      nSU R                  -   S-   nSnSnU R                  (       a-  U(       d&  SU R                  -   S-   nU R                  (       a  SnO8U R                  (       a'  U(       a   U R
                  nS	U R                  -   S
-   nUnU(       d   U R                  UR                  USUS95        U R                  U5      =n(       a?  U R                  nS	U R                  -   S-   nU R                  UR                  USUS95        g g )Nvrfr   r   rl   Fr   r$  Tr   rX  zVRF:rY  rZ  )
r[   r   r   rM   r   r   rR   r   r   r  )	r(   r,   r   r   missing_netplan_vrf_linkr   r   hide_vrfmissing_system_vrf_links	            r   _display_vrfNetplanStatus._display_vrf  s    hhuo'+'I'I&'Q$(4FDHyy!9,TXX56II>>#H7yy*48834ee.VOO  ,  
 '+&G&G&OO"O::D&txx/0]]FKK- (   Pr   c                    UR                  S/ 5      nSnU(       a  U R                  U5      nU H  nSnSnU R                  (       a/  Xe;  a*  SU R                  -   S-   n	Sn
SnU R                  (       a  SnOOU R                  (       a(  Xe;   a#  U R
                  nSU R                  -   S	-   n	S
n
SnOSU R                  -   S-   n	Sn
SnU(       a  M  U R                  U	R                  UUS:X  a  SOSUU
US95        US-  nM     U R                  U5      (       al  U R                  U5      =n(       aS  U R                  nU H@  nU R                  SU R                  -   S-   R                  UUS:X  a  SOSUS95        US-  nMB     g g g )NrW   r   rl   Fr   r$  Tr   r%  r  r  r   r   zInterfaces:r&  r  z,} [red][highlight]{member}[/highlight][/red])r   r   member)r[   r   rM   r   r   r   rR   r   r   r   r  )r(   r,   r   r  members_displayedmissing_netplan_interfacesr   r   hide_memberr   r  r  missing_membersro  s                 r   _display_membersNetplanStatus._display_members  s   hh|R()-)J)J6)R&#99!F09:MMF&(O$&M~~&*YY3#D99D.txx78^^F&3O$2M'0<F&(O$&M"{KK!/@A/Em2!-) !0 !  &*%7 : >>&!!"&"B"B6"JJJzz-FKK!2488!;<j!j r r!/@A/Em2% !s ! 
 &*% . K "r   c                     UR                  S5      nU(       a0  U R                  SU R                  -   S-   R                  SUS95        g g )Nactivation_moder   r   zActivation Mode:r   )r[   rR   r   r   )r(   r   r   s      r   _display_activation_mode&NetplanStatus._display_activation_mode  sL    hh()KKDHH,[8@@( A   r   c                    U R                  5       nU R                  n[        UR                  5       S5       H  u  nu  pEU R                  (       a  U R                  U:w  a  M+  U R                  SR                  USSUUR                  S5      S95        U[        U5      :w  d  Mm  U R                  (       a  M  U R                  5         M     g )Nr  u1   {sign} [{col}]● {idx:>2}  {name} {type}[/{col}]redrl   r/   )r   r   r   r   r/   )	r   r  r   r  r,   rR   r   r[   len)r(   r   r   r   	interface
propertiess         r   _display_missing_interfaces)NetplanStatus._display_missing_interfaces  s    !@@Bzz.78J8P8P8RTU.V*E*I{{t{{i7KKKRR^^F+ S   .// /Wr   c                 H   [        U5      (       a  [        U5      n [        R                  US   5      nU(       d  OQU HI  nUS   R	                  SR                  U5      S5      R	                  SR                  U5      S5      US'   MK     Mq  [        U0 UD6$ [        U0 UD6$ )Nr   z[{}]rl   z[/{}])r|  r  
MATCH_TAGSfindallreplacer   rN   )r(   argskwargsr  tagstags         r   rO   NetplanStatus.plain_print  s    t99t*C!))#a&1C V^^FMM#,>C$+GGNN3,?$D F  	  #(((d%f%%r   Nr   totalc                   ^  T R                  U5      T l        ST l        ST l        ST l        T R
                  (       a  ST l        T R
                  (       d  T R                  U5        U Vs/ s H  oDS:w  d  M
  XAU   4PM     nnT R                  (       a  [        [        U 4S jU5      5      nT R                  5       n[        US5       GHV  u  nu  pT R                  (       a  T R                  U:w  a  M,  T R                  X5        T R                  X5        T R                  X5        T R!                  X5        T R#                  X5        T R%                  X5        T R'                  X5        T R)                  X5        T R+                  X5        T R-                  X5        T R/                  U	5        T R                  (       a  T R1                  U5      (       d  GM  U[3        U5      :w  d  [3        U5      S:  d  GM2  T R                  (       a  GMF  T R                  5         GMY     T R
                  (       a  T R5                  5         U[3        U5      -
  n
U
S:  a1  T R
                  (       d   T R                  S	R7                  U
5      5        T R
                  (       a$  T R                  (       d  T R                  S
5        g g g s  snf )Nz[green]+[/green]z[red]-[/red]1820r   c                 ,   > TR                  U S   5      $ )Nr   )r   )r   r(   s    r   r9  ,NetplanStatus.pretty_print.<locals>.<lambda>  s    t~~ad/Cr   r  r   z8
{} 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.)rS   rR   r   r  r   rM   r   r   r  rE  r   r   r,   r   r  r   r*  r1  rT  r^  re  rl  rt  rx  r   r|  r  r   )r(   r   r  rP   keyrW   r   r   r,   ifconfighiddens   `          r   pretty_printNetplanStatus.pretty_print  s!   //?&	#
99 DH yy&&t, 37X$3AW:W&sI&$
X>>f%CZPQJ!@@B)2:q)A%E%F{{t{{f4**6<%%f7&&v8''9$$V6  2  2v0f/!!&3))(3>>T^^F%;%;S_,4F0G!0KUYU`U`U`KKM) *B, 99,,.Z(A:diiKKSZZ[abc99T^^KK B ,9G Ys   +	K8
Kc                    U R                   (       a  SU l        U R                  (       a  SU l        [        U R                  U R                  5      nU R
                  R                  5       nU R                  (       a  [        U R                  S9n[        X5      nUR                  U R                  5      U l        US:X  a-  [        [        R                  " U R                  [        S95        g US:X  aW  [        R                  " U R                  [        S9n[        [         R"                  " [        R$                  " U5      5      5        g US:X  a.  [        [        R                  " UR'                  5       5      5        g US:X  a.  [        [         R"                  " UR'                  5       5      5        g U R)                  UR'                  5       UR*                  5        g )NT)rootdirjson)clsyaml)r   rM   r%   r   r,   r   lowerr   root_dirr
   get_diffr&   rN   r  dumpsr	   r  dumploadsget_datar  number_of_interfaces)r(   rX   output_formatrY   rN  
serializeds         r   r8   NetplanStatus.command4  s9   >>DI 99DH(dhh?))+99.t}}EM),FJ(11$++>DO&djjoFG&(!ZZ_M
dii

: 678F"$**\22456f$$))L11345l335|7X7XYr   )	r  r   r   r%   rM   r9   rR   r'   r&   )N);r   r   r   r   r$   r=   rS   dictr]   boolrb   r7   r  ri   rm   rp   rq   rt   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r*  r1  rT  r^  re  rl  rt  rx  r  rO   r   intr  r8   r   __classcell__)r)   s   @r   r   r   2   s   +(>T $  S C TXY\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 [^d3i ^]T#Y ] 
4 2) )V3 @BC BH+/S +/Z+,Zm&^>>>++s ++Z(&5 5c 54 5n Z  Zr   r   )__doc__r  loggingrenetplan.netdefr   r  rl   r   rd   r   r   r   r&   r	   r
   compiler  rL   rich.consoler   rich.highlighterr   
rich.themer   r   ImportErrordebugNetplanCommandr   r   r   r   <module>r     s   $ "   	 '   ? ? : ZZ45
J$1 -  K
bZE(( bZ	  JMMHIJs   A; ;BB