+
    ˜qgj]  ã                   óP  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	H
t
Ht ^ RIHtHtHtHt ^ RIHtHtHtHtHtHt ^ RIHtHt RtRt]P:                  ! ]4      tR	 t R
 R lt!R t"RR lt#RR R llt$R R lt%R R lt&R R lt' ! R R]PP                  4      t(R t)R# )é    N)ÚSpooledTemporaryFile)ÚCallableÚListÚOptional)ÚfeaturesÚsafeyamlÚsubpÚutil)ÚIPV6_DYNAMIC_TYPESÚSYS_CLASS_NETÚget_devicelistÚrendererÚshould_add_gateway_onlink_flagÚsubnet_is_ipv6)ÚNET_CONFIG_TO_V2ÚNetworkStatez/etc/netplan/50-cloud-init.yamls4  # This is the initial network config.
# It can be overwritten by cloud-init or console-conf.
network:
    version: 2
    ethernets:
        all-en:
            match:
                name: "en*"
            dhcp4: true
        all-eth:
            match:
                name: "eth*"
            dhcp4: true
c                 óJ   a€ \        V3R  lV P                  4        4       4      # )c              3   ó`   <"  € T F#  w  rVP                  S4      '       g   K  W3x € K%  	  R # 5i©N)Ú
startswith)Ú.0ÚkeyÚvalueÚmatchs   &  €Ú7/usr/lib/python3/dist-packages/cloudinit/net/netplan.pyÚ	<genexpr>Ú,_get_params_dict_by_match.<locals>.<genexpr>-   s*   øé € ð á*‰LˆSØ�>‰>˜%× ô 	ˆ�Û*ùs   ƒ.£.)ÚdictÚitems)Úconfigr   s   &fr   Ú_get_params_dict_by_matchr!   ,   s#   ø€ Üô à"ŸL™LœNóó ð ó    c                ó<   € V ^8„  d   QhR\         R\         R\        /# )é   r    Úentryr   )r   r   )Úformats   "r   Ú__annotate__r'   4   s+   € ÷ VKñ VKœtð VK¬Dð VKÄHñ VKr"   c                óÌ  € R#R lp. p. p. p. pV P                  R. 4      p	V	f   . p	V	 EFÜ  p
V
P                  R4      pV
P                  R4      pVP                  R4      '       dY   VR8X  d
   VR,          pVP                  VR/4       Ve0   V R	2pVP                  V/ 4      pWÎR
&   VP                  WÞ/4       K“  K•  V\        9   dE   VP                  RR/4       Ve,   VP                  R/ 4      pWÎR
&   VP                  RV/4       Kâ  Kä  VR$9   g   Kí  RV
P                  R4      ,          pRV
9   d    VRV
P                  R4      ,          ,          pV
P                  R4      '       dl   RV
P                  R4      RR/p\	        V
R,          V4      '       d$   \
        P                  RV
R,          V4       RVR&   Ve   VVR&   VP                  V4       RV
9   d   Wt! V
P                  R. 4      4      ,          pRV
9   d   W„! V
P                  R. 4      4      ,          pRV
9   dD   Rp\        V
4      '       d   RV! 4       9   d   RpVP                  VV
P                  R4      /4       V
P                  R. 4       Ft  pVP                  R4      : RVP                  R4      : 2pRVP                  R4      RV/pVP                  R4      pVe   VVR&   M	Ve   VVR&   VP                  V4       Kv  	  VP                  V4       EKß  	  RV 9   dT   VP                  R4      pV'       d/   V R,          V8w  d!   \
        P                  RVV R,          V4       MV R,          VR&   \        V4      ^ 8”  d   VP                  RV/4       \        V4      ^ 8”  d   VP                  RV/4       \        V4      ^ 8”  d   RV/pVP                  R V/4       \        V4      ^ 8”  d9   VP                  R / 4      pVP                  R!V/4       VP                  R V/4       R"V 9   dF   V R",          e9   VP                  R"\        P                  ! V P                  R"4      4      /4       R# R# R# )%aj  This method parse a cloudinit.net.network_state dictionary (config) and
   maps netstate keys/values into a dictionary (entry) to represent
   netplan yaml. (config v1 -> netplan)

An example config dictionary might look like:

