Ë
    *CàeŠ[  ã                   ó†  — d dl mZmZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZmZmZmZ d dlZd dlZd dlZddlmZ eeedf   ed   eeeeed   f   Zi dd“d	d	“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dddddd	dd ddddd!œ¥Z G d"„ d#«      Z G d$„ d%«      Z G d&„ d'«      Zy)(é    )ÚdefaultdictÚ
namedtupleN)ÚStringIO)ÚDictÚListÚTypeÚUnioné   )ÚutilsÚJSONÚbondÚbridgeÚdummyzdummy-deviceÚerspanÚtunnelÚetherÚethernetÚgretapÚipgreÚip6greÚloopbackÚsitÚtunÚtunnel6Ú	wireguardÚwlanÚwifiÚwwanÚmodemÚvethzvirtual-ethernetÚvlanÚvrfz	nm-device)r!   r"   ÚvxlanÚwifisÚ	ethernetsÚbridgesÚbondsz
nm-deviceszdummy-devicesÚmodemsÚvlansÚvrfsc                   ó4  — e Zd Zdedefd„Zg g ddfdededededef
d	„Zd
edefd„Z	dedefd„Z
defd„Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zy)Ú	InterfaceÚipÚreturnc                 ód   — t        |j                  dd«      x}«      dk(  r|j                  «       S y)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)Úselfr-   r0   s      ú+/usr/share/netplan/netplan_cli/cli/state.pyÚ__extract_maczInterface.__extract_macL   s0   € ô
 ˜"Ÿ&™& ¨BÓ/Ð/ˆwÓ0°BÒ6Ø—=‘=“?Ð"Øó    )NNÚnd_dataÚnm_dataÚresolved_dataÚ
route_datac                 óP	  ‡ — |j                  dd«      ‰ _        |j                  dd«      ‰ _        d|j                  dg «      v rdnd‰ _        |j                  dd«      j	                  «       ‰ _        ‰ j                  |«      ‰ _        d ‰ _        d ‰ _	        d ‰ _
        g ‰ _        |xs g }t        ˆ fd	„|D «       d «      ‰ _        t        ˆ fd
„|D «       d «      ‰ _        d ‰ _        |d   rœg ‰ _        |d   D ]�  }t!        |d   «      t!        ‰ j                  «      k(  sŒ(|d   }|d   }‰ j                  j#                  t%        j&                  |dj)                  |D �	cg c]  }	|	j+                  dd«      ‘Œ c}	«      «      «       Œ� d ‰ _        |d   r]g ‰ _        |d   D ]N  }	t!        |	d   «      t!        ‰ j                  «      k(  sŒ(‰ j,                  j#                  t/        |	d   «      «       ŒP g }
d ‰ _        |d   r|
|d   z  }
|d   r|
|d   z  }
|
�rg ‰ _        |
D �]  }|j                  d«      ‰ j                  k(  sŒ#d|j                  d«      i}|j                  d«      x}r||d<   |j                  d«      x}r||d<   |j                  d«      x}r||d<   |j                  d«      x}r||d<   |j                  d«      x}r||d<   |j                  d«      x}r||d<   |j                  d«      x}r||d<   |j                  d«      x}r||d<   ‰ j0                  j#                  |«       �Œ d ‰ _        |j                  d«      x}róg ‰ _        |D ]ç  }g }t5        j6                  |d   «      j8                  r|j#                  d«       ‰ j0                  rc‰ j0                  D ]T  }d|v sŒt5        j6                  |d   «      t5        j6                  |d   «      k(  sŒ:|d   d k(  sŒC|j#                  d «        n |d   j;                  «       }|d!|d"   ii}|r|||   d<   ‰ j2                  j#                  |«       Œé d ‰ _        |j                  d#i «      j                  d$«      x}r|j?                  «       ‰ _        ‰ jA                  ‰ j                  «      xs d%‰ _!        y c c}	w )&NÚifindexéÿÿÿÿÚifnameÚunknownÚUPÚflagsÚDOWNÚ	operstatec              3   óH   •K  — | ]  }|d    ‰j                   k(  sŒ|–— Œ y­w)ÚIndexN)Úidx©Ú.0Úxr6   s     €r7   ú	<genexpr>z%Interface.__init__.<locals>.<genexpr>c   s    øè ø€ ÒK A°A°g±JÀ$Ç(Á(Ó4JœaÑKùó   ƒ"›"c              3   óH   •K  — | ]  }|d    ‰j                   k(  sŒ|–— Œ y­w)ÚdeviceN©ÚnamerJ   s     €r7   rM   z%Interface.__init__.<locals>.<genexpr>d   s    øè ø€ ÒM A°A°h±KÀ4Ç9Á9Ó4LœaÑMùrN   r   r
   é   r9   ÚbigÚdevÚtoÚdstÚfamilyÚgatewayÚviaÚprefsrcÚfromÚmetricÚtypeÚscopeÚprotocolÚtableÚ	addr_infoÚlocalÚlinkÚdhcpÚprefixÚ	prefixlenÚlinkinfoÚ	info_kindr1   )"r4   rI   rR   Ú
