ó
    x[h„S  ã                   ó:  • S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
JrJr  S SKJrJrJr  S SKJr  \R&                  " \5      r/ SQr/ SQr/ S	QrS
 rS rSS jrS r\
R:                  " S5      S 5       rS r " S S\R@                  5      r SS jr!g)é    N)Úsuppress)ÚOptional)ÚperformanceÚsubpÚutil)ÚParserErrorÚrendererÚsubnet_is_ipv6)ÚNetworkState)zpre-upÚupzpost-upÚdownzpre-downz	post-down)Úbridge_ageingÚbridge_bridgeprioÚ	bridge_fdÚbridge_gcinitÚbridge_helloÚbridge_maxageÚbridge_maxwaitÚ
bridge_stp)ÚaddressÚnetmaskÚ	broadcastÚnetworkÚmetricÚgatewayÚpointtopointÚmediaÚmtuÚhostnameÚ
leasehoursÚ	leasetimeÚvendorÚclientÚbootfileÚserverÚhwaddrÚproviderÚframeÚnetnumÚendpointÚlocalÚttlc                 ól  • / n/ SQnUR                  5        H�  u  pEUS:X  a  M  US:X  a  US   < SUS   < 3nU(       d  M+  XC;   d  M2  [        U[        5      (       a  SR                  U5      nSU;   a  UR	                  SS5      nUR                  S	R                  XE5      5        M’     [        U5      $ )
N)
r   r   r   r   r   Úpointopointr   ÚscopeÚ
dns_searchÚdns_nameserversr   r   Ú/ÚprefixÚ Ú_Ú-ú    {0} {1})ÚitemsÚ
isinstanceÚlistÚjoinÚreplaceÚappendÚformatÚsorted)ÚifaceÚsubnetÚcontentÚ	valid_mapÚkeyÚvalues         Ú3/usr/lib/python3/dist-packages/cloudinit/net/eni.pyÚ_iface_add_subnetrG   A   s§   € Ø€Gò€Ið —l‘l–n‰
ˆØ�)ÓÙØ�)ÓØ% iÔ0°&¸Ó2BÐCˆEßˆ5�SÕ%Ü˜%¤×&Ñ&ØŸ™ ›�Ø�c‹zØ—k‘k # sÓ+�Ø�N‰N˜=×/Ñ/°Ó;Ö<ñ %ô �'‹?Ðó    c           
      ó”  • US:w  a  / $ / n/ SQn/ SQnSS0nU S   S;  a  UR                  S5        U R                  5        Hú  u  px[        U[        5      (       a  X   (       a  SOS	nU(       a  Xt;   a  M5  US
:X  a)  U(       a"  X‚:w  a  [        R                  SU S   UU5        Md  Xu;   a;  U H3  n	UR                  SR                  UR                  Xw5      U	5      5        M5     M¤  [        U[        5      (       a  SR                  U5      nUR                  SR                  UR                  Xw5      U5      5        Mü     [        U5      $ )Nr   )	ÚcontrolÚ	device_idÚdriverÚindexÚinetÚmodeÚnameÚsubnetsÚtype)Úbridge_pathcostÚbridge_portprioÚbridge_waitportÚmac_addressÚ	hwaddressrR   )ÚbondÚbridgeÚ
infinibandÚvlanÚonÚoffr   zZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.rP   r7   r4   )r=   r8   r9   ÚboolÚLOGÚwarningr>   Úgetr:   r;   r?   )
r@   rM   Úipv4_subnet_mturB   Ú
ignore_mapÚmultiline_keysÚrenamesrD   rE   Úvs
             rF   Ú_iface_add_attrsrg   _   s.  € ð �ƒzØˆ	Ø€Gò
€Jò€Nð ˜kÐ*€GØˆV�}ÐDÓDØ×Ñ˜-Ô(à—k‘k–m‰
ˆä�eœT×"Ñ"Ø!ŸJ‘D¨EˆEÞ˜Ó)ÙØ�%‹<žOØÓ'Ü—‘ð:à˜&‘MØØ#ôñ ØÓ Û�Ø—‘˜}×3Ñ3°G·K±KÀÓ4IÈ1ÓMÖNñ áÜ�eœT×"Ñ"Ø—H‘H˜U“OˆEØ�‰�}×+Ñ+¨G¯K©K¸Ó,AÀ5ÓIÖJñ- $ô0 �'‹?ÐrH   c                 óX  • U S   nU S   nUS:X  a  SnOUS;   a  SU-   nOSU-   nU R                  5       nUR                  X5S.5        SR                  " S0 UD6S	R                  " S0 UD6/nU(       a7  U R                  S
5      (       a!  UR	                  SR                  " S0 UD65        U$ )NrP   rJ   Úauto)Úhotplugzallow-z
# control-)ÚfullnameÚcverbz{cverb} {fullname}ziface {fullname} {inet} {mode}rV   z    hwaddress {mac_address}© )ÚcopyÚupdater>   ra   r=   )r@   rM   Úrender_hwaddressrk   rJ   rl   ÚsubstÚliness           rF   Ú_iface_start_entryrs   ›   s¶   € Ø�V‰}€Hà�IÑ€GØ�&ÓØ‰Ø	�LÓ	 Ø˜7Ñ"‰à˜wÑ&ˆà�J‰J‹L€EØ	‡L�L˜hÑ7Ô8ð 	×#Ò#Ñ, eÑ,Ø(×/Ò/Ñ8°%Ñ8ð€Eö ˜EŸI™I m×4Ñ4Ø�‰Ð2×9Ò9ÑB¸EÑBÔCà€LrH   c                 óò  • SnUR                  5        GHŸ  nUR                  5       nUR                  S5      (       a  M,  UR                  S5      nUS   nUS:X  Gat  US   nUR                  S5      (       d  [        R
                  R                  X(5      n[        R                  " U5       GH  n	[        R                  " U	5      n
U
 Vs/ s H  n[        R
                  R                  [        R
                  R                  X›5      5      (       d  MF  [        R                  " SU5      c  M`  [        R
                  R                  X›5      PM�     n
nU
 Hp  n[        R                  " U5      R                  5       n[        R
                  R                  U5      n[        X[        R
                  R!                  U5      U5        Mr     GM     GM½  US	:X  a×  US   nUR                  S5      (       d  [        R
                  R                  X/5      n[        R                  " U5       H€  n	[#        U	S
5       nUR%                  5       R                  5       nSSS5        [        R
                  R                  U	5      n[        U W[        R
                  R!                  U5      U5        M‚     GMš  US:X  a$  USS  H  nUU ;  a  SU0U U'   SU U   S'   M     GMÄ  US:X  aI  USS u  nnnUU ;  a  SU0U U'   OSU U   ;   a  ['        SU< SU< S35      eUU U   S'   UU U   S'   UnGM  US:X  a  US   S:X  a  US   nOUS   nUX   S'   GM7  U[(        ;   a  US   X   U'   GMN  U[*        ;   a:  XpU   ;  a  / X   U'   X   U   R-                  SR                  USS 5      5        GM’  UR                  S5      (       a‚  SX   ;  a  0 X   S'   US:X  a2  / X   S   S'   USS  H  nX   S   S   R-                  U5        M     GMï  US:X  a2  / X   S   S'   USS  H  nX   S   S   R-                  U5        M     GM'  GM*  UR                  S5      (       Ga  SX   ;  a  0 X   S'   U[.        ;   a#  UR1                  SS S5      nUS   X   S   U'   GM}  US!:X  a2  / X   S   S"'   USS  H  nX   S   S"   R-                  U5        M     GMµ  US#:X  a7  US   R3                  5       S$:X  a  US   X   S   S$'   GMâ  US   X   S   S$'   GMò  US%:X  a+  S&X   S   ;  a
  0 X   S   S&'   US   X   S   S&   US   '   GM#  US':X  a+  S(X   S   ;  a
  0 X   S   S('   US   X   S   S(   US   '   GMT  GMW  UR                  S)5      (       d  GMp  S*X   ;  a  0 X   S*'   UR1                  S)S S5      nUS   X   S*   U'   GM¢     U R5                  5        H  nSU U   ;  d  M  S+U U   S'   M     gs  snf ! , (       d  f       GNš= f),ab  Parses the file contents, placing result into ifaces.

'_source_path' is added to every dictionary entry to define which file
the configuration information came from.

:param ifaces: interface dictionary
:param contents: contents of interfaces file
:param src_dir: directory interfaces file was located
:param src_path: file path the `contents` was read
NÚ#r4   r   zsource-directoryé   r2   z^[a-zA-Z0-9_-]+$ÚsourceÚrri   Ú_source_pathTr@   é   Úfamilyz
Interface z* can only be defined once. Re-defined in 'z'.ÚmethodrW   Úetheré   zdns-Údnsz
dns-searchÚsearchzdns-nameserversÚnameserversÚbridge_rY   Ú Úbridge_portsÚportsÚ	bridge_hwÚmacrS   ÚpathcostrT   Úportpriozbond-rX   F)Ú
splitlinesÚstripÚ
startswithÚsplitÚosÚpathr;   ÚglobÚlistdirÚisfileÚreÚmatchr   Úload_text_fileÚabspathÚ_parse_deb_config_dataÚdirnameÚopenÚreadr   ÚNET_CONFIG_OPTIONSÚNET_CONFIG_COMMANDSr=   ÚNET_CONFIG_BRIDGE_OPTIONSr<   ÚlowerÚkeys)ÚifacesÚcontentsÚsrc_dirÚsrc_pathÚcurrifÚliner�   ÚoptionÚparsed_src_dirÚexpanded_pathÚdir_contentsr�   ÚentryÚsrc_dataÚ	abs_entryÚnew_src_pathÚfpÚabs_pathr@   r{   r|   ÚvalÚdomainr%   Úbridge_optionÚbond_options                             rF   r—   r—   ³   sþ  € ð €FØ×#Ñ#×%ˆØ�z‰z‹|ˆØ�?‰?˜3×ÑÙØ—
‘
˜3“ˆØ�q‘ˆØÐ'Ô'Ø" 1™XˆNØ!×,Ñ,¨S×1Ñ1Ü!#§¡§¡¨gÓ!F�Ü!%§¢¨>×!:�Ü!Ÿzšz¨-Ó8�ñ !-ó â ,˜äŸ™Ÿ™¤r§w¡w§|¡|°MÓ'H×Ió 6ô ŸHšHÐ%7¸Ó>ó	 6”B—G‘G—L‘L Ö5Ù ,ð ð  ó *�EÜ#×2Ò2°5Ó9×?Ñ?ÓA�HÜ "§¡§¡°Ó 6�IÜ*Ø¬"¯'©'¯/©/¸)Ó*DÀiöô *ô ";ð  �xÓØ  ™8ˆLØ×*Ñ*¨3×/Ñ/Ü!Ÿw™wŸ|™|¨GÓB�Ü!%§¢¨<Ö!8�Ü˜-¨Ô-°Ø!Ÿw™w›yŸ™Ó0�H÷ .äŸ7™7Ÿ?™?¨=Ó9�Ü&Ø˜H¤b§g¡g§o¡o°hÓ&?Àöô	 "9ð �vÓØ˜q˜r›�Ø Ó&ð '¨ð%�F˜5‘Mð )-��u‘˜fÓ%ô #ð �wÓØ$)¨!¨A JÑ!ˆE�6˜6Ø˜FÓ"ð # Hð!��u’ð ˜V E™]Ó*Ý!ã-2³Hð>óð ð '-ˆF�5‰M˜(Ñ#Ø&,ˆF�5‰M˜(Ñ#Ø‹FØ�{Ó"Ø�Q‰x˜7Ó"Ø˜A‘h‘à˜A‘h�Ø*-ˆF‰N˜;Ô'ØÔ)Ó)Ø%*¨1¡XˆF‰N˜6Ô"ØÔ*Ó*Ø F™^Ó+Ø)+�‘˜vÑ&Ø‰N˜6Ñ"×)Ñ)¨#¯(©(°5¸¸°9Ó*=×>Ø×Ñ˜v×&Ñ&Ø˜F™NÓ*Ø(*�‘˜uÑ%Ø˜Ó%Ø24�‘˜uÑ% hÑ/Ø# A B›i�FØ‘N 5Ñ)¨(Ñ3×:Ñ:¸6ÖBô (àÐ,Ó,Ø79�‘˜uÑ% mÑ4Ø# A B›i�FØ‘N 5Ñ)¨-Ñ8×?Ñ?ÀÖGô (ò -ð ×Ñ˜y×)Ò)Ø˜v™~Ó-Ø+-�‘˜xÑ(ØÔ2Ó2Ø &§¡¨y¸"¸aÓ @�Ø:?À¹(�‘˜xÑ(¨Ô7Ø˜>Ó)Ø46�‘˜xÑ(¨Ñ1Ø" 1 2›Y�EØ‘N 8Ñ,¨WÑ5×<Ñ<¸UÖCô 'à˜;Ó&ð
 ˜‘8—>‘>Ó# uÓ,Ø6;¸A±h�F‘N 8Ñ,¨UÔ3à6;¸A±h�F‘N 8Ñ,¨UÔ3ØÐ,Ó,Ø V¡^°HÑ%=Ó=Ø;=�F‘N 8Ñ,¨ZÑ8ØAFÀqÁ�‘˜xÑ(¨Ñ4°U¸1±XÔ>ØÐ,Ó,Ø V¡^°HÑ%=Ó=Ø;=�F‘N 8Ñ,¨ZÑ8ØAFÀqÁ�‘˜xÑ(¨Ñ4°U¸1±XÔ>ò -ð ×Ñ˜w×'Ô'Ø˜V™^Ó+Ø)+�‘˜vÑ&Ø Ÿ.™.¨°"°aÓ8ˆKØ27¸±(ˆF‰N˜6Ñ" ;Ô/ñe &ðf —‘–ˆØ˜ ™Õ&Ø$)ˆF�5‰M˜&Ó!ò ùòO ÷& .Ö-ús   Ã
AW"ÄW"Ä-#W"È5W'×'
W6zConverting eni datac                 ó2   • 0 n[        XSSS9  [        U5      $ )z=Return a network config representation of what is in eni_dataN)r¢   r£   )r—   Ú_ifaces_to_net_config_data)Úeni_datar    s     rF   Úconvert_eni_datar·   7  s    € ð €FÜ˜6°TÀDÒIÜ% fÓ-Ð-rH   c                 óH  • 0 nU R                  5        Hç  u  p#UR                  S5      S   nXA;  a"  US:X  a  SnOSnXT/ S.X'   SU;   a
  US   X   S'   X#S	   S
.nUR                  S5      (       a  SUS'   OSUS'   UR                  S	5      S:X  a  US   US'   S H  nXs;   d  M
  X7   Xg'   M     SU;   a0  S H*  nXƒS   ;   d  M  US   U   (       d  M  US   U   USU-   '   M,     X   S   R                  U5        Mé     S[	        U5       V	s/ s H  o‘U	   PM	     sn	S.$ s  sn	f )z¶Return network config that represents the ifaces data provided.
ifaces = _parse_deb_config_data(...)
config = ifaces_to_net_config_data(ifaces)
state = parse_net_config_data(config).Ú:r   ÚloÚloopbackÚphysical)rR   rP   rQ   rW   rV   r|   )Ú_orig_eni_namerR   ri   rJ   ÚmanualÚstaticr   )r   r   r   r   )r�   r€   Údns_rQ   rv   )ÚversionÚconfig)r8   Ú	partitionra   r=   r?   )
r    ÚdevsrP   ÚdataÚdevnameÚdtyperA   Úcopy_keyÚnÚds
             rF   rµ   rµ   ?  sP  € ð
 €DØ—l‘l–n‰
ˆà—.‘. Ó% aÑ(ˆØÓØ˜$‹Ø"‘à"�Ø%*ÈÑKˆD‰Mð ˜dÓ"Ø/3°KÑ/@�‘˜mÑ,Ø$(°x±.ÑAˆØ�8‰8�F×ÑØ &ˆF�9Òà (ˆF�9Ñà�8‰8�HÓ Ó)Ø $ Y¡ˆF�9Ñã;ˆHØÕØ#'¡>�Ó ñ <ð �D‹=Û.�Ø˜U™Õ#¨¨U©°A¯©Ø)-¨e©°Q©�F˜6 A™:Ó&ñ /ð 	‰�iÑ ×'Ñ'¨Ö/ñ= %ð@ ´f¸T´lÓ$C²l°¨!¤W±lÑ$CÑDÐDùÒ$Cs   ÄDc                   ód   • \ rS rSrSrSS jrSS jrSS jrSS jr  SS\	S	\
\   S
S4S jjrSrg)ÚRendererih  z@Renders network information in a /etc/network/interfaces format.Nc                 ó    • U(       d  0 nUR                  SS5      U l        UR                  SS 5      U l        UR                  SS5      U l        g )NÚeni_pathúetc/network/interfacesÚ
eni_headerÚnetrules_pathz(etc/udev/rules.d/70-persistent-net.rules)ra   rÎ   rÐ   rÑ   )ÚselfrÂ   s     rF   Ú__init__ÚRenderer.__init__k  sF   € ÞØˆFØŸ
™
 :Ð/GÓHˆŒØ Ÿ*™* \°4Ó8ˆŒØ#ŸZ™ZØÐGó
ˆÕrH   c                 ó  • / nUS-   nUS-   nSnSSS.nSnUS   S	:X  a  US
   S	:X  a  SnOUS   S:X  a  US   S:X  a  SnSn	S H•  n
U(       a  U
S:X  a  M  U
S:X  a  X˜< SXz   < SX   < 3-  n	M-  X¡;   d  M4  U
S:X  aJ  SX   ;   a  U	S-  n	O UR                  S5      S:X  a  U	S-  n	OU	S-  n	SU;   a  U	SX   < SUS   < 3-  n	M‚  M„  U	SXz   < SX   < 3-  n	M—     UR                  XI-   U-   5        UR                  XY-   U-   5        U$ )af  When rendering routes for an iface, in some cases applying a route
may result in the route command returning non-zero which produces
some confusing output for users manually using ifup/ifdown[1].  To
that end, we will optionally include an '|| true' postfix to each
route line allowing users to work with ifup/ifdown without using
--force option.

We may at somepoint not want to emit this additional postfix, and
add a 'strict' flag to this function.  When called with strict=True,
then we will not append the postfix.

1. http://askubuntu.com/questions/168033/
         how-to-set-static-routes-in-ubuntu-server
zpost-up route addzpre-down route delz || trueÚgwr   )r   r   rƒ   r   z0.0.0.0r   z defaultz::r3   r   z -A inet6 default)r   r   r   r   r4   r¹   z	 -A inet6é    z -hostz -netr2   )ra   r=   )rÒ   ÚrouteÚindentrB   r   r   Úor_trueÚmappingÚ
default_gwÚ
route_lineÚks              rF   Ú_render_routeÚRenderer._render_routet  sS  € ð ˆØÐ)Ñ)ˆØÐ,Ñ,ˆØˆàØñ
ˆð
 ˆ
Ø�Ñ˜yÓ(¨U°9Ñ-=ÀÓ-JØ#‰JØ�9Ñ Ó%¨%°©/¸QÓ*>Ø,ˆJàˆ
Û1ˆAÞ˜a 9›nÙØ�I‹~ØªJ¸¼
ÀEÃHÐMÑM’
Ø•Ø˜	“>Ø˜e™h“Ø" kÑ1™
ØŸ™ 8Ó,°Ó2Ø" hÑ.™
à" gÑ-˜
Ø 5Ó(Ù"°%´(¸EÀ(»OÐ&LÑLš
ñ )ñ ¨g¬j¸%»(Ð"CÑC’Jñ! 2ð" 	�‰�r‘¨Ñ0Ô1Ø�‰�tÑ(¨7Ñ2Ô3ØˆrH   c           	      óD  • [         R                  " U5      n[        [        5         UR	                  S5        S S S 5        / nUR                  S0 5      nUR	                  SS 5      nUR	                  SS 5      nU(       a  SUS'   U(       Ga‚  [        U5       GHp  u  pxS n	XqS'   US   US	'   UR                  S
S5      US
'   Sn
[        U5      (       a  U
S-  n
OUR                  S5      n	X¡S'   US   S:X  d  US   S:X  d	  US   S:X  a  SUS	'   Ub  U(       a  SOSUS'   ONUS   S:X  a  SUS	'   SUS'   O:US   S:X  a  SUS	'   SUS'   O&[        U5      (       a  SUS	'   Ub  U(       a  SOSUS'   SU Vs/ s H  nSUS   -  U;   PM     sn;   a  SUS
'   [        [        XUS9[        X5      -   [        XU	5      -   5      nUR                  S/ 5       H"  nUR                  U R                  USS 95        M$     UR                  U5        GMs     U$ / nS!U;   d  S"U;   a!  UR                  S#R                  " S'0 UD65        UR                  S$R                  " S'0 UD65        UR                  [        US%S S&95        UR                  U5        U$ ! , (       d  f       GNZ= fs  snf )(NÚ	config_idrQ   z	accept-raÚ	wakeonlanÚgzethernet-wolrM   rR   rO   rJ   ri   rN   Ú6r   Údhcp4Údhcp6zipv6_dhcpv6-statefulÚdhcpÚ1Ú0Ú	accept_razipv6_dhcpv6-statelessÚ
ipv6_slaacr¿   Tzauto %srP   Úalias©rp   Úroutesz    )rÙ   zbond-masterzbond-slaveszauto {name}ziface {name} {inet} {mode}r   )rM   rb   rm   )rn   Údeepcopyr   ÚKeyErrorÚpopra   Ú	enumerater
   r:   rs   rG   rg   Úextendrß   r=   r>   )rÒ   r@   rp   ÚsectionsrQ   rë   Úethernet_wolrM   rA   rb   Úsubnet_inetr¥   rr   rØ   s                 rF   Ú_render_ifaceÚRenderer._render_iface¨  sË  € Ü—’˜eÓ$ˆô ”hÕØ�I‰I�kÔ"÷  àˆØ—)‘)˜I rÓ*ˆØ—I‘I˜k¨4Ó0ˆ	Ø—y‘y ¨dÓ3ˆÞà$'ˆE�.Ñ!ßÜ!*¨7×!3‘�Ø"&�Ø!&�g‘Ø & v¡��f‘Ø#)§:¡:¨i¸Ó#@��iÑ Ø$�Ü! &×)Ñ)Ø 3Ñ&‘Kà&,§j¡j°Ó&7�OØ +�f‘à˜6‘N gÓ-Ø˜f‘~¨Ó0Ø˜f‘~Ð)?Ó?ð %+�E˜&‘MØ Ñ,æ4=©SÀ3˜˜kÑ*øØ˜F‘^Ð'>Ó>à$*�E˜&‘Mà$'�E˜&’MØ˜F‘^ |Ó3à$*�E˜&‘Mà$'�E˜&’MÜ# F×+Ñ+à$,�E˜&‘MØ Ñ,æ4=©SÀ3˜˜kÑ*ð ÙDLóÚDL¸D�I  v¡Ñ/°4Ô7ÁHñó ð (/�E˜)Ñ$äÜ&ØÐ7Gñô (¨Ó6ñ7ô ' u°_ÓEñ	Fó�ð $ŸZ™Z¨°"Ö5�EØ—L‘L ×!3Ñ!3°EÀ&Ð!3Ð!IÖJñ 6ð —‘ ×&ño "4ðD ˆð ˆEØ Ó%¨¸%Ó)?Ø—‘˜]×1Ò1Ñ:°EÑ:Ô;Ø�L‰LÐ5×<Ò<ÑE¸uÑEÔFØ�L‰LÜ  ¨aÀÑFôð �O‰O˜EÔ"Øˆ÷Y  Öüòds   ¦JÅ2JÊ
Jc                 ó<  ^
• SSSSSS./S.nUR                  5        H0  nUR                  S5      S:X  d  M  [        R                  " U5      nM2     UR                  nU(       a  S	R                  U5      US
   S   S'   UR                  nU(       a  S	R                  U5      US
   S   S'   SSSSSSS.m
/ nUR                  U R                  U5      5        [        UR                  5       U
4S jS9 H8  nUR                  S5      S:X  a  M  UR                  U R                  XBS95        M:     UR                  5        H#  nUR                  U R                  U5      5        M%     SR                  U V	s/ s H  n	SR                  U	5      PM     sn	5      S-   $ s  sn	f )z1Given state, emit etc/network/interfaces content.rº   r¼   rN   r»   ri   )rR   rJ   )rP   rR   rN   rQ   rP   r4   rQ   r   r1   r0   rv   r~   é   rz   é   )r»   r¼   rZ   rX   rY   r[   c                 ó   >• TU S      U S   4$ )NrR   rP   rm   )rÞ   Úorders    €rF   Ú<lambda>Ú-Renderer._render_interfaces.<locals>.<lambda>   s   ø€ ˜5  6¡Ñ+¨Q¨v©YÑ7rH   )rD   rî   z

Ú
)Úiter_interfacesra   rn   rð   r1   r;   Údns_searchdomainsrô   rø   r?   Úiter_routesr=   rß   )rÒ   Únetwork_staterp   rº   r@   r�   Úsearchdomainsrõ   rØ   Úsrþ   s             @rF   Ú_render_interfacesÚRenderer._render_interfacesú  s‘  ø€ ð ØØØ!+¸Ñ?Ð@ñ	
ˆð #×2Ñ2Ö4ˆEØ�y‰y˜Ó  DÕ(Ü—]’] 5Ó)’ñ 5ð $×3Ñ3ˆÞØ25·(±(¸;Ó2GˆBˆy‰M˜!ÑÐ.Ñ/à%×7Ñ7ˆÞØ-0¯X©X°mÓ-DˆBˆy‰M˜!Ñ˜\Ñ*ð
 ØØØØØñ
ˆð ˆØ�‰˜×*Ñ*¨2Ó.Ô/ÜØ×)Ñ)Ó+Ü7ô
ˆEð
 �y‰y˜Ó  DÓ(ÙØ�O‰OØ×"Ñ" 5Ð"ÐLöñ
ð #×.Ñ.Ö0ˆEØ�O‰O˜D×.Ñ.¨uÓ5Ö6ñ 1ð �{‰{±(Ó;²(¨Q˜DŸI™I ažL±(Ñ;Ó<¸tÑCÐCùÒ;s   Å4Fr  Ú	templatesÚreturnc                 óL  • [         R                  " X0R                  5      n[        R                  " [
        R                  R                  U5      5        U R                  (       a  U R                  OSn[        R                  " XEU R                  U5      -   5        U R                  (       ay  [         R                  " X0R                  5      n[        R                  " [
        R                  R                  U5      5        [        R                  " UU R                  U5      SS9  g g )Nrƒ   T)rB   Úpreserve_mode)r   Útarget_pathrÎ   r   Ú
ensure_dirrŽ   r�   r˜   rÐ   Ú
write_filer  rÑ   Ú_render_persistent_net)rÒ   r  r
  ÚtargetÚfpeniÚheaderÚnetruless          rF   Úrender_network_stateÚRenderer.render_network_state.  s»   € ô × Ò  ¯©Ó7ˆÜ�ŠœŸ™Ÿ™¨Ó.Ô/Ø$(§O§O�—’¸ˆÜ�Š˜¨×(?Ñ(?ÀÓ(NÑNÔOà××Ü×'Ò'¨×0BÑ0BÓCˆHÜ�OŠOœBŸG™GŸO™O¨HÓ5Ô6Ü�OŠOØØ×3Ñ3°MÓBØ"óð rH   )rÐ   rÎ   rÑ   ©N)rƒ   ©F)NN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rÓ   rß   rø   r  r   r   Údictr  Ú__static_attributes__rm   rH   rF   rÌ   rÌ   h  sP   † ÙJô
ô2ôhPôd2Dðn %)Øñ	à#ðð ˜D‘>ðð
 
÷ð rH   rÌ   c                 óÖ   • / SQnSS/nU H  n[         R                  " X2U S9(       a  M    g   [         R                  " U S5      n[        R                  R                  U5      (       d  gg)N)ÚifqueryÚifupÚifdownz/sbinz	/usr/sbin)r€   r  FrÏ   T)r   Úwhichr  rŽ   r�   r’   )r  Úexpectedr€   ÚpÚenis        rF   Ú	availabler)  C  s]   € Ú,€HØ�{Ð#€FÛˆÜ�zŠz˜!°6×:Ñ:Ùñ ô ×
Ò
˜6Ð#;Ó
<€CÜ�7‰7�>‰>˜#×ÑØàrH   r  r  )"rn   r�   ÚloggingrŽ   r“   Ú
contextlibr   Útypingr   Ú	cloudinitr   r   r   Úcloudinit.netr   r	   r
   Úcloudinit.net.network_stater   Ú	getLoggerr  r_   rœ   r�   r›   rG   rg   rs   r—   Útimedr·   rµ   rÌ   r)  rm   rH   rF   Ú<module>r2     s«   ðó Û Û Û 	Û 	Ý Ý ç -Ñ -ß ?Ñ ?Ý 4à×Ò˜Ó!€òÐ ò	Ð òÐ ò8ò<9ôxò0A*ðH ×ÒÐ(Ó)ñ.ó *ð.ò&EôRXˆx× Ñ ô Xõv
rH   