{'mac_address': '52:54:00:12:34:00',
 'name': 'interface0',
 'subnets': [
    {'address': '192.168.1.2/24',
     'mtu': 1501,
     'type': 'static'},
    {'address': '2001:4800:78ff:1b:be76:4eff:fe06:1000",
     'mtu': 1480,
     'netmask': 64,
     'type': 'static'}],
  'type: physical',
  'accept-ra': 'true'
}

An entry dictionary looks like:

{'set-name': 'interface0',
 'match': {'macaddress': '52:54:00:12:34:00'},
 'mtu': 1501}

After modification returns

{'set-name': 'interface0',
 'match': {'macaddress': '52:54:00:12:34:00'},
 'mtu': 1501,
 'address': ['192.168.1.2/24', '2001:4800:78ff:1b:be76:4eff:fe06:1000"],
 'ipv6-mtu': 1480}

c                óv   € V '       d   \        V \        4      '       g   V # W9   d   V P                  V4      # V .# )zD
Helper to convert strings to list of strings, handle single string
)Ú
isinstanceÚstrÚsplit)ÚobjÚtokens   &&r   Ú_listifyÚ$_extract_addresses.<locals>._listifyY   s;   € ÷ œ* S¬#×.Ò.ØˆJØŒ<Ø—9‘9˜UÓ#Ð#ð ðð r"   ÚsubnetsNÚtypeÚmetricÚdhcpÚ4Tz
-overrideszroute-metricÚdhcp6zdhcp6-overridesz%sÚaddressÚprefixz/%dÚgatewayÚviaÚtoÚdefaultzAGateway %s is not contained within subnet %s, adding on-link flagzon-linkÚdns_nameserversÚ
dns_searchÚmtuzipv6-mtuÚroutesÚnetworkÚ/zZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.Ú	addressesÚnameserversÚsearchz	accept-ra)Ú )ÚstaticÚstatic6)Úgetr   Úupdater   r   ÚLOGÚdebugÚappendr   ÚwarningÚlenr
   Úis_true)r    r%   Úifnamer   r/   rC   r@   rD   Úsearchdomainsr1   ÚsubnetÚsn_typeÚ	sn_metricÚdhcp_override_keyÚdhcp_overrideÚaddrÚ	new_routeÚmtukeyÚrouteÚto_netÚroute_metricÚ	entry_mtuÚnss   &&&&                   r   Ú_extract_addressesr`   4   s.  € ôJð €IØ€FØ€KØ€MØ�j‰j˜ BÓ'€GØ‚ØˆÜˆØ—*‘*˜VÓ$ˆØ—J‘J˜xÓ(ˆ	Ø×Ñ˜f×%Ò%Ø˜&Ô Ø˜3•�Ø�L‰L˜' 4˜Ô)ØÒ$à'. i¨zÐ$:Ð!Ø %§	¡	Ð*;¸RÓ @�Ø09˜nÑ-Ø—‘Ð/Ð?Ö@ñ %ð Ô*Ô*Ø�L‰L˜' 4˜Ô)ØÒ$à %§	¡	Ð*;¸RÓ @�Ø09˜nÑ-Ø—‘Ð/°Ð?Ö@ñ	 %ð
 Ð-Ö-Ø˜&Ÿ*™* YÓ/Õ/ˆDØ˜6Ô!Ø˜ §
¡
¨8Ó 4Õ4Õ4�Ø�z‰z˜)×$Ò$à˜6Ÿ:™: iÓ0Ø˜)ð�	ô 2°&¸Õ2CÀT×JÒJÜ—I‘Ið/à˜yÕ)Øô	ð ,0�I˜iÑ(ØÒ(à*3�I˜hÑ'Ø—‘˜iÔ(Ø  FÔ*Ø˜x¨¯
©
Ð3DÀbÓ(IÓJÕJ�Ø˜vÔ%Ø ¨&¯*©*°\À2Ó*FÓ!GÕG�Ø˜ŒØ�Ü! &×)Ò)¨j¹H»JÔ.FØ'�FØ—‘˜f f§j¡j°Ó&7Ð8Ô9ØŸ™ H¨bÖ1�Ø$)§I¡I¨iÖ$8¸%¿)¹)ÀHÕ:MÐN�à˜5Ÿ9™9 YÓ/Ø˜&ð�	ð
  %Ÿy™y¨Ó2�ØÒ+Ø*6�I˜hÒ'ØÒ*Ø*3�I˜hÑ'Ø—‘˜iÖ(ñ 2ð ×Ñ˜T×"ñG ðJ �„Ø—I‘I˜eÓ$ˆ	ß˜ �¨)Ô3Ü�K‰Kð6àØ�u•Øõð " %�=ˆE�%‰LÜ
ˆ9ƒ~˜ÔØ�‰�k 9Ð-Ô.Ü
ˆ6ƒ{�Q„Ø�‰�h Ð'Ô(Ü
ˆ;Ó˜!ÔØ˜;Ð'ˆØ�‰�m RÐ(Ô)Ü
ˆ=Ó˜AÔØ�Y‰Y�} bÓ)ˆØ
�	‰	�8˜]Ð+Ô,Ø�‰�m RÐ(Ô)Ø�fÔ ¨Õ!4Ò!@Ø�‰�k¤4§<¢<°·
±
¸;Ó0GÓ#HÐIÖJñ "AÑr"   c           
      óè   € \        V P                  4        UUu. uF   w  r4VP                  R R4      V8X  g   K  VNK"  	  upp4      p\        V4      ^ 8”  d   VP	                  RV/4       R# R# u uppi )zbond-masterNÚ
interfaces)Úsortedr   rI   rO   rJ   )rb   r%   Úbond_masterÚnameÚcfgÚbond_slave_namess   &&&   r   Ú_extract_bond_slaves_by_namerh   Í   sv   € Üð  *×/Ñ/Ô1ô	
á1‘�Ø�w‰w�} dÓ+¨{Ñ:÷ ˆDÙ1ò	
óÐô ÐÓ˜qÔ Ø�‰�lÐ$4Ð5Ö6ñ !ùó	
s
   ™A.
¹A.
c                 ó  € \         P                  ! V R 4      p\        P                  P	                  V4      '       g   R# \
        P                  ! V4      pV\        8w  d   R# R Uu. uF  p\         P                  ! W4      NK  	  ppV Uu. uF,  p\        P                  P	                  V4      '       g   K*  VNK.  	  pp\        P                  RVV4       V.V,            F  p\        P                  ! V4       K  	  R# u upi u upi )z etc/netplan/00-snapd-config.yamlNz9removing known config '%s' and derived existing files: %s)z-run/systemd/network/10-netplan-all-en.networkz.run/systemd/network/10-netplan-all-eth.networkz#run/systemd/generator/netplan.stamp)r	   Útarget_pathÚosÚpathÚisfiler
   Úload_binary_fileÚKNOWN_SNAPD_CONFIGrK   rL   Úunlink)ÚtargetÚtpathÚcontentÚfÚderivedÚexistings   &     r   Ú_clean_defaultrw   Ù   sá   € ô ×Ò˜VÐ%GÓH€EÜ�7‰7�>‰>˜%× Ò ÙÜ×#Ò# EÓ*€GØÔ$Ô$Ùñ
óñ
ˆAô 	×Ò˜Ö#ñ
ð ð ñ #Ó8™7�a¤b§g¡g§n¡n°Q×&7—�™7€HÐ8Ü‡I�IØCØØôð ˆW�x×ÐˆÜ
�	Š	�!Žó  ùòùò 9s   Á&C?Â'DÂ7Dc                óR   € V ^8„  d   QhR\         R\        \         ,          R\        /# )r$   Únet_config_contentrq   Úreturn)r+   r   Úbool)r&   s   "r   r'   r'   ö   s(   € ÷ 6ñ 6Üð6Ü%-¬c¥]ð6ä	ñ6r"   c                óâ  €  ^ RI Hp ^ RIHp \        T 4      p  \        RR7      ;_uu_ 4       pTP                  T 4       TP                  4        TP                  ^ \        P                  4       T! 4       pTP                  T4       T! 4       pTP!                  T4       T'       g%   \"        P$                  P'                  \        4      pMTpTP)                  T4       RRR4       \
        P                  R	4       R
#   \         d    \
        P                  R\        4        R# i ; i  + '       g   i     LS; i  \*         d'   p\
        P-                  R\        T4        Rp?R# Rp?ii ; i)a@  Use netplan.State._write_yaml_file to write netplan config

Where netplan python API exists, prefer to use of the private
_write_yaml_file to ensure proper permissions and file locations
are chosen by the netplan python bindings in the environment.

By calling the netplan API, allow netplan versions to change behavior
related to file permissions and treatment of sensitive configuration
under the API call to _write_yaml_file.

In future netplan releases, security-sensitive config may be written to
separate file or directory paths than world-readable configuration parts.
)ÚParser)ÚStatez.No netplan python module. Fallback to write %sFÚw©ÚmodeNzUUnable to render network config using netplan python module. Fallback to write %s. %sz0Rendered netplan config using netplan python APIT)Únetplan.parserr}   Únetplan.stater~   ÚImportErrorrK   rL   ÚCLOUDINIT_NETPLAN_FILEÚ_maybe_strip_invalid_mtur   ÚwriteÚflushÚseekÚioÚSEEK_SETÚ	load_yamlÚimport_parser_resultsrk   rl   ÚbasenameÚ_write_yaml_fileÚ	ExceptionrN   )	ry   rq   r}   r~   rt   ÚparserÚstate_output_fileÚfileÚes	   &&       r   Únetplan_api_write_yaml_filer•   ö   s#  € ð Ý)Ý'ô 2Ð2DÓEÐðÜ! s×+Õ+¨qØ�G‰GÐ&Ô'Ø�G‰GŒIØ�F‰F�1”b—k‘kÔ"Ù“XˆFØ×Ñ˜QÔÙ %£ÐØ×3Ñ3°FÔ;÷ Ü—w‘w×'Ñ'Ô(>Ó?‘à�Ø×.Ñ.¨tÔ4÷# ,ô4 ‡I�IÐ@ÔAÙøôG ô Ü�	‰	Ø<Ü"ô	
ò ðú÷ ,×+ûô$ ô Ü�‰ð(ä"Øô		
õ ûðúsF   ‚C> šD= ®B1D*ÃD= Ã>%D'Ä&D'Ä*D:	Ä5D= Ä:D= Ä=E.ÅE)Å)E.c                ó$   € V ^8„  d   QhR\         /# )r$   ry   ©r+   )r&   s   "r   r'   r'   /  s   € ÷ ñ ´ñ r"   c                ó‚   € \         P                  '       d)   \        P                  ! RRV \        P                  R7      p V # )a  Strip invalid MTU from the netplan config.

This is a fix for https://github.com/canonical/cloud-init/issues/6239
A 0 MTU value is NOT valid, but cloud-init accepted it prior to 24.2,
so rejecting it after c465de8 is a breaking change for existing releases.
z^\s*mtu:\s*0\s*\nÚ )Úflags)r   ÚSTRIP_INVALID_MTUÚreÚsubÚ	MULTILINE)ry   s   &r   r†   r†   /  s9   € ô ×!×!Ð!ô  ŸVšVØ ØØÜ—,‘,ô	
Ðð Ðr"   c                ó<   € V ^8„  d   QhR\         R\         R\        /# )r$   Úcfg_filers   rz   )r+   r{   )r&   s   "r   r'   r'   F  s!   € ÷ 0ñ 0¬ð 0´sð 0¼tñ 0r"   c                óÖ   € \         P                  P                  V 4      '       g   R# \        P                  ! \        P
                  ! V 4      4      pV\        P                  ! V4      8g  # )z<Return True when new netplan config has changed vs previous.T)rk   rl   Úexistsr
   rŒ   Úload_text_file)r    rs   Ú	prior_cfgs   && r   Úhas_netplan_config_changedr¥   F  sE   € ä�7‰7�>‰>˜(×#Ò#áä—’œt×2Ò2°8Ó<Ó=€IØœŸš wÓ/Ñ/Ð/r"   c                ó0   € V ^8„  d   QhR\         R\         /# )r$   r    rs   r—   )r&   s   "r   r'   r'   P  s   € ÷ 2ñ 2¬#ð 2¼ñ 2r"   c                óþ   € \         P                  '       d   RMRp\        P                  P	                  V 4      '       d&   \
        P                  ! V 4      pW2,          V8X  d   Tp\
        P                  ! WVR7       R# )zDWrite netplan config to cfg_file because python API was unavailable.i€  i¤  r€   N)r   ÚNETPLAN_CONFIG_ROOT_READ_ONLYrk   rl   r¢   r
   Úget_permissionsÚ
write_file)r    rs   r�   Úcurrent_modes   &&  r   Úfallback_write_netplan_yamlr¬   P  sU   € ä×:×:Ð:‰5À€DÜ	‡w�w‡~�~�h×ÒÜ×+Ò+¨HÓ5ˆØÕ ,Ô.àˆDÜ‡O‚O�H¨D×1r"   c                   ó”   a € ] tR tRt o RtRR.tRR.tRR ltV 3R lR	 ltRV 3R
 lR llt	V 3R lR lt
RR ltV 3R lR ltRtV tR# )ÚRendereri[  zBRenders network information in a /etc/netplan/network.yaml format.ÚnetplanÚgenerateÚinfoNc                ó  € V'       g   / pVP                  R \        4      V n        VP                  RR4      V n        VP                  RR4      V n        VP                  RR4      V n        VP                  R4      ;'       g    . V n        R# )Únetplan_pathÚnetplan_headerNÚpostcmdsFÚclean_defaultTr   )rI   r…   r³   r´   Ú	_postcmdsr¶   Ú	_features)Úselfr    s   &&r   Ú__init__ÚRenderer.__init__a  so   € ßØˆFØ"ŸJ™J ~Ô7MÓNˆÔØ$Ÿj™jÐ)9¸4Ó@ˆÔØŸ™ J°Ó6ˆŒØ#ŸZ™Z¨¸Ó>ˆÔØŸ™ JÓ/×5Ð5°2ˆŽr"   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# )r$   rz   )r   r+   )r&   Ú__classdict__s   "€r   r'   ÚRenderer.__annotate__j  s   ø€ ÷ ñ ™$™s�)ñ r"   c                ó¶  € V P                   '       g]    \        P                  ! V P                  R R7      w  r\        P                  ! V4      pVR,          R,          V n         V P                   # V P                   #   \        P
                   d     T P                   # \        \        3 d,   p\        P                  RT4        Rp?T P                   # Rp?ii ; i)T©Úcapturez
netplan.ior   z-Failed to list features from netplan info: %sN)
r¸   r	   ÚNETPLAN_INFOr
   rŒ   ÚProcessExecutionErrorÚ	TypeErrorÚKeyErrorrK   rL   )r¹   Ú	info_blobÚ_errr±   r”   s   &    r   r   ÚRenderer.featuresj  s³   € Ø�~�~ˆ~ð	NÜ"&§)¢)¨D×,=Ñ,=ÀtÔ"L‘�	Ü—~’~ iÓ0�Ø!% lÕ!3°JÕ!?�”ð �~‰~Ðˆt�~‰~Ðøô ×-Ñ-ô ð ð �~‰~Ðô œxÐ(ô NÜ—	‘	ÐIÈ1×MÐMØ�~‰~ÐûðNús$   ”AA; Á;CÂCÂ,CÂ-CÃCc                ó:   <€ V ^8„  d   QhRS[ RS[S[,          RR/# )r$   Únetwork_stateÚ	templatesrz   N)r   r   r   )r&   r½   s   "€r   r'   r¾   x  s-   ø€ ÷ %1ñ %1á#ð%1ñ ™D•>ð%1ð
 
ñ%1r"   c                óª  € \         P                  P                  \        P                  ! V4      V P
                  4      p\        P                  ! \         P                  P                  V4      4       V P                  V4      pV P                  '       d   V P                  MR pVP                  R4      '       g
   VR,          pWe,           pVf   TpMTp\        WE4      p\        WWR7      '       g   \        WE4       V P                  '       d   \!        VR7       V P#                  V P$                  VR7       V P'                  V P$                  R7       R# )r™   Ú
N)rq   )ÚrunÚconfig_changed)rÎ   )rk   rl   Újoinr	   rj   r³   r
   Ú
ensure_dirÚdirnameÚ_render_contentr´   Úendswithr¥   r•   r¬   r¶   rw   Ú_netplan_generater·   Ú_net_setup_link)	r¹   rÊ   rË   rq   Úfpnplanrs   ÚheaderÚtarget_Únetplan_config_changeds	   &&&&     r   Úrender_network_stateÚRenderer.render_network_statex  s  € ô —'‘'—,‘,œt×/Ò/°Ó7¸×9JÑ9JÓKˆä�ŠœŸ™Ÿ™¨Ó0Ô1ð ×&Ñ& }Ó5ˆð )-×(;×(;Ð(;�×$Ò$ÀˆØ�‰˜t×$Ò$Ø�d�NˆFØÕ"ˆð Š>Ø‰GàˆGä!;¸GÓ!MÐÜ*¨7×CÓCÜ'¨Ô9à××ÐÜ &Õ)Ø×ÑØ—‘Ð/Eð 	ô 	
ð 	×Ñ §¡ÐÖ0r"   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )r$   rÎ   rÏ   )r{   )r&   r½   s   "€r   r'   r¾   Ÿ  s   ø€ ÷ 
7ñ 
7¡Tð 
7¹4ñ 
7r"   c                óÆ   € V'       g   \         P                  R 4       R# V'       g   \         P                  R4       R# \        P                  ! V P                  RR7       R# )z"netplan generate postcmds disabledNzEskipping call to `netplan generate`. reason: identical netplan configTrÀ   )rK   rL   r	   ÚNETPLAN_GENERATE)r¹   rÎ   rÏ   s   &&&r   rÕ   ÚRenderer._netplan_generateŸ  sB   € ßÜ�I‰IÐ:Ô;ÙßÜ�I‰Ið4ôñ Ü�	Š	�$×'Ñ'°×6r"   c                ó&  € V'       g   \         P                  R4       R# R\        P                  ! 4       9   d   \         P                  R4       R# . ROp\	        ^4       Ft  p \        4        F`  p\        P                  P                  \        V,           4      '       g   K5  \        P                  ! V\        V,           .,           RR7       Kb  	  Rp M	  X'       d   \        R4      VhR#   \        P                   d   pTp Rp?K«  Rp?ii ; i)	zŒTo ensure device link properties are applied, we poke
udev to re-evaluate networkd .link files and call
the setup_link udev builtin command
z'netplan net_setup_link postcmd disabledNznet.ifnames=0z%Predictable interface names disabled.TrÀ   zQ'udevadm test-builtin net_setup_link' unable to run successfully for all devices.)Úudevadmztest-builtinÚnet_setup_link)rK   rL   r
   Úget_cmdlineÚranger   rk   rl   Úislinkr   r	   rÃ   ÚRuntimeError)r¹   rÎ   Ú	setup_lnkÚ_ÚifaceÚlast_exceptionr”   s   &&     r   rÖ   ÚRenderer._net_setup_link«  sÝ   € ÷
 Ü�I‰IÐ?Ô@ÙØ¤× 0Ò 0Ó 2Ô2Ü�I‰IÐ=Ô>ÙÚAˆ	ô �q–ˆAð	#Ü+Ö-�EÜ—w‘w—~‘~¤m°eÕ&;×<Ô<ÜŸ	š	Ø%¬¸Õ)>Ð(?Õ?È÷ñ .ð
 "&�Ùñ ÷ Üð0óð "ð"ñ øô ×-Ñ-ô #Ø!"–ûð#ús   Á$:C.Â#1C.Ã.DÄDÄDc                ó&   <€ V ^8„  d   QhRS[ RS[/# )r$   rÊ   rz   )r   r+   )r&   r½   s   "€r   r'   r¾   Î  s   ø€ ÷ ` ñ ` ©\ð ` ¹cñ ` r"   c           	     ó  € VP                   ^8X  d;   \        P                  R4       \        P                  ! RVP
                  /RRR7      # / p/ p/ p/ p/ p. pVP                  P                  R. 4      pVP                  p	VP                  p