adminstateÚupperrF   Ú_Interface__extract_macÚ
macaddressr   r   r"   ÚmembersÚnextÚndÚnmÚdns_addressesÚintÚappendÚsocketÚ	inet_ntopÚjoinÚto_bytesÚ
dns_searchÚstrÚroutesÚ	addressesÚ	ipaddressÚ
ip_addressÚis_link_localr5   Úiproute_typeÚstripÚquery_networkctlÚ_networkctl)r6   r-   r:   r;   r<   r=   ÚitrÚipfamilyÚdnsÚvÚ_routesÚobjÚelemÚvalrb   ÚaddrrD   ÚrouteÚip_addrri   s   `                   r7   Ú__init__zInterface.__init__U   s›  ø€ àŸ™˜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ˆŒð $(ˆÔØ˜ÒØ!#ˆDÔØ$ QÑ'ò y�Ü�s˜1‘v“;¤# d§h¡h£-Ó/Ø" 1™v�HØ˜a™&�CØ×&Ñ&×-Ñ-¬f×.>Ñ.>¸xÈÏÉÐqtÖRuÐlmÐST×S]ÑS]Ð^_ÐafÕSgÒRuÓIvÓ.wÕxð	yð
 !%ˆŒØ˜ÒØ ˆ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Ð+ØˆDŒNØ!ò ,�Ø �Ü×'Ñ'¨¨W©Ó6×DÒDØ—L‘L Ô(Ø—;’;Ø!%§¡ò &˜Ø" ešOÜ )× 4Ñ 4°U¸6±]Ó CÄy×G[ÑG[Ð\`ÐahÑ\iÓGjÓ jØ$ ZÑ0°FÓ:Ø %§¡¨VÔ 4Ù %ð&ð ˜w™-×-Ñ-Ó/�Ø (¨D°Ñ,=Ð!>Ð?�ÙØ-2�D˜‘M 'Ñ*Ø—‘×%Ñ% dÕ+ð,ð" "&ˆÔØŸ™˜z¨2Ó.×2Ñ2°;Ó?Ð?ˆ9Ð?Ø )§¡Ó 1ˆDÔð !%× 5Ñ 5°d·i±iÓ @Ò FÀBˆÕùò Svs   ÅR#Úcon_namec           	      óè   — d }	 t        j                  ddddd|g«      }|j                  «       S # t        $ r9}t	        j
                  dj                  |t        |«      «      «       Y d }~|S d }~ww xY w)Nz--get-valuesz802-11-wireless.ssidÚconÚshowÚidz+Cannot query NetworkManager SSID for {}: {})r   Ú	nmcli_outr�   Ú	ExceptionÚloggingÚwarningÚformatrz   )r6   r�   ÚssidÚes       r7   Úquery_nm_ssidzInterface.query_nm_ssid¯   sx   € Øˆð	/Ü—?‘? NÐ4JØ$)¨6°4¸ð$Có DˆDà—:‘:“<ÐøÜò 	/Ü�O‰OÐI×PÑPØ$¤c¨!£fó.÷ /ð /àˆûð	/ús   „*/ ¯	A1¸.A,Á,A1rA   c           	      óÌ   — d }	 t        j                  ddd|gd¬«      }|S # t        $ r9}t        j                  dj                  |t        |«      «      «       Y d }~|S d }~ww xY w)NÚ
networkctlÚstatusz--T©Útextz"Cannot query networkctl for {}: {})Ú
subprocessÚcheck_outputr–   r—   r˜   r™   rz   )r6   rA   Úoutputr›   s       r7   r‚   zInterface.query_networkctlº   sn   € Øˆð	!Ü×,Ñ,¨l¸HÀdÈFÐ-SÐZ^Ô_ˆFð ˆøô ò 	!Ü�O‰OÐ@×GÑGØœ˜A›ó ÷ !ð !àˆûð	!ús   „! ¡	A#ª.AÁA#c                 óÆ  — | j                   | j                  | j                  dœ}| j                  r| j                  |d<   | j                  r| j                  |d<   | j
                  r| j
                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d	<   | j                  r| j                  |d
<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j                   r| j                   |d<   | j"                  r| j"                  |d<   | j$                  r| j$                  |d<   | j&                  |fS )N)Úindexrj   rF   r^   rš   Útunnel_modeÚbackendr”   rm   Úvendorr|   rr   ry   r{   Úactivation_moder   r   r"   Ú
interfaces)rI   rj   rF   r^   rš   r§   r¨   Ú	netdef_idrm   r©   r|   rr   ry   r{   rª   r   r   r"   rn   rR   )r6   Újsons     r7   r­   zInterface.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Ð Ð r9   c                 óB   — | j                   dk(  xr | j                  dk(  S )NrC   ©rj   rF   ©r6   s    r7   ÚupzInterface.upë   s   € à�‰ $Ñ&ÒA¨4¯>©>¸TÑ+AÐAr9   c                 óB   — | j                   dk(  xr | j                  dk(  S )NrE   r¯   r°   s    r7   ÚdownzInterface.downï   s   € à�‰ &Ñ(ÒE¨T¯^©^¸vÑ-EÐEr9   c                 óX  — | j                   r| j                   j                  d«      nd }|dk(  r| j                   j                  d«      }|dk(  r| j                   j                  d«      x}r|}t        j                  |«      x}r|S t        j                  dj                  |«      «       y )Nr   ÚnoneÚKindr   zUnknown device type: {})rp   r4   ÚDEVICE_TYPESr—   r˜   r™   )r6   Únd_typeÚkindÚdevice_types       r7   r^   zInterface.typeó   s’   € à)-¯ª�$—'‘'—+‘+˜fÔ%°dˆØ�fÒà—g‘g—k‘k &Ó)ˆGØ�gÒà—w‘w—{‘{ 6Ó*Ð*ˆtÐ*Ø�Ü&×*Ñ*¨7Ó3Ð3ˆ;Ð3ØÐÜ�‰Ð1×8Ñ8¸ÓAÔBØr9   c                 óR   — | j                   dk(  r| j                  r| j                  S y )Nr   )r^   r€   r°   s    r7   r§   zInterface.tunnel_mode  s%   € à�9‰9˜Ò  T×%6Ò%6Ø×$Ñ$Ð$Ør9   c                 óì   — | j                   r=d| j                   j                  dd«      vrd| j                   j                  dd«      v ry| j                  rd| j                  j                  dd«      v ry	y )
NÚ	unmanagedÚ
SetupStater1   úrun/systemd/network/10-netplan-ÚNetworkFileÚnetworkdú.run/NetworkManager/system-connections/netplan-ÚfilenameÚNetworkManager)rp   r4   rq   r°   s    r7   r¨   zInterface.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Ø#Ør9   c                 ó  — | j                   dk(  r@| j                  j                  dd«      j                  d«      d   j                  d«      d   S | j                   dk(  r¤| j                  j                  d	d«      j                  d
«      d   j                  d«      d   }| j                  j                  dd«      dk(  rC| j                  | j                  j                  d«      «      }|r|j                  d|z   «      d   }|S y )NrÁ   rÀ   r1   r¿   r
   z.networkr   rÄ   rÃ   rÂ   z.nmconnectionr^   z802-11-wirelessrR   ú-)r¨   rp   r4   Úsplitrq   rœ   )r6   Únetdefrš   s      r7   r¬   zInterface.netdef_id  sñ   € à�<‰<˜:Ò%Ø—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Ó*=Ó>�ÙØ#Ÿ\™\¨#°©*Ó5°aÑ8�FØˆMØr9   c                 ó�   — | j                   r:d| j                   v r,| j                   d   r| j                   d   j                  «       S y )NÚVendor)rp   r�   r°   s    r7   r©   zInterface.vendor!  s:   € à�7Š7�x 4§7¡7Ñ*¨t¯w©w°xÒ/@Ø—7‘7˜8Ñ$×*Ñ*Ó,Ð,Ør9   c                 ó  — | j                   dk(  rr| j                  j                  «       D ]U  }|j                  «       }d}|j	                  |«      sŒ'|t        |«      t        d«        j                  «       }|r|c S d c S  y )Nr   zWiFi access point: z (xB:SS:ID:xx:xx:xx))r^   rƒ   Ú
splitlinesr�   Ú
startswithr3   )r6   ÚlineÚkeyrš   s       r7   rš   zInterface.ssid'  s~   € à�9‰9˜Òð ×(Ñ(×3Ñ3Ó5ò 2�Ø—z‘z“|�Ø+�Ø—?‘? 3Õ'Ø¤ C£¬#Ð.DÓ*EÐ)EÐF×LÑLÓN�DÙ#'˜4Ò1¨TÒ1ð2ð r9   c                 óD  — | j                   dk(  rl| j                  j                  «       D ]N  }|j                  «       }d}|j	                  |«      sŒ'|t        |«      d  j                  «       }|dk7  r|c S d c S  y | j                   dk(  r| j                  d   dk(  rdS d S y )NrÁ   zActivation Policy: r±   rÄ   ÚautoconnectÚnoÚmanual)r¨   rƒ   rÌ   r�   rÍ   r3   rq   )r6   rÎ   rÏ   Úmodes       r7   rª   zInterface.activation_mode4  s¥   € à�<‰<˜:Ò%ð ×(Ñ(×3Ñ3Ó5ò :�Ø—z‘z“|�Ø+�Ø—?‘? 3Õ'Ø¤ C£ 	˜?×0Ñ0Ó2�DØ#'¨4¢<˜4Ò9°TÒ9ð:ð ð �\‰\Ð-Ò-Ø#Ÿw™w }Ñ5¸Ò=�8ÐGÀ4ÐGØr9   N)Ú__name__Ú
__module__Ú__qualname__Údictrz   rl   r   Útupler�   rœ   r‚   r­   ÚpropertyÚboolr±   r³   r^   r§   r¨   r¬   r©   rš   rª   © r9   r7   r,   r,   K   s„  „ ð ð ¨ó ð 24ÀRØ(4È,ñXG˜4ð XG¨$ð XG¸dð XGØ %ðXGØBGóXGðt	 cð 	¨có 	ð sð ¨só ð&!�dó &!ðP ðB�Dò Bó ðBð ðF�dò Fó ðFð ð�cò ó ðð ð˜Sò ó ðð
 ð˜ò ó ðð ð˜3ò ó ðð ð˜ò ó ðð
 ð
�cò 
ó ð
ð ð ò ó ñr9   r,   c                   ó^  — e Zd ZdZdd„Zedefd„«       Zedede	fd„«       Z
ededefd	„«       Zedefd
„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zededee   fd„«       Zedee   ddfd„«       Zedefd„«       Zdefd„Zy)ÚSystemConfigStatez- Collects the system's network configuration Nc                 ó²  ‡— t        j                  d«      slt        j                  d«      r*t        j                  d«       t        j                  d«       t        j                  d«       t        j                  ddgd«       | j                  «       }| j                  «       }|r|s*t        j                  d«       t        j                  d«       | j                  «       }| j                  «       \  }}| j                  «       \  }}	|D �
cg c]  }
t        |
||||	f||f«      ‘Œ c}
| _        | j!                  | j                  «       | j                  D �
cg c]  }
|
j"                  dk7  sŒ|
‘Œ }}
| j%                  |«      }‰r t'        ˆfd	„| j                  D «       d «      g}|D �cg c]  }|€Œ|‘Œ	 }}‰r>|g k(  r9t        j                  d
j)                  ‰«      «       t        j                  d«       d|| j+                  «       dœi| _        |r| j                  n|}|D ]$  }
|
j/                  «       \  Š}|| j,                  ‰<   Œ& y c c}
w c c}
w c c}w )Nzsystemd-networkd.servicez^'netplan status' depends on networkd, but systemd-networkd.service is masked. Please start it.r
   z3systemd-networkd.service is not active. Starting...ÚstartTz,Could not query iproute2 or systemd-networkdrE   c              3   óB   •K  — | ]  }|j                   ‰k(  sŒ|–— Œ y ­w©NrQ   )rK   ÚitfrA   s     €r7   rM   z-SystemConfigState.__init__.<locals>.<genexpr>m  s   øè ø€ ÒW cÀCÇHÁHÐPVÓDVœcÑWùs   ƒ˜zCould not find interface {}znetplan-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_resolvedr,   Úinterface_listÚcorrelate_members_and_uplinkrF   Úquery_online_statero   r™   Úresolvconf_jsonÚstater­   )r6   rA   ÚallÚiproute2rÁ   ÚnmcliÚroute4Úroute6rr   ry   rã   ÚfilteredÚonline_staterŠ   Úitf_iterr‰   s    `              r7   r�   zSystemConfigState.__init__H  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ð GOö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Òñ	%ùò9Pùò Sùò Cs   ÄI
