*Ce0dZddlZddlZddlZddlmZddlZddlmZddl m Z m Z m Z ddl mZmZej dZd Z dd lmZdd lmZdd lmZGd deZdZGddej8Zy#e$rej6dY/wxYw)znetplan status command lineN) NetplanRoute)utils)NetplanConfigStateSystemConfigStateJSON)DiffJSONEncoderNetplanDiffStatez\[([a-z0-9]+)\].*\[\/\1\]F)Console)RegexHighlighter)ThemeceZdZdZddgZy)NetplanHighlighterznetplan.z"(^|[\s\/])(?P\d+)([\s:]?\s|$)z(?P(\"|\').+(\"|\'))N)__name__ __module__ __qualname__ base_style highlights5/usr/share/netplan/netplan_cli/cli/commands/status.pyrr's 1 ( rrTz4python3-rich not found, falling back to plain outputc \eZdZfdZdZdZdefdZdefdZ de de d e de e fd Z de de d e de fd Z de de d e defd Zde de d e defd Zde e fdZde e fdZde e fdZde e fdZde e fdZde fdZdeefdZdeefdZdefdZdefdZde fdZde fdZde fdZde fdZde fdZ de fdZ!de e fdZ"de e fdZ#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/Z3d5d1e4d2e5dd0fd3Z6d4Z7xZ8S)6 NetplanStatuscTt|dddd|_d|_i|_y)Nstatusz,Query networking state of the running systemT) command_id descriptionleafF)super__init__all state_diffroute_lookup_table_names)self __class__s rr zNetplanStatus.__init__3s5 H%S"  $(*%rc|jjddtdd|jjdddd |jjd d dd |jjd ddd|jjddd |jjddd |jjdd|j|_|j |j y)Nifname?zShow only this interface)nargstypedefaulthelpz-az--all store_truez(Show all interface data (incl. inactive))actionr,z-vz --verbosezShow extra informationz-fz--formattabularz2Output 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_argumentstrcommandfunc parse_args run_commandr$s rrunzNetplanStatus.run;s   3&@ ! B   w|&P ! R   {<&> ! @   z9&Z ! \   ,&h ! j   |&m ! o   &j ! lLL   rc trWtdddddddd}|jrtdddddddd}tt ||d }|j }|S|j }|S) Nz bold cyanyellowgrey62z green boldzred boldz yellow boldbold)z netplan.intz netplan.strmutedonlineofflineunknown highlightF) highlighterthemewidthemoji) RICH_OUTPUTr diffr rprint plain_print)r$_console_widthrCconsolepprints r_create_pretty_printz"NetplanStatus._create_pretty_printOs *'!&%(#Eyy#+#+%*),!'*<*>e$2%AG]]F %%F rreturnc|jrD|jdj|x}r$|jds|jdr|SiS)N interfaces system_state netplan_stater"getr$r'rGs r_get_interface_diffz!NetplanStatus._get_interface_diffnsI ??|488@@t@88N+txx/HK rc`|jr"|jjdx}r||vryy)Nmissing_interfaces_netplanTFrS)r$r'missings r _is_interface_missing_in_netplanz.NetplanStatus._is_interface_missing_in_netplanus2 ??//--.JKKwKW$rr'statepropertyc|jrB|jdj|x}r"|j|ij|gSgSNrPrSr$r'r[r\rGs r_get_missing_property_listz(NetplanStatus._get_missing_property_list|sK ??|488@@t@xxr*..x<< rc|jrB|jdj|x}r"|j|ij|dSy)NrPrSr_s r_get_missing_property_strz'NetplanStatus._get_missing_property_strsI ??|488@@t@xxr*..x<<rc|jrJ|jdj|x}r*|j|ij|tStSr^)r"rTsetr_s r_get_missing_property_setz'NetplanStatus._get_missing_property_setsO ??|488@@t@xxr*..x??u rc|jrB|jdj|x}r"|j|ij|dSy)NrPFrSr_s r_get_missing_property_boolz(NetplanStatus._get_missing_property_boolsI ??|488@@t@xxr*..x??rc(|j|ddS)NrRmissing_addressesr`r$r's r_get_missing_netplan_addressesz,NetplanStatus._get_missing_netplan_addressess..vH[\\rc(|j|ddS)NrQmissing_nameservers_addressesrkrls r_get_missing_system_nameserversz-NetplanStatus._get_missing_system_nameserverss..v~Gfggrc(|j|ddS)NrRrorkrls r _get_missing_netplan_nameserversz.NetplanStatus._get_missing_netplan_nameserverss..vHghhrc(|j|ddS)NrRmissing_nameservers_searchrkrls r_get_missing_netplan_searchz)NetplanStatus._get_missing_netplan_searchs..vHdeerc(|j|ddS)NrQrtrkrls r_get_missing_system_searchz(NetplanStatus._get_missing_system_searchs..v~Gcddrc(|j|ddS)NrQmissing_macaddressrcrls r_get_missing_system_macaddressz,NetplanStatus._get_missing_system_macaddresss--fnFZ[[rc(|j|ddS)NrRmissing_routesrfrls r_get_missing_netplan_routesz)NetplanStatus._get_missing_netplan_routess--foGWXXrc(|j|ddS)NrQr}r~rls r_get_missing_system_routesz(NetplanStatus._get_missing_system_routess--fnFVWWrc(|j|ddS)NrQmissing_dhcp4_addressrhrls r_is_missing_dhcp4_addressz'NetplanStatus._is_missing_dhcp4_address..v~G^__rc(|j|ddS)NrQmissing_dhcp6_addressrrls r_is_missing_dhcp6_addressz'NetplanStatus._is_missing_dhcp6_addressrrc(|j|ddS)NrQmissing_bond_linkrzrls r_get_missing_system_bond_linkz+NetplanStatus._get_missing_system_bond_links--fnFYZZrc(|j|ddS)NrRrrzrls r_get_missing_netplan_bond_linkz,NetplanStatus._get_missing_netplan_bond_links--foGZ[[rc(|j|ddS)NrQmissing_bridge_linkrzrls r_get_missing_system_bridge_linkz-NetplanStatus._get_missing_system_bridge_links--fnF[\\rc(|j|ddS)NrRrrzrls r _get_missing_netplan_bridge_linkz.NetplanStatus._get_missing_netplan_bridge_links--foG\]]rc(|j|ddS)NrQmissing_vrf_linkrzrls r_get_missing_system_vrf_linkz*NetplanStatus._get_missing_system_vrf_links--fnFXYYrc(|j|ddS)NrRrrzrls r_get_missing_netplan_vrf_linkz+NetplanStatus._get_missing_netplan_vrf_links--foGYZZrc(|j|ddS)NrRmissing_interfacesrkrls r_get_missing_netplan_membersz*NetplanStatus._get_missing_netplan_memberss..vH\]]rc(|j|ddS)NrQrrkrls r_get_missing_system_membersz)NetplanStatus._get_missing_system_memberss..v~G[\\rcV|jr|jjdiSiS)Nmissing_interfaces_systemrSr7s r_get_missing_system_interfacesz,NetplanStatus._get_missing_system_interfacess& ????&&'BBG G rc|j|ry|jrC|jdj|x}r#|jds|jdryy)NTrPrQrRF)rZr"rTrUs r _has_diffzNetplanStatus._has_diffsV  0 0 8 ??|488@@t@88N+txx/Hrc |jdi}|jd|jzdzjd|jddrdnd |jd i}|jd g}|jd }|jd g}|r`t |D]R\}}|jd|jzdzj|dk(rdnd||rdj|ndT|rLt |D]>\}}|jd|jzdzj|dk(rdnd| @|jy)Nnetplan-global-state{title:> } {value}z Online state:r>Fz[online]online[/online]z[offline]offline[/offline]titlevalue nameservers addressesmodesearchz} {value}[muted]{mode}[/muted]rDNS Addresses:rb ({}))rrr DNS Search:)rTrLPADformat enumerate) r$data global_statensdns_addrdns_mode dns_searchivals r_display_global_statez#NetplanStatus._display_global_statesdxx 6;  Z(4<<!/;/?/?%/P+Vr=   mR 0 R0v66(B/ #H- 3 Z01QQYY./1f*"5=12Z  #J/ 3 Z0<DD+,6-rE  rc6|jdddz|jddz}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}|jdr dj|jdnd} d} d} |jrZ|j|r|j} d}|dz }n5d}|jdr dj|jdnd} |j r|j |rJ|j|j| ||jdd||||jdd| | yy)!N operstateUNKNOWN/ adminstater@zUP/UPUPr>z DOWN/DOWNDOWNr?r*otherssid tunnel_modewifiz/""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) signcolidxnamer*r[rnetdefextra)rTrrGrZPLUS diff_onlyrrL) r$r'rr[scolor full_typerrrrrrs r_display_interface_headerz'NetplanStatus._display_interface_headersi036,PY9ZZ G EF k !EFHHVW- xxhh}-  4 $++ ,I ( "{ # + ,IhIMRV.55dhhtnE]_ 9944V<yy^[[c:>((4.txx~6b~~!7 KK HHWc*K8&  "8rc |jdx}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 dnd|jrx|ru|j}d |jzdz}|j |j|d||jd r!d j|jd dndyyyyy)N macaddressFrz} {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)rrmacrz1} [red][highlight]{mac}{vendor}[/highlight][/red]) rTr{rrGrrrLrMINUS)r$r'rrhide_macaddressmissing_system_macaddressrrs r_display_mac_addressz"NetplanStatus._display_mac_addresssh,/ /: /#O(,(K(KF(S %()IIFDyy!:,TXX56OO>>&*O8yy*48834kk" VOO("EIXXhEW7>>$((8R*@A]_ ,99!:::D.txx78kkFKK! 5IMRZI[w~~dhhx.DEac !0!";9# 0rc |jdg}d}|rR|j|}|D];}d}d}t|jd\} } | jdd} g} | jdr| 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}|jdijdx}rF|D]A} |jd|j zdzj||dk(rdnd| |dz }C|j|r>|jd|j zdzj||dk(rdnd|dz }|j|r:|jd|j zdzj||dk(rdndyyy)NrrrbFprefixflagsdhcp [highlight] [/highlight]rrz*} {start}{ip}/{prefix}{end}{extra}[/muted]Trz1} [green]{start}{ip}/{prefix}{extra}{end}[/green]rz1} {start}{ip}/{prefix}{end}[muted]{extra}[/muted]z Addresses: (, ))rriprrstartendrQrjz(} [highlight][red]{ip}[/red][/highlight]rrrz4} [highlight][red]0.0.0.0/0 (dhcp)[/red][/highlight])rrz/} [highlight][red]::/0 (dhcp)[/red][/highlight])rTrmlistitemsrGrrrrLrjoinrVrrr)r$r'rlstaddresses_displayedmissing_netplan_addressesobjr hide_addressrrrrhighlight_start highlight_endaddressrrGrjs r_display_ip_addressesz#NetplanStatus._display_ip_addresses<sHH["- (,(K(KF(S %' -$  -a0 E8R099W%!IIgr2E"$ " %&3O$2MD&*990I!I09:ffF&(O$&M~~'+ YY7.G#G99D.txx78kkF&3O$2M'01ddF#KK!.AQ.FlB%;@d499U#33C7b-)!0!(1,'O' -R++F3 34 3::D$(HH^R$@$D$DEX$YY Y+-BKK!2488!;>& !040T0TU[0\\,\zz7/BKK!2488!;>& !-1-L-LV-TT)Tzz8,FKK!2488!;z/NetplanStatus._display_routes..s!''S.rFrbr+rrz via z from z metric z table {}kernelglobalunicastrz:} {start}{to}{via}{src}{metric}{table}{end}{extra}[/muted]Trz1} [green][highlight]{start}{to}{via}{src}{metric}z'{table}{end}{extra}[/highlight][/green]rzA} {start}{to}{via}{src}{metric}{table}{end}[muted]{extra}[/muted]zRoutes:rrr) rrtoviasrcmetricrrrrrz=} {start}[red]{to}{via}{src}{metric}{table}{extra}[/red]{end})rTrrr#rroute_table_lookupr _system_route_to_netplanverbosefilterrr from_addrrr_METRIC_UNSPEC_r2rrprotocolappendscoper*rGrrrrLrr)r$r'rrmissing_netplan_routesmissing_system_routesroutes_displayed diff_staterouter  hide_route default_start default_endrrrrrprotor"r*rrs r_display_routeszNetplanStatus._display_routesshhx$!%!A!A&!I $ ? ? G 00050H0H0J-)$5JNQRUj99%@RFR<< 8&A9 *" "  88y($1M"0K99!EII-C??"U__4C<<,">">>'#ell*;;F<>enn&@!NNELL';;5;;(#:!KKELL'::%** "9 ::DLL&99.D!D09:vvF$&M"$K~~%) YY5,B#B99D.txx78kkFGGF'01ttF!KK !+;q+@ib 88%#;@d499U#33C7b+'!. !) *%)$s9 *v 99.# &99!EII-C??"U__4C<<,">">>'#ell*;;F<>"&K:yy*48834ee1 VOO#, *.)M)Mf)U U % U::D&txx/0]]F KK0(  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)NbondrrrbFrrTrr/zBond:r0r1) rTrrrGrrrLrrr) r$r'rrmissing_netplan_bond_linkrr hide_bondmissing_system_bond_links r _display_bondzNetplanStatus._display_bondhs hhv (,(K(KF(S %(4FDIyy!:,TXX56II>> $I8yy*48834ee/ VOO!, (,'I'I&'Q Q # Q::D&txx/0]]F KK.(  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)NvrfrrrbFrrTrr/zVRF:r0r1) rTrrrGrrrLrrr) r$r'rrmissing_netplan_vrf_linkrrhide_vrfmissing_system_vrf_links r _display_vrfzNetplanStatus._display_vrfshhuo '+'I'I&'Q $(4FDHyy!9,TXX56II>>#H7yy*48834ee. VOO , '+&G&G&O O " O::D&txx/0]]F KK-(  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)NrPrrbFrrTrrrrrrz Interfaces:rrz,} [red][highlight]{member}[/highlight][/red])rrmember) rTrrGrrrrLrrrr)r$r'rrmembers_displayedmissing_netplan_interfacesrr hide_memberrrrmissing_membersrCs r_display_memberszNetplanStatus._display_membersshh|R( )-)J)J6)R & +# 99,F!F09:MMF&(O$&M~~&* YY3*D#D99D.txx78^^F&3O$2M'0>& !"&"B"B6"JJJzz-+FKK!2488!;2} {name} {type}[/{col}]redrbr*)rrrrr*) rrrrr'rLrrTlen)r$rrr interface propertiess r_display_missing_interfacesz)NetplanStatus._display_missing_interfacess!@@Bzz.78J8P8P8RTU.V  *E*Iz{{t{{i7 KKKRR^^F+ S .//   rc t|ryt|}tj|dD]H}|dj dj |dj dj |d|d<Jt |i|St |i|S)Nrz[{}]rbz[/{}])rNr MATCH_TAGSfindallreplacerrH)r$argskwargsrtags rrIzNetplanStatus.plain_prints t9t*C!))#a&1 AQ c(:B? 's(;R @A A#(( (d%f%%rNrtotalcj|_d_d_d_j rd_j sj ||Dcgc]}|dk7s |||f}}jrttfd|}j}t|dD]E\}\}} jrj|k7r&j|| j|| j|| j!|| j#|| j%|| j'|| j)|| j+|| j-|| j/| jrj1|s |t3|k7st3|dkDs(jr6jHj rj5|t3|z } | dkDr,j s jd j7| j rjsjd yyycc}w) Nz[green]+[/green]z [red]-[/red]1820rc,j|dS)Nr)r)rr$s rrz,NetplanStatus.pretty_print.. st~~ad/Crrrz8 {} 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.)rMrLrrrrGrrrrrrr'rrrrr r,r5r;rArHrKrrNrQr) r$rrYrJkeyrPrrr'ifconfighiddens ` r pretty_printzNetplanStatus.pretty_prints5//? & #  99DHyy  & &t ,37X3#AW:WsDI&X X >>f%CZPQJ!@@B)2:q)A " %E%FH{{t{{f4  * *68 <  % %fh 7  & &vx 8  ' ' 9  $ $VX 6   2   2   vx 0   fh /  ! !&( 3  ) )( 3>>T^^F%;S_,4F0G!0KUYU`U`KKM) ", 99  , , .Z( A:dii KKSZZ[ab c 99T^^ KKB ,9GYs ! J, Jc|jrd|_|jrd|_t|j|j}|j j }|jrt|j}t||}|j|j|_ |dk(r/ttj|jty|dk(rWtj|jt}tt!j"tj$|y|dk(r-ttj|j'y|dk(r-tt!j"|j'y|j)|j'|j*y)NT)rootdirjson)clsyaml)rrGr!rr'rlowerrroot_dirr get_diffr"rHrddumpsr rfdumploadsget_dataranumber_of_interfaces)r$rQ output_formatrRr& serializeds rr3zNetplanStatus.command0s; >>DI 99DH(dhh?  ))+ 99.t}}EM), FJ(11$++>DO&djjoFG&(!ZZ_M dii : 678 F " $**\2245 6 f $ $))L1134 5   l335|7X7X Yr)N)9rrrr r8rMdictrVboolrZr2rr`rcrerfrhrmrprrrurwr{rrrrrrrrrrrrrrrrrrrrr r,r5r;rArHrKrQrIrintrar3 __classcell__)r%s@rrr2s+(>T$SCTXY\T] C3SV C3SV SCTX ]S ]hchi$s)ifT#YfeDIe\\YS5FYXC 4EX`4``4`[s[\\]]^#^ZcZ[s[^d3i^]T#Y] 42))V3@BCBH+/S+/Z+,Zm&^>>>++s++Z(&55c545n Zrr)__doc__rdloggingrenetplan.netdefrrfrbrr[rrrr"r r compilerSrF rich.consoler rich.highlighterr rich.themer r ImportErrordebugNetplanCommandrrrrrs$"  ' ??:RZZ4 5   J$1 - K ^ ZE((^ Z JGMMHIJsA;;BB