VP                  4        EF  pVP                  R4      p\        \        R VP                  4       4      4      pVP                  R4      pVR	8X  d‘   R
VRVP                  RR4      /pRV9   d   VR,          VR&   VR,          f3   VP                  RR4      pVe   RVP                  4       /VR&   MVR VR
 \        WßWÀP                   4       VP#                  WÏ/4       Ká  VR8X  Ed!   / p/ p\$        R,          pR+ Fc  p\'        VV4      pVP                  4        F@  w  ppVP                  VP)                  RR4      4      pVf   K-  VP#                  VV/4       KB  	  Ke  	  \+        V4      ^ 8”  d   VP#                  RV/4       VP                  R4      '       d   VR,          P                  4       VR&   VP                  R4      pVR8X  d   \-        VVV4       \        VVWÀP                   4       VP#                  VV/4       EK	  VR8X  Ed|   VP                  R4      pVf   \        P/                  RV4       EK?  \1        \2        P2                  ! V4      4      pRV/pRp\'        VV4      p/ p\$        R,          p VP                  4        Fx  w  ppV P                  V4      pVf   K  VP#                  VV/4       VR,9   g   K9  / p!V F$  p"V"P5                  4       w  p#p$\7        V$4      V!V#&   K&  	  VP#                  VV!/4       Kz  	  \+        V4      ^ 8”  d   VP#                  RV/4       VP                  R4      '       d   VR,          P                  4       VR&   \        VVWÀP                   4       VP#                  VV/4       EKŒ  VR8X  g   EK–  RVP                  R4      RVP                  R4      /p%VP                  RR4      pVe   VP                  4       V%R&   \        VV%WÀP                   4       VP#                  VV%/4       EK  	  V	'       g	   V