ÅIÅ+IÆ(IÆ0Ir.   c                 ó  — g g d dœ}	 t        d«      5 }|j                  «       }d|v rd|d<   n	d|v rd|d<   |g|j                  «       z   D ]Y  }|j                  d«      r|d	xx   |j	                  «       d
d  z  cc<   |j                  d«      sŒD|j	                  «       d
d  |d<   Œ[ 	 d d d «       |S # 1 sw Y   |S xY w# t
        $ r8}t        j                  dj                  t        |«      «      «       Y d }~|S d }~ww xY w)N)r|   ÚsearchrÔ   z/etc/resolv.confz/# This is /run/systemd/resolve/stub-resolv.confÚstubrÔ   z*# This is /run/systemd/resolve/resolv.confÚcompatÚ
nameserverr|   r
   r   z!Cannot parse /etc/resolv.conf: {})
ÚopenÚreadlineÚ	readlinesrÍ   rÇ   r–   r—   r˜   r™   rz   )ÚclsÚresÚfÚ	firstlinerÎ   r›   s         r7   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? Â2B<Â7B? Â<B? Â?	D Ã-C;Ã;D r«   c                 ó¨  — |D ]È  }|j                   sŒ|j                  sŒ|j                  sŒ*|j                  sŒ7g }|j                  D ]>  }t	        |j                  «       «      d   \  }}d|vsd|d   vsŒ.|j                  |«       Œ@ |j                  D �cg c]  }|j                  dd «      dk(  sŒ|‘Œ }}|sŒ¸|sŒ»|j                  sŒÈ y yc c}w )Nr   rD   rd   rV   ÚdefaultTF)r±   r|   r{   rr   ÚlistÚitemsrt   r4   )	r  r«   rã   Únon_local_ipsrŒ   r-   ÚextrarL   Údefault_routess	            r7   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Â2CÚ
cmd_outputc                 ó,   — t        j                  |«      S râ   ©r­   Úloads©r  r  s     r7   Úprocess_genericz!SystemConfigState.process_generic¨  s   € ä�z‰z˜*Ó%Ð%r9   c                 óè   — d }	 t        j                  g d¢d¬«      }| j                  |«      }|S # t        $ r8}t	        j
                  dj                  t        |«      «      «       Y d }~|S d }~ww xY w)N)r-   ú-dú-jrŒ   Tr    z(Cannot query iproute2 interface data: {})r¢   r£   r  r–   r—   Úcriticalr™   rz   ©r  Údatar¤   r›   s       r7   rí   z SystemConfigState.query_iproute2¬  su   € àˆð	XÜ$×1Ñ1Ò2LØ7;ô=ˆFà×&Ñ& vÓ.ˆDð ˆøô ò 	XÜ×ÑÐG×NÑNÌsÐSTËvÓV×WÐWØˆûð	Xúó   „*0 °	A1¹-A,Á,A1c                 ó2   — t        j                  |«      d   S )NÚ
