+
    ˜qgj›_  ã                   óê   € ^ RI t ^ RIHt ^ RIHtHtHtHtHtH	t	 ^ RI
HtHt ^ RIHtHt ^ RIHt ] P$                  ! ]4      tR R ltR	 R
 lt ! R R4      t ! R R]P0                  4      tRR ltR# )é    N)Údefaultdict)ÚAnyÚCallableÚDictÚListÚOptionalÚTuple)ÚsubpÚutil)ÚrendererÚshould_add_gateway_onlink_flag©ÚNetworkStatec                ó    € V ^8„  d   QhR\         \        \        \        ,          3,          R\         \        \        \        ,          3,          /# ©é   ÚdataÚreturn)r   Ústrr   r   )Úformats   "Ú8/usr/lib/python3/dist-packages/cloudinit/net/networkd.pyÚ__annotate__r      s4   € ÷ 	ñ 	”Dœœd¤3�i˜Õ(ð 	¬T´#´t¼Cµy°.Õ-Añ 	ó    c                óV   € / pV P                  4        F  w  r#\        V4      W&   K  	  V# )z�
Normalize a dictionary of lists.
- Assumes top-level keys map to lists.
- Each list and any nested dicts/lists will be recursively normalized.
)ÚitemsÚ_normalize_value)r   Ú
normalizedÚkeyÚvalues   &   r   Ú	normalizer       s-   € ð €JØ—j‘j–l‰
ˆÜ*¨5Ó1ˆ
‹ñ #àÐr   c                ó0   € V ^8„  d   QhR\         R\         /# r   )r   )r   s   "r   r   r      s   € ÷ ñ œ3ð ¤3ñ r   c                óz  € \        V \        4      '       d*   / p\        V 4       F  p\        W,          4      W&   K  	  V# \        V \        4      '       dS   . pV  F>  p\        V\        \        34      '       d   \        V4      pMTpVP                  V4       K@  	   \        V4      # V #   \         d    Tu # i ; i)zŠ
Recursively normalize a dictionary or list:
- Dicts: keys sorted, values normalized
- Lists: items normalized and sorted (if comparable)
)Ú
isinstanceÚdictÚsortedr   ÚlistÚappendÚ	TypeError)r   r   r   Únormalized_itemsÚitemÚnormalized_items   &     r   r   r      s²   € ô �$œ×ÒØˆ
Ü˜$–<ˆCÜ.¨t­yÓ9ˆJ‹Oñ  àÐÜ	�Dœ$×	Ò	ØÐÛˆDÜ˜$¤¤t ×-Ò-Ü"2°4Ó"8‘à"&�Ø×#Ñ# OÖ4ñ ð	$ÜÐ*Ó+Ð+ð €Køô ô 	$Ø#Ò#ð	$ús   Â
B* Â*B:Â9B:c                   ó8   a € ] tR t^9t o R tR tR tR tRtV t	R# )Ú	CfgParserc                óD   € R . R. R. R. R. R. R/ R. R. R	. R
. R/ /V n         R# )ÚMatchÚLinkÚNetworkÚDHCPv4ÚDHCPv6ÚAddressÚRouteÚNetDevÚVLANÚBondÚBridgeÚRoutingPolicyRuleN©Ú	conf_dict)Úselfs   &r   Ú__init__ÚCfgParser.__init__:   sG   € à�RØ�BØ�rØ�bØ�bØ�rØ�RØ�bØ�BØ�BØ�bØ ð
ˆŽr   c                ó`  € V P                   P                  4        F�  pWA8X  g   K  V P                   V,          P                  V R V 24       \        \        P                  V P                   V,          4      4      V P                   V&   V P                   V,          P                  4        K‘  	  R# )Ú=N©r<   Úkeysr'   r&   r$   ÚfromkeysÚsort)r=   Úsecr   ÚvalÚks   &&&& r   Úupdate_sectionÚCfgParser.update_sectionJ   sy   € Ø—‘×$Ñ$Ö&ˆAØŽxØ—‘˜qÕ!×(Ñ(¨C¨5°°#°¨Ô8Ü$(¬¯©°t·~±~ÀaÕ7HÓ)IÓ$J�—‘˜qÑ!Ø—‘˜qÕ!×&Ñ&Ö(ó	 'r   c                óò  € V P                   P                  4        FØ  pWQ8X  g   K  W P                   V,          9  d   . V P                   V,          V&   V P                   V,          V,          P                  V RV 24       \        \        P                  V P                   V,          V,          4      4      V P                   V,          V&   V P                   V,          V,          P                  4        KÚ  	  R# )zs
For each route section we use rid as a key, this allows us to isolate
this route from others on subsequent calls.
rA   NrB   )r=   rF   Úridr   rG   rH   s   &&&&& r   Úupdate_route_sectionÚCfgParser.update_route_sectionQ   s¶   € ð
 —‘×$Ñ$Ö&ˆAØŽxØŸn™n¨QÕ/Ô/Ø-/�D—N‘N 1Õ% cÑ*Ø—‘˜qÕ! #Õ&×-Ñ-°°°Q°s°e¨nÔ=ä)-Ü—M‘M $§.¡.°Õ"3°CÕ"8Ó9ó*�—‘˜qÕ! #Ñ&ð —‘˜qÕ! #Õ&×+Ñ+Ö-ó 'r   c                ó  € R p\        V P                  4      V n        \        V P                  P                  4       4       FÁ  w  r#V'       g   K  VR8X  d%   \        V4       F  pVRV RV R2,          pK  	  K:  VR9   dN   \        V4       F<  pVRV R2,          p\        W5,          4       F  pW R2,          pK  	  VR,          pK>  	  KŽ  VRV R2,          p\        V4       F  pW R2,          pK  	  VR,          pKÃ  	  V# )Ú r4   Ú[z]
ú

Ú
)r5   r:   )r    r<   r%   r   )r=   ÚcontentsrH   ÚvÚeÚns   &     r   Úget_final_confÚCfgParser.get_final_confa   sû   € Øˆä" 4§>¡>Ó2ˆŒä˜4Ÿ>™>×/Ñ/Ó1Ö2‰DˆAßÙØ�IŒ~Ü ž�AØ ! A 3 c¨!¨¨DÐ 1Õ1’Hó #àÐ4Ô4Ü ž�AØ ! A 3 c 
Õ*�HÜ# A¥Dž\˜Ø  c¨ HÕ,šñ *à Õ$’Hó	 #ð ˜a ˜s #˜JÕ&�Ü ž�AØ # R Õ(’Hñ #à˜DÕ ’ñ! 3ð$ ˆr   r;   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r>   rI   rM   rX   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r-   r-   9   s   ø‡ € ò
ò )ò.÷ ð r   r-   c                   ó8  a € ] tR t^{t o RtR"R ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltR#R ltR$V 3R lR lltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR  ltR!tV tR# )%ÚRendererzª
Renders network information in /etc/systemd/network

This Renderer is currently experimental and doesn't support all the
use cases supported by the other renderers yet.
Nc                óv   € V'       g   / pVP                  R R4      V n        VP                  RR4      V n        R# )Úresolve_conf_fnz/etc/systemd/resolved.confÚnetwork_conf_dirz/etc/systemd/network/N)Úgetre   rf   )r=   Úconfigs   &&r   r>   ÚRenderer.__init__ƒ   s:   € ßØˆFØ%Ÿz™zØÐ;ó 
ˆÔð !'§
¡
ØÐ 7ó!
ˆÖr   c                ó    <€ V ^8„  d   QhRS[ /# ©r   Úcfg©r-   )r   ra   s   "€r   r   ÚRenderer.__annotate__�   s   ø€ ÷ ñ ±ñ r   c                óð   € R pRRRR/pVR,          R8X  d   RVR&   V'       g   R	# VP                  4        F5  w  rVWQ9   g   K  W,          '       g   K  VP                  W6W,          4       K7  	  VR,          # )
r/   ÚnameÚNameÚdriverÚDriverÚtypeÚphysicalÚ
MACAddressÚmac_addressN)r   rI   )r=   Úifacerl   rF   Ú
match_dictrH   rU   s   &&&    r   Úgenerate_match_sectionÚRenderer.generate_match_section�   st   € Øˆà�FØ�hð
ˆ
ð
 ��=˜JÔ&Ø(4ˆJ�}Ñ%çÙà×$Ñ$Ö&‰DˆAØŽz˜eŸhžhØ×"Ñ" 3¨5­8Ö4ñ 'ð �V�}Ðr   c                ó    <€ V ^8„  d   QhRS[ /# rk   rm   )r   ra   s   "€r   r   rn       s   ø€ ÷ ?ñ ?±	ñ ?r   c                óX  € R pV'       g   R# VP                  R4      '       d   VP                  VRVR,          4       VR,          R8w  d2   VP                  R4      '       d   VP                  VRVR,          4       RV9   d'   VR,          '       d   VP                  VR	R
4       R# R# R# )r0   NÚmtuÚMTUBytesrt   ru   rw   rv   ÚoptionalÚRequiredForOnlineÚno)rg   rI   )r=   rx   rl   rF   s   &&& r   Úgenerate_link_sectionÚRenderer.generate_link_section    s�   € ØˆçÙà�9‰9�U×ÒØ×Ñ˜s J°°eµÔ=à��=˜JÔ&¨5¯9©9°]×+CÒ+CØ×Ñ˜s L°%¸Õ2FÔGà˜Ô 5¨×#4Ô#4Ø×Ñ˜sÐ$7¸Ö>ñ $5Ñr   c                ó    <€ V ^8„  d   QhRS[ /# rk   rm   )r   ra   s   "€r   r   rn   ¯   s   ø€ ÷ Dñ D©9ñ Dr   c                óÚ   € RpRRRRRRRR	/pR
pRV9   d   RVR,           2pVP                  4        F5  w  rxWu9  d   K  VR8X  d	   W†,          pVP                  WAWW,          V4       K7  	  R# )za
Parse a route and use rid as a key in order to isolate the route from
others in the route dict.
r5   ÚgatewayÚGatewayÚnetworkÚDestinationÚmetricÚMetricÚtableÚTablerP   ÚprefixÚ/N)r   rM   )	r=   rL   Úconfrl   rF   Úroute_cfg_mapr�   rH   rU   s	   &&&&     r   Úparse_routesÚRenderer.parse_routes¯   s‚   € ð
 ˆà�yØ�}Ø�hØ�Wð	
ˆð ˆØ�tÔØ˜˜h�Ð(Ð)ˆFà—J‘J–L‰DˆAØÔ%ÙØ�IŒ~Ø•�Ø×$Ñ$ S¨}Õ/?ÀÖCó !r   c                ó    <€ V ^8„  d   QhRS[ /# rk   rm   )r   ra   s   "€r   r   rn   È   s   ø€ ÷ ?ñ ?©	ñ ?r   c           	     ó(  € R pRp^ pVP                  R. 4       EF–  pVR,          pVR9   d   VR 8X  d   RpM$VR8X  d   RpMVR8X  d   VR 8X  d   RpM	VR8X  d   RpRV9   d>   VR,          '       d/   VR,           F!  pV P                  R	V 2W‚4       V^,           pK#  	  R
V9   g   K�  VR
,          p	RV9   d   V	RVR,           2,          p	R
RRRRRRR/p
VP                  4        FÆ  w  r¼VR
8X  d   VP                  RW«,          V	4       K'  VR8X  dh   VP	                  RRV 2W«,          V4       \        WÉ4      '       d/   \        P                  RVV	4       VP	                  RRV 2RR4       V^,           pK•  VR9   g   Kž  VP                  WJV,          RP                  V4      4       KÈ  	  EK™  	  VP                  VRV4       \        VP                  R4      \        4      '       d'   R pVR,          '       d   RpVP                  VRV4       V# )r‚   r1   Úsubnetsrt   Úipv4Úipv6ÚyesÚdhcp6ÚroutesÚrÚaddressr�   r�   r4   r‡   rˆ   Údns_nameserversÚDNSÚ
dns_searchÚDomainsr5   ÚazGGateway %s is not contained within subnet %s, adding GatewayOnLink flagÚGatewayOnLinkÚ ÚDHCPz	accept-raÚIPv6AcceptRA>   ÚdhcpÚdhcp4>   r¡   rŸ   )rg   r“   r   rI   rM   r   ÚLOGÚdebugÚjoinr#   Úbool)r=   rx   rl   r¨   rF   rL   rV   ÚtÚiÚaddrÚsubnet_cfg_maprH   rU   rG   s   &&&           r   Úparse_subnetsÚRenderer.parse_subnetsÈ   s  € ØˆØˆØˆØ—‘˜9 b×)ˆAØ�&•	ˆAØÐ%Ô%Ø˜4”<Ø!‘DØ˜V”^Ø �DøØ�g”Ø˜4”<Ø!‘DØ˜V”^Ø �DØ˜1Œ}  8§¤Ø˜8Ÿ˜�Að ×%Ñ%¨¨#¨ i°Ô8Ø �'’Cñ	 %ð
 ˜AŽ~Ø˜•|�Ø˜q”=Ø˜a  (¥˜}Ð-Õ-�Dà˜yØ˜yØ% uØ  )ð	"�ð ŸG™GžI‘D�AØ˜I”~Ø×*Ñ*¨9°nÕ6GÈÖNØ˜iœð ×0Ñ0Ø# q¨¨ Y°Õ0AÀ1ôô :¸!×BÒBÜŸI™Ið!=à !Ø $ô	ð  ×4Ñ4Ø '¨1¨S¨E¨°OÀUôð " A�gšØÐ?Ö?Ø×*Ñ*¨3¸qÕ0AÀ3Ç8Á8ÈAÃ;ÖOô+ &ñ9 *ðf 	×Ñ˜3 ¨Ô-ä�e—i‘i Ó,¬d×3Ò3ØˆCØ�[×!Ô!Ø�Ø×Ñ˜s N°CÔ8àˆr   c                ó    <€ V ^8„  d   QhRS[ /# rk   rm   )r   ra   s   "€r   r   rn   
  s   ø€ ÷ ;ñ ;¡)ñ ;r   c                óJ  € R	 Fl  pW19  d   K  \        W,          4      P                  4       p \        P                  ! V4      pV'       d   RMRpVR 8X  d   RpMRpVP                  VRV4       Kn  	  R#   \         d#    TR8w  d   \
        P                  RT4       Rp LQi ; i)
Údhcp4domainrš   r‚   ÚroutezInvalid dhcp4domain value - %sr2   r3   Ú
UseDomainsN)r¶   Údhcp6domain)r   Úcasefoldr   Útranslate_boolÚ
ValueErrorrª   ÚwarningrI   )r=   Údrl   r*   ÚretÚsections   &&&   r   Údhcp_domainÚRenderer.dhcp_domain
  s™   € Û2ˆDØŒ}ÙÜ�a•g“,×'Ñ'Ó)ˆCðÜ×)Ò)¨#Ó.�ß"‘e¨�ð
 �}Ô$Ø"‘à"�Ø×Ñ˜w¨°cÖ:ó 3øô ô Ø˜'”>Ü—K‘KÐ @À#ÔFØ�Cùðús   ®"A5Á5*B"Â!B"c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   rl   Úns)r-   r   )r   ra   s   "€r   r   rn     s   ø€ ÷ Iñ I¡Ið I±<ñ Ir   c                óÎ  € R pVP                  R4      pV'       g-   VP                  ^8X  d   RVP                  RVP                  /pMV'       g   VP                  ^8X  d   R# VP                  R4      '       d*   VP	                  VRRP                  VR,          4      4       VP                  R4      '       d,   VP	                  VRRP                  VR,          4      4       R# R# )r1   ÚdnsÚsearchÚnameserversNr¢   r¥   r    )rg   ÚversionÚdns_searchdomainsrŸ   rI   r¬   )r=   rx   rl   rÄ   rF   rÆ   s   &&&&  r   Ú	parse_dnsÚRenderer.parse_dns  s³   € Øˆà�i‰i˜Óˆß�r—z‘z Q”à˜"×.Ñ.Ø˜r×1Ñ1ð‰C÷ ˜Ÿ™ qœÙà�7‰7�8×ÒØ×Ñ˜s I¨s¯x©x¸¸H½Ó/FÔGØ�7‰7�=×!Ò!Ø×Ñ˜s E¨3¯8©8°C¸Õ4FÓ+GÖHñ "r   c                ó    <€ V ^8„  d   QhRS[ /# rk   rm   )r   ra   s   "€r   r   rn   -  s   ø€ ÷ Pñ P©	ñ Pr   c                ó(  € R RRRRRRR/pVR8X  d   VP                  R	R
RRRRRRRR/4       RV R2V9   d[   VRRV 239   dM   VRV R2,          pVP                  4        F)  w  rxW†9   g   K  VP                  RV 2WvV,          4       K+  	  R# R# R# )ÚUseDNSzuse-dnsr¸   úuse-domainsÚUseHostnamezuse-hostnameÚUseNTPzuse-ntpÚ4ÚSendHostnamezsend-hostnameÚHostnameÚhostnameÚRouteMetriczroute-metricÚUseMTUzuse-mtuÚ	UseRoutesz
use-routesr¨   ú
-overridesrš   ÚipvÚDHCPvN)Úupdater   rI   )	r=   rl   Údevicer¨   rÉ   Údhcp_config_mapsÚdhcp_overridesrH   rU   s	   &&&&&    r   Úparse_dhcp_overridesÚRenderer.parse_dhcp_overrides-  sÒ   € à�iØ˜-Ø˜>Ø�ið	
Ðð �cŒ>Ø×#Ñ#à" OØ 
Ø! >Ø˜iØ ðôð �'�˜*Ð%¨Ô/°DØØ�'�ˆOð=
ô 5
ð $ d¨7¨)°:Ð$>Õ?ˆNØ(×.Ñ.Ö0‘�ØÖ&Ø×&Ñ&¨¨w¨iÐ'8¸!ÈAÕ=NÖOó 1ñ5
Ñ/r   c                óÚ   € R p\         P                  RV4       V RV V 2pVP                  R4      '       d   VRR p\        P                  ! Wb4       \        P
                  ! WeV4       R# )zsystemd-networkz Setting Networking Config for %sz10-cloud-init-rR   Néÿÿÿÿ)rª   r«   Úendswithr   Ú
write_fileÚchownbyname)r=   Úlinkr‘   Únwk_dirÚextÚnet_fn_ownerÚnet_fns   &&&&&  r   Úcreate_network_fileÚRenderer.create_network_fileI  s`   € Ø(ˆä�	‰	Ð4°dÔ;Ø�9˜N¨4¨&°°Ð6ˆà�=‰=˜× Ò Ø˜˜�9ˆDÜ�Š˜Ô%Ü×Ò˜¨|Ö<r   c                ó:   <€ V ^8„  d   QhRS[ RS[S[,          RR/# )r   Únetwork_stateÚ	templatesr   N)r   r   r$   )r   ra   s   "€r   r   rn   T  s2   ø€ ÷ Gñ Gá#ðGñ ™D•>ðGð
 
ñGr   c                ó†  € V P                   pV'       d   \        P                  ! V4      V,           p\        P                  ! V4       V P                  V4      pVP                  R / 4      pVP                  R/ 4      pVP                  R/ 4      pVP                  4        F  w  ršV P                  WšV4       K  	  VP                  4        F  w  ršV P                  WšVRR7       K  	  VP                  4        F  w  ršV P                  WšVRR7       K  	  VP                  4        F  w  ršV P                  WšVRR7       K  	  R# )Úvlan_netdevÚbond_netdevÚbridge_netdevz.netdev)rê   N)	rf   r
   Útarget_pathr   Ú
ensure_dirÚ_render_contentÚpopr   rí   )r=   rð   rñ   ÚtargetÚnetwork_dirr‰   ró   rô   rõ   rH   rU   s   &&&&       r   Úrender_network_stateÚRenderer.render_network_stateT  s  € ð ×+Ñ+ˆßÜ×*Ò*¨6Ó2°[Õ@ˆKä�Š˜Ô$à×&Ñ& }Ó5ˆØ—k‘k -°Ó4ˆØ—k‘k -°Ó4ˆØŸ™ O°RÓ8ˆà—M‘M–O‰DˆAØ×$Ñ$ Q¨;Ö7ñ $ð  ×%Ñ%Ö'‰DˆAØ×$Ñ$ Q¨;¸IÐ$ÖFñ (ð  ×%Ñ%Ö'‰DˆAØ×$Ñ$ Q¨;¸IÐ$ÖFñ (ð "×'Ñ'Ö)‰DˆAØ×$Ñ$ Q¨;¸IÐ$ÖFó *r   c                ó    <€ V ^8„  d   QhRS[ /# rk   rm   )r   ra   s   "€r   r   rn   q  s   ø€ ÷ ñ ©iñ r   c                ó¦   € ^ pRpV FF  pVP                  4        F&  w  rgVP                  WCVP                  4       V4       K(  	  V^,          pKH  	  R# )r   r:   N)r   rM   Ú
capitalize)r=   Úpolicyrl   rL   r   rG   rH   rU   s   &&&     r   ÚparseRoutingPolicyÚRenderer.parseRoutingPolicyq  sI   € ØˆØ!ˆÛˆCØŸ	™	ž‘�Ø×(Ñ(¨°1·<±<³>À1ÖEñ $à�1�HŠCó r   c                ó    <€ V ^8„  d   QhRS[ /# )r   ÚnsCfg)r   )r   ra   s   "€r   r   rn   y  s   ø€ ÷ 
ñ 
©Dñ 
r   c                ó’   € / pR pR F<  pWA9  d   K  W,          P                  4        F  w  rVW69   g   K  Wc,          W%&   K  	  K>  	  V# )zrouting-policy)Ú	ethernetsÚbondsÚvlansÚbridges)r   )r=   r  ÚroutingPoliciesr   rÀ   rx   Úsettingss   &&     r   ÚextractRoutingPoliciesÚRenderer.extractRoutingPoliciesy  sN   € ØˆØˆãAˆGØÔ#ÙØ#(¥>×#7Ñ#7Ö#9‘�Ø–?Ø-5­]�OÓ*ó $:ñ Bð Ðr   c                ó    <€ V ^8„  d   QhRS[ /# )r   rÄ   r   )r   ra   s   "€r   r   rn   …  s   ø€ ÷ mñ m¡,ñ mr   c                ó6  € / pV P                  V4      pVR ,          pVR,          pWBR &   V P                  V4      pVR,          pVR,          pWrR&   V P                  V4      p	V	R,          p
V	R,          pW¢R&   V P                  VP                  4      pVP                  4        EFñ  p\        4       pVR,          pVP                  V. 4      pV F  pVP                  RRV4       K  	  VP                  V4      pV'       d   V P                  VV4       VP                  V4      pV'       d   VP                  RR	V4       VP                  V4      pV'       dš   VR
,          P                  V/ 4      P                  V4      pV'       d   VP                  RRV4       VR,          P                  V/ 4      P                  V4      pV'       d   VP                  RRV4       VP                  RRV4       V P                  WÞ4      pV P                  WÞ4       V P                  WÞ4      pV P                  WÞV4       ^ pVP                  4        F"  pV P                  RV 2VV4       V^,           pK$  	  VP                   ^8X  dõ   VR,          pVP                  R,          P#                  4        F)  w  ppRV9   g   K  VP                  R4      V8X  g   K'  Tp M	  VVP                  R,          9   d†   VP                  R,          V,          pV P%                  VV4       R FS  pRV R2V9   d2   RVP                  RV R2/ 4      9   d   V RV RV R2p\'        V4      hV P)                  VVVV4       KU  	  VP+                  VVP-                  4       /4       EKô  	  V# )ró   Ú	vlan_linkrô   Ú	bond_linkrõ   Úbridge_linkrp   r1   r7   r8   ú	path-costr9   ÚCostúport-priorityÚPriorityÚcr  zset-namer¨   ÚdomainrÐ   rÚ   z has both dhcpzdomain and dhcpz*-overrides.use-domains configured. Use one)rÓ   Ú6)Úrender_vlansÚrender_bondsÚrender_bridgesr  rh   Úiter_interfacesr-   rg   rI   r  rz   rƒ   r²   rË   Úiter_routesr“   rÉ   r   rÁ   ÚRuntimeErrorrá   rÝ   rX   ) r=   rÄ   Úret_dictÚ	vlan_dictró   r  Ú	bond_dictrô   r  Úbridge_dictrõ   r  r  rx   rl   Ú
iface_nameÚvlan_link_namer¯   ÚrPolicyÚbond_link_nameÚbridge_link_namerG   rè   r¨   rL   r·   rp   Údev_nameÚdev_cfgrÞ   rÉ   Ú	exceptions    &&                              r   rø   ÚRenderer._render_content…  s�  € Øˆà×%Ñ% bÓ)ˆ	Ø Õ.ˆØ˜kÕ*ˆ	Ø"-�Ñà×%Ñ% bÓ)ˆ	Ø Õ.ˆØ˜kÕ*ˆ	Ø"-�Ñà×)Ñ)¨"Ó-ˆØ# OÕ4ˆØ! -Õ0ˆØ$1�Ñ!à×5Ñ5°b·i±iÓ@ˆà×'Ñ'×)ˆEÜ“+ˆCà˜v�ˆJà&Ÿ]™]¨:°rÓ:ˆNÛ#�Ø×"Ñ" 9¨f°aÖ8ñ $ð &×)Ñ)¨*Ó5ˆGßØ×'Ñ'¨°Ô5à&Ÿ]™]¨:Ó6ˆNßØ×"Ñ" 9¨f°nÔEà*Ÿ™¨zÓ:Ðßà Õ,ß‘SÐ)¨2Ó.ß‘S˜“_ð ÷
 Ø×&Ñ& x°¸Ô=ð   Õ0ß‘SÐ)¨2Ó.ß‘S˜“_ð ÷
 Ø×&Ñ& x°¸SÔAà×"Ñ" 9¨hÐ8HÔIà×.Ñ.¨uÓ:ˆDà×&Ñ& uÔ2Ø×%Ñ% eÓ1ˆDØ�N‰N˜5 rÔ*àˆCØŸ™Ö)�ð ×!Ñ! A c U )¨U°CÔ8Ø˜A•g’ñ	 *ð �z‰z˜QŒØ&+¨F¥m�ð *,¯©°;Õ)?×)EÑ)EÖ)GÑ%�H˜gØ! WÖ,Ø"Ÿ;™; zÓ2°dÖ:Ø#+˜DÙ!ñ	 *Hð
 ˜2Ÿ9™9 [Õ1Ô1ØŸY™Y {Õ3°DÕ9�Fð ×$Ñ$ V¨SÔ1Û#-˜à" 7 )¨6Ð2°fÔ<Ø -Ø%Ÿz™z¨D°°	¸Ð*DÀbÓIô!Jð $( &¨°w°ið @,Ø,3¨9ð 57ð!8ð &ô
 #/¨yÓ"9Ð9à×1Ñ1°#°v¸tÀWÖMñ $.ð �O‰O˜T 3×#5Ñ#5Ó#7Ð8×9ño *ðr ˆr   c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r   rÄ   r   ©r   r$   )r   ra   s   "€r   r   rn   ô  s   ø€ ÷ %
ñ %
™|ð %
±ñ %
r   c                óÊ  € \        \        4      p/ p\        P                  ! R 4      pVP	                  V4       EF!  pVR,          pVP                  R4      pVP                  R4      pVe   Vf   \        P                  RV4       KO  W(,          P                  V4       \        4       p	V	P                  RRV4       V	P                  RRR 4       VP                  R4      p
V
'       d   V	P                  RR	V
4       VP                  R
4      p
V
'       d"   V	P                  RRV
P                  4       4       V	P                  RRV4       V	P                  4       W6&   EK$  	  RVRV/# )Úvlanrp   Úvlan_idzvlan-raw-devicez)Skipping VLAN %s - missing 'id' or 'link'r6   rq   ÚKindr~   r   rw   rv   r7   ÚIdró   r  )r   r&   r   Úfilter_by_typer  rg   rª   r½   r'   r-   rI   ÚlowerrX   )r=   rÄ   Úvlan_link_infoÚvlan_ndev_configsÚvlan_filterrx   r%  r3  Úparentrl   rG   s   &&         r   r  ÚRenderer.render_vlansô  sA  € Ü$¤TÓ*ˆØÐä×-Ò-¨fÓ5ˆØ×'Ñ'¨×4ˆEØ˜v�ˆJØ—i‘i 	Ó*ˆGØ—Y‘YÐ0Ó1ˆFàŠ &¢.Ü—‘Ø?Àôñ àÕ"×)Ñ)¨*Ô5ô “+ˆCØ×Ñ˜x¨°Ô<Ø×Ñ˜x¨°Ô8à—)‘)˜EÓ"ˆCßØ×"Ñ" 8¨Z¸Ô=à—)‘)˜MÓ*ˆCßØ×"Ñ" 8¨\¸3¿9¹9»;ÔGà×Ñ˜v t¨WÔ5Ø,/×,>Ñ,>Ó,@ÐÔ)ñ7 5ð< Ð,Ø˜ð
ð 	
r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# r/  r0  )r   ra   s   "€r   r   rn     s   ø€ ÷ L
ñ L
™|ð L
±ñ L
r   c           
     ó¶  € / p/ pR p\         P                  ! R4      p\         P                  ! R4      pVP                  V4       EF‚  pVR,          pVP                  V4       U	u. uF  p	V	R,          V8X  g   K  V	R,          NK  	  p
p	V
'       g   \        P                  RV4       Kd  TP                  V
 Uu/ uF  qwVbK  	  up4       \        4       pVP                  RRV4       VP                  RRR4       XP                  R4      pV'       d   VP                  RR	V4       VP                  R
4      pV'       d"   VP                  RRVP                  4       4       \        \        \        \        \        \        .\        3,          3,          3,          p/ RR\        3bRRR 3bRR\        3bRRR 3bRR\        3bRR\        3bRRR 3bRR\        3bRR \        3bR!R"\        3bR#R$\        3bR%R&R' 3bR(R)\        3bR*R+R, 3bR-R.\        3bR/R0\        3bR1R2\        3bpVP!                  4        F0  w  pw  ppW÷9   g   K  VP                  VVV! W,          4      4       K2  	  R3V9   dE   VR3,          p\#        V\        4      '       d   V.pVP                  VR4R5P%                  V4      4       VP'                  4       W8&   EK…  	  R6VR7V/# u up	i u upi )8r8   Úbondzbond-masterrp   z'Skipping bond %s - missing 'interfaces'r6   rq   r4  r~   r   rw   rv   zbond-ad-selectÚAdSelectzbond-arp-intervalÚARPIntervalSecc                 ó   € V  R 2# ©Úms© ©rU   s   &r   Ú<lambda>Ú'Renderer.render_bonds.<locals>.<lambda>C  s
   € ÀQÀCÀrÁ(r   zbond-arp-validateÚARPValidatezbond-downdelayÚDownDelaySecc                 ó   € V  R 2# rC  rE  rF  s   &r   rG  rH  E  s
   € À¸sÀ"¹Xr   zbond-fail-over-macÚFailOverMACPolicyzbond-lacp-rateÚLACPTransmitRatezbond-miimonÚMIIMonitorSecc                 ó   € V  R 2# rC  rE  rF  s   &r   rG  rH  H  s
   € ¸a¸SÀ¹8r   zbond-min-linksÚMinLinksz	bond-modeÚModezbond-num-grat-arpÚGratuitousARPzbond-primary-reselectÚPrimaryReselectPolicyzbond-updelayÚ
UpDelaySecc                 ó   € V  R 2# rC  rE  rF  s   &r   rG  rH  M  s
   € ¸A¸3¸b¹r   zbond-xmit-hash-policyÚTransmitHashPolicyzbond-all-slaves-activeÚAllSlavesActivec                 ó4   € \        V 4      P                  4       # ©N)r   r7  rF  s   &r   rG  rH  Q  s   € œc !›fŸl™lœnr   zbond-arp-all-targetsÚARPAllTargetszbond-learn-packet-intervalÚLearnPacketIntervalSeczbond-packets-per-slaveÚPacketsPerSlavezarp-ip-targetsÚARPIPTargetsr¥   rô   r  )r   r6  Úfilter_by_attrr  rª   r½   rÝ   r-   rI   rg   r7  r   r   r	   r   Úobjectr   r#   r¬   rX   )r=   rÄ   Úbond_link_infoÚbond_ndev_configsrÀ   Úbond_filterÚslave_filterrx   r%  Úslave_ifaceÚbond_slavesrl   rG   ÚParamMapTypeÚ	param_mapr   ÚoptionÚ	formatterÚtargetss   &&                 r   r  ÚRenderer.render_bonds  sV  € Ø)+ˆØÐØˆä×-Ò-¨fÓ5ˆÜ×.Ò.¨}Ó=ˆØ×'Ñ'¨×4ˆEØ˜v�ˆJð $&×#5Ñ#5°lÔ#Cóá#C�KØ˜}Õ-°Ñ;ô $�˜F×#Ð#Ù#Cð ð ÷
 Ü—‘Ø=¸zôñ à×!Ñ!Á+Ó"NÁ+¸¨*Ò#4Á+Ñ"NÔOô “+ˆCØ×Ñ˜x¨°Ô<Ø×Ñ˜x¨°Ô8à—)‘)˜EÓ"ˆCßØ×"Ñ" 8¨Z¸Ô=à—)‘)˜MÓ*ˆCßØ×"Ñ" 8¨\¸3¿9¹9»;ÔGô  ¤¤U¬3´¼&¸Ä3¸Õ0GÐ+GÕ%HÐ HÕIˆLð'Ø  :¬sÐ"3ð'à#Ð&6Ñ8JÐ%Kð'ð $ m´SÐ%9ð'ð ! >Ñ3EÐ"Fð	'ð
 %Ð':¼CÐ&@ð'ð !Ð#5´sÐ";ð'ð  Ñ1CÐDð'ð ! :¬sÐ"3ð'ð ˜f¤c˜]ð'ð $ o´sÐ%;ð'ð (Ð*AÄ3Ð)Gð'ð  Ñ/AÐ Bð'ð (Ð*>ÄÐ)Dð'ð )Ø%Ù,ð+ð'ð$ '¨¼#Ð(>ð%'ð& -Ð/GÌÐ.Mð''ð( )Ð+<¼cÐ*Bð)'ˆIð. -6¯O©OÖ,=Ñ(�Ñ(�f˜iØ–<Ø×&Ñ& w°¹	À%Å*Ó8MÖNñ ->ð   5Ô(ØÐ 0Õ1�Ü˜g¤s×+Ò+Ø&˜i�GØ×"Ñ" 7¨N¸C¿H¹HÀWÓ<MÔNà,/×,>Ñ,>Ó,@ÐÔ)ñA 5ðF Ð,Ø˜ð
ð 	
ùòAùò #Os   Á$KÁ9KÂ7K
c                ó&   <€ V ^8„  d   QhRS[ RS[/# r/  r0  )r   ra   s   "€r   r   rn   i  s   ø€ ÷ A
ñ A
¡ð A
±$ñ A
r   c                óÞ  € R / R/ R/ /p/ p\         P                  ! R4      pVP                  V4       EF²  pVR,          pVP                  R. 4      pV'       g   \        P                  RV4       K?  V F  pWbV&   K	  	  \        4       p	V	P                  RRV4       V	P                  RR	R4       VP                  R
4      p
V
'       d   V	P                  RRV
4       VP                  R4      p
V
'       d"   V	P                  RRV
P                  4       4       RRRRRRRRRRRR/pVP                  4        FT  w  rÍVP                  V4      p
V
'       g   K   \        V
\        4      '       d   V
'       d   RMRp
V	P                  RWÚ4       KV  	  VP                  R4      p
V
'       d   W¢R,          V&   VP                  R4      p
V
'       d   W¢R,          V&   V	P                  4       W6&   EKµ  	  RVR V/# )!Ú
macaddressr  r  Úbridgerp   Úbridge_portsz)Skipping bridge %s - missing 'interfaces'r6   rq   r4  r~   r   rw   rv   Úbridge_ageingÚAgeingTimeSecÚbridge_bridgeprior  Ú	bridge_fdÚForwardDelaySecÚbridge_helloÚHelloTimeSecÚbridge_maxageÚ	MaxAgeSecÚ
bridge_stpÚSTPrš   r‚   r9   Úbridge_pathcostÚbridge_portpriorõ   r  )r   r6  r  rg   rª   r½   r-   rI   r7  r   r#   r­   rX   )r=   rÄ   Úbridge_link_infoÚbridge_ndev_configsÚbridge_filterrx   r%  rp  Úbridge_portrl   rG   rg  r   Úsysd_keys   &&            r   r  ÚRenderer.render_bridgesi  sæ  € à˜"Ø˜Ø˜Rð,
Ðð !Ðä ×/Ò/°Ó9ˆØ×'Ñ'¨×6ˆEØ˜v�ˆJØ Ÿ9™9 ^°RÓ8ˆLßÜ—‘Ø?Àôñ ó  ,�Ø0: Ó-ñ  ,ô “+ˆCØ×Ñ˜x¨°Ô<Ø×Ñ˜x¨°Ô:à—)‘)˜EÓ"ˆCßØ×"Ñ" 8¨Z¸Ô=à—)‘)˜MÓ*ˆCßØ×"Ñ" 8¨\¸3¿9¹9»;ÔGð   Ø# ZØÐ.Ø Ø Ø˜eðˆIð "+§¡Ö!2‘�Ø—i‘i “n�ß‘3Ü! #¤t×,Ò,ß'*™e°˜Ø×&Ñ& x°Ö?ñ "3ð —)‘)Ð-Ó.ˆCßØ<? Õ-¨jÑ9à—)‘)Ð-Ó.ˆCßØ@C Õ1°*Ñ=à.1×.@Ñ.@Ó.BÐÔ+ñe 7ðj Ð0ØÐ+ð
ð 	
r   )rf   re   rY  )z.network)NN)rZ   r[   r\   r]   Ú__doc__r>   rz   rƒ   r“   r²   rÁ   rË   rá   rí   rü   r  r  rø   r  r  r  r^   r_   r`   s   @r   rc   rc   {   s²   ø‡ € ñô
÷ð ÷&?ð ?÷Dð D÷2?ð ?÷D;ð ;÷$Ið I÷"Pð Pô8	=÷Gò G÷:ð ÷
ð 
÷mð m÷^%
ð %
÷NL
ð L
÷\A
ö A
r   rc   c                 óh   € R R.pRR.pV F#  p\         P                  ! W2R7      '       d   K"   R# 	  R# )ÚipÚ	systemctlz	/usr/sbinz/bin)rÇ   FT)r
   Úwhich)rú   ÚexpectedrÇ   Úps   &   r   Ú	availabler‹  ­  s7   € Ø�kÐ"€HØ˜6Ð"€FÛˆÜ�zŠz˜!×+Õ+Úñ ñ r   rY  )ÚloggingÚcollectionsr   Útypingr   r   r   r   r   r	   Ú	cloudinitr
   r   Úcloudinit.netr   r   Úcloudinit.net.network_stater   Ú	getLoggerrZ   rª   r    r   r-   rc   r‹  rE  r   r   Ú<module>r“     s[   ðó Ý #ß =× =ç  ß BÝ 4à×Ò˜Ó!€õ	õ÷6?ñ ?ôDo
ˆx× Ñ ô o
ödr   