'       dP   R V	R!V
/p&W#WTV3 F@  p'V'P                  4        F)  w  p(p)R"V)9   g   R V)9  d   K  V)P#                  R"V&/4       K+  	  KB  	  R# p*VP9                  R$4       VV*! R%V4      ,          pVV*! R&V4      ,          pVV*! R'V4      ,          pVV*! R(V4      ,          pVV*! R)V4      ,          pR*P;                  V4      # )-r$   zV2 to V2 passthroughrA   F)Úexplicit_startÚexplicit_endrb   re   c                 ó   € V ^,          RJ# )é   N© )Úits   &r   Ú<lambda>Ú*Renderer._render_content.<locals>.<lambda>ç  s   € ¨2¨a­5¸Ñ+<r"   r2   Úphysicalzset-namer   NÚkeep_configurationÚcriticalÚmac_addressÚ
macaddressÚbondré   Ú-Ú
parameterszbond-slavesÚnoneÚbridgeÚbridge_portsz8Invalid config. The key'bridge_ports' is required in %s.Úbridge_ÚvlanÚidÚvlan_idÚlinkzvlan-raw-devicerC   rE   rD   c                 ó€   € V'       d6   \         P                  ! W/R R RR7      p\        P                  ! VR4      pV.# . # )FT)rï   rð   Únoaliasz    )r   ÚdumpsÚtextwrapÚindent)re   ÚsectionÚdumpÚtxts   &&  r   Ú_render_sectionÚ1Renderer._render_content.<locals>._render_section[  s?   € ßÜ—~’~Ø�OØ#(Ø!&Ø ô	�ô —o’o d¨GÓ4�Ø�u�ØˆIr"   znetwork:
    version: 2