Interfacesr  r  s     r7   Úprocess_networkdz"SystemConfigState.process_networkd·  s   € ä�z‰z˜*Ó% lÑ3Ð3r9   c                 óè   — d }	 t        j                  ddgd¬«      }| j                  |«      }|S # t        $ r8}t	        j
                  dj                  t        |«      «      «       Y d }~|S d }~ww xY w)Nrž   z--json=shortTr    z(Cannot query networkd interface data: {})r¢   r£   r!  r–   r—   r  r™   rz   r  s       r7   rî   z SystemConfigState.query_networkd»  sy   € àˆð	XÜ$×1Ñ1°<ÀÐ2PØ7;ô=ˆFà×'Ñ'¨Ó/ˆDð ˆøô ò 	XÜ×ÑÐG×NÑNÌsÐSTËvÓV×WÐWØˆûð	Xúr  c           
      óÂ   — g }|j                  «       D ]I  }|j                  d«      }|d   r|d   nd }|sŒ#|j                  ||d   |d   |d   |d   |d   dœ«       ŒK |S )	Nú:r   r
   rS   é   é   é   )rP   rR   ÚuuidrÃ   r^   rÑ   )rÌ   rÇ   rt   )r  r  r  rÎ   rÇ   rU   s         r7   Ú
process_nmzSystemConfigState.process_nmÆ  s~   € àˆØ×)Ñ)Ó+ò 	ˆDØ—J‘J˜s“OˆEØ# Ašh�%˜’(¨DˆCÚØ—‘Ø!Ø! !™HØ! !™HØ % a¡Ø! !™HØ#(¨¡8ñõ ð		ð ˆr9   c                 óä   — d }	 t        j                  g d¢«      }| j                  |«      }|S # t        $ r8}t	        j
                  dj                  t        |«      «      «       Y d }~|S d }~ww xY w)N)z-tz-fz*DEVICE,NAME,UUID,FILENAME,TYPE,AUTOCONNECTr’   r“   z.Cannot query NetworkManager interface data: {})r   r•   r)  r–   r—   rë   r™   rz   r  s       r7   rï   zSystemConfigState.query_nm×  sr   € àˆð	[ÜŸ/™/ò +:ó ;ˆFð —>‘> &Ó)ˆDð ˆøô ò 	[Ü�M‰MÐJ×QÑQÔRUÐVWÓRXÓY×ZÐZØˆûð	[ús   „(. ®	A/·-A*Á*A/c                 ó  — d }d }	 t        j                  g d¢d¬«      }| j                  |«      }t        j                  g d¢d¬«      }| j                  |«      }|r2|D ]-  }|j                  dt        j                  j                  i«       Œ/ |r2|D ]-  }|j                  dt        j                  j                  i«       Œ/ ||fS # t        $ r7}t	        j
                  dj                  t        |«      «      «       Y d }~Œ§d }~ww xY w)N)r-   r  r  z-4r�   r“   ra   r÷   Tr    )r-   r  r  z-6r�   r“   ra   r÷   z$Cannot query iproute2 route data: {}rX   )r¢   r£   r  r–   r—   rë   r™   rz   Úupdateru   ÚAF_INETÚvalueÚAF_INET6)r  Údata4Údata6Úoutput4Úoutput6r›   r�   s          r7   rð   zSystemConfigState.query_routesã  sù   € àˆØˆð	QÜ%×2Ñ2Ò3lØ8<ô>ˆGà×-Ñ-¨gÓ6ˆEÜ%×2Ñ2Ò3lØ8<ô>ˆGà×-Ñ-¨gÓ6ˆEñ Øò ?�Ø—‘˜h¬¯©×(<Ñ(<Ð=Õ>ð?áØò @�Ø—‘˜h¬¯©×(=Ñ(=Ð>Õ?ð@à�uˆ~Ðøô ò 	QÜ�M‰MÐ@×GÑGÌÈAËÓO×PÑPûð	Qús   †AC Ã	DÃ-DÄDc                 óN  — d }d }	 t        j                  «       }|j                  dd«      }t        j                  |d«      }|j	                  d«      }|d   }|d   }||fS # t
        $ r:}t        j                  dj                  t        |«      «      «       Y d }~||fS d }~ww xY w)Nzorg.freedesktop.resolve1z/org/freedesktop/resolve1zorg.freedesktop.DBus.Propertiesz org.freedesktop.resolve1.ManagerÚDNSÚDomainsz"Cannot query resolved DNS data: {})
ÚdbusÚ	SystemBusÚ
get_objectr,   ÚGetAllr–   r—   rë   r™   rz   )r  r|   r   ÚipcÚresolve1Úresolve1_ifr  r›   s           r7   rñ   z SystemConfigState.query_resolvedû  s¯   € àˆ	Øˆð	OÜ—.‘.Ó"ˆCØ—~‘~Ð&@ÐB]Ó^ˆHÜŸ.™.¨Ð3TÓUˆKØ×$Ñ$Ð%GÓHˆCØ˜E™
ˆIØ˜‘^ˆFð ˜6Ð"Ð"øô ò 	OÜ�M‰MÐ>×EÑEÄcÈ!ÃfÓM×NÐNØ˜6Ð"Ð"ûð	Oús   †AA! Á!	B$Á*-BÂB$rA   c           	      óN  — g }d}	 t        j                  dddddd|gd¬	«      }t        j                  |«      }|D ]"  }|j                  |j                  d«      «       Œ$ |S # t        $ r9}t        j                  d
j                  t        |«      «      «       g cY d}~S d}~ww xY w)zO Return a list containing the interfaces that are members of a bond/bridge/vrf Nr-   r  r  rd   r“   ÚmasterTr    zCannot query bridge: {}rA   )r¢   r£   r–   r—   r˜   r™   rz   r­   r  rt   r4   )r  rA   rn   r¤   r›   Úoutput_jsonÚmembers          r7   Úquery_memberszSystemConfigState.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                 ó†  ‡	— g d¢Š	i }t        t        «      }t        ˆ	fd„|«      D ]a  }| j                  |j                  «      }|D ]0  }t        dddg«      } ||j                  |j                  «      ||<   Œ2 |||j                  <   Œc |D ]³  }|j                  |j                  «      x}r`|j                  dk(  r|j                  |_        |j                  dk(  r|j                  |_	        |j                  dk(  r|j                  |_
        |j                  ‰	v sŒ�|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.
        )r   r   r"   c                 ó    •— | j                   ‰v S râ   )r^   )ÚiÚuplink_typess    €r7   ú<lambda>z@SystemConfigState.correlate_members_and_uplink.<locals>.<lambda>&  s   ø€ ¨!¯&©&°LÐ*@€ r9   ÚMemberrR   r^   r   r   r"   N)r   r  ÚfilterrB  rR   r   r^   r4   r   r   r"   rn   )
r  r«   Úmembers_to_uplinkÚuplink_to_membersÚ	interfacern   rA  Úmember_tupleÚuplinkrF  s
            @r7   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Õ%ñ	0r9   c                 ó,   — t        | j                  «      S râ   )r3   rò   r°   s    r7   Únumber_of_interfacesz&SystemConfigState.number_of_interfaces:  s   € ä�4×&Ñ&Ó'Ð'r9   c                 ó   — | j                   S râ   )rö   r°   s    r7   Úget_datazSystemConfigState.get_data>  s   € Ø�z‰zÐr9   )NF)rÕ   rÖ   r×   Ú__doc__r�   ÚclassmethodrØ   rõ   r  rÛ   rô   rz   r   r  rí   r!  rî   r)  rï   rÙ   rð   rñ   r   rB  r,   ró   rÚ   rs   rP  rR  rÜ   r9   r7   rÞ   rÞ   E  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ò (ó ð(ð˜$ô r9   rÞ   c                   ó0   — e Zd ZdZdd„Zdefd„Zdefd„Zy)ÚNetplanConfigStatez. Collects the Netplan's network configuration c                 óR  — t        j                  «       }|j                  |«       t        j                  «       }|j	                  |«       |j
                  | _        t        «       | _        |dk(  r|j                  | j                  ¬«       y |j                  d«      sdj                  d|f«      }t        j                  d|«      }|D �cg c]  }|j                  dd«      ‘Œ }}t        «       }|j                  |¬«       t        j                  ||| j                  «       y c c}w )Nr÷   )Úoutput_fileÚnetworkú.z	(?<!\\)\.z\.)ÚnetplanÚParserÚload_yaml_hierarchyÚStateÚimport_parser_resultsÚnetdefsr   rö   Ú
_dump_yamlrÍ   rw   ÚrerÇ   ÚreplaceÚ_dump_yaml_subtree)r6   ÚsubtreeÚrootdirÚparserÚnp_staterŠ   Útmp_ins          r7   r�   zNetplanConfigState.__init__E  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ùò	 Es   ÃD$r.   c                 ó6   — | j                   j                  «       S râ   )rö   Úgetvaluer°   s    r7   Ú__str__zNetplanConfigState.__str__^  s   € Ø�z‰z×"Ñ"Ó$Ð$r9   c                 ó\   — t        j                  | j                  j                  «       «      S râ   )ÚyamlÚ	safe_loadrö   rk  r°   s    r7   rR  zNetplanConfigState.get_dataa  s   € Ü�~‰~˜dŸj™j×1Ñ1Ó3Ó4Ð4r9   N)r÷   ú/)	rÕ   rÖ   r×   rS  r�   rz   rl  rØ   rR  rÜ   r9   r7   rV  rV  B  s#   „ Ù8óDð2%˜ó %ð5˜$ô 5r9   rV  )Úcollectionsr   r   r}   r­   r—   rb  ru   r¢   ré   Úior   Útypingr   r   r   r	   rn  r7  r[  r1   r   rz   rs   ÚfloatrÛ   r   r·   r,   rÞ   rV  rÜ   r9   r7   ú<module>ru     s€  ð÷( 0Û Û Û Û 	Û Û Û 
Ý ß *Ó *ã ã Û å àˆT�#�v�+Ñ  V¡¨c°3¸¸tÀTÈ$ÁZÐOÑP€ð Ø
ˆFð àˆhð ð ˆ^ð ð ˆhð	 ð
 ˆZð ð ˆhð ð ˆXð ð ˆhð ð �
ð ð 
ˆ8ð ð ˆhð ð 
ˆ8ð ð ˆxð ð �ð ð ˆFð ð  ˆGð! ð" Ðð# ð$ ØØð ØØØØØ#ØØØò? €÷Fwñ w÷tzñ z÷z 5ò  5r9   