Ú	ethernetsÚwifisÚbondsÚbridgesÚvlansr™   )Úbond_zbond-)z	path-costzport-priority)ÚversionrK   rL   r   r	  r    Ú_network_staterI   r=   Údns_searchdomainsÚiter_interfacesr   Úfilterr   Úlowerr`   r   rJ   r   r!   ÚreplacerO   rh   rN   rc   Úcopyr,   ÚintrM   rÐ   )+r¹   rÊ   r  r  r  r  r  rs   rb   rD   rR   r    rQ   ÚifcfgÚif_typeÚethÚmacaddrrü   Úbond_configÚv2_bond_mapr   Úbond_paramsÚparamr   ÚnewnameÚslave_interfacesr  Úportsr   Úmatch_prefixÚparamsÚ	br_configÚv2_bridge_mapÚnewvalueÚvalÚportÚportvalr  Únscfgr  Ú_namerf   r  s+   &&                                         r   rÓ   ÚRenderer._render_contentÎ  s6  € à× Ñ  AÔ%Ü�I‰IÐ,Ô-Ü—>’>Ø˜M×0Ñ0Ð1Ø$Ø"ôð ð ˆ	ØˆØˆØˆØˆØˆà"×1Ñ1×5Ñ5°lÀBÓGˆ
à#×3Ñ3ˆØ%×7Ñ7ˆà#×3Ñ3×5ˆFØ—Z‘Z Ó'ˆFäœÑ <¸f¿l¹l»nÓMÓNˆEà—i‘i Ó'ˆGØ˜*Ô$ð  Ø˜UŸY™Y w°Ó5ð�ð (¨5Ô0Ø&+Ð,@Õ&A�C˜
‘OØ�w•<Ò'Ø#Ÿi™i¨°tÓ<�GØÒ*Ø(4°g·m±m³oÐ'F˜˜Gšà ˜LØ 
˜OÜ" 5¨v·}±}ÔEØ× Ñ  & Ö/à˜FÕ"à�Ø �ô /¨vÕ6�Û/�EÜ";¸EÀ5Ó"I�KØ(3×(9Ñ(9Ö(;™˜˜uØ"-§/¡/°%·-±-ÀÀSÓ2IÓ"J˜Ø"š?Ù$Ø#×*Ñ*¨G°UÐ+;Ö<ó	 )<ñ 0ô �{Ó# aÔ'Ø—K‘K ¨{Ð ;Ô<Ø—9‘9˜]×+Ò+Ø).¨}Õ)=×)CÑ)CÓ)E�D˜Ñ&Ø#(§9¡9¨]Ó#;Ð Ø# vÔ-Ü0°¸TÀ6ÔJÜ" 5¨$°¿¹ÔFØ—‘˜f d˜^×,à˜HÕ$ð  %Ÿy™y¨Ó8�ØÒ'Ü—K‘Kð<àôò
 ÜœtŸyšy¨Ó6Ó7�à  %ð �ð
  )�Ü2°5¸,ÓG�Ø�	ô !1°Õ :�Ø$*§L¡L¦N‘L�E˜5Ø+×/Ñ/°Ó6�GØ’Ù Ø×$Ñ$ g¨uÐ%5Ô6ØÐ"@Ö@à#%˜Û#(˜CØ.1¯i©i«k™O˜T 7Ü-0°«\˜H T›Nñ $)ð "×(Ñ(¨'°8Ð)<Ö=ñ %3ô �y“> AÔ%Ø—M‘M <°Ð";Ô<Ø—9‘9˜]×+Ò+Ø+0°Õ+?×+EÑ+EÓ+G�F˜<Ñ(Ü" 5¨&°&¿-¹-ÔHØ—‘ ¨Ð/×0à˜F×"ð ˜%Ÿ)™) IÓ.Ø˜EŸI™IÐ&7Ó8ð�ð  Ÿ)™) M°4Ó8�ØÒ&Ø)0¯©«�D˜Ñ&Ü" 5¨$°¿¹ÔFØ—‘˜f d˜^×,ñU 6÷\ Ÿ-Ø  +¨x¸ÐGˆEØ%¨e¸eÓD�Ø")§-¡-¦/‘J�E˜3Ø$¨Ô+¨{À#Ô/EÙ Ø—J‘J ¨uÐ5Ö6ó #2ñ Eò
	ð 	�‰Ð3Ô4Ø‘? ;°	Ó:Õ:ˆØ‘? 7¨EÓ2Õ2ˆØ‘? 7¨EÓ2Õ2ˆØ‘? 9¨gÓ6Õ6ˆØ‘? 7¨EÓ2Õ2ˆà�w‰w�wÓÐr"   )r¸   r·   r¶   r´   r³   r   )NN)F)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rß   rÂ   rº   r   rÛ   rÕ   rÖ   rÓ   Ú__static_attributes__Ú__classdictcell__)r½   s   @r   r®   r®   [  sS   ø‡ € ÙLà! :Ð.ÐØ˜vÐ&€Lô6÷ð ÷%1ò %1÷N
7ð 
7ô!"÷F` ö ` r"   r®   c                  óf   € R .p RR.pV  F#  p\         P                  ! W!R7      '       d   K"   R# 	  R# )r¯   z	/usr/sbinz/sbin)rE   FT)r	   Úwhich)ÚexpectedrE   Úps      r   Ú	availablerA  q  s4   € Øˆ{€HØ˜7Ð#€FÛˆÜ�zŠz˜!×+Õ+Úñ ñ r"   r   )*r  rŠ   Úloggingrk   rœ   r
  Útempfiler   Útypingr   r   r   Ú	cloudinitr   r   r	   r
   Úcloudinit.netr   r   r   r   r   r   Úcloudinit.net.network_stater   r   r…   ro   Ú	getLoggerr6  rK   r!   r`   rh   rw   r•   r†   r¥   r¬   r®   rA  ró   r"   r   Ú<module>rI     sž   ðó Û 	Û Û 	Û 	Û Ý )ß +Ñ +ç 4Ó 4÷÷ ÷ Gà:Ð ðÐ ð  ×Ò˜Ó!€òõVKòr	7ô÷:6õrõ.0õ2ôS ˆx× Ñ ô S ôlr"   