ó
    x[hÖ!  ã                   ó²   • S SK r S SKrS SKJr  S SKJrJrJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr  \ R                   " \5      r " S S	\R&                  5      rg)
é    N)ÚOptional)ÚnetÚsubpÚutil)Ú	bsd_utils)Ú
ResolvConf)Úrenderer)ÚNetworkStatec                   óš   • \ rS rSrSrSrSrSrSrS r	S r
SS jrS	 rS
 rS r  SS\S\\   SS4S jjrS rSS jrSS jrS rS rSrg)ÚBSDRendereré   zetc/resolv.confzetc/rc.confÚ c                 ó‚   • [         R                  " U R                  U R                  5      n[        R
                  " XS9  g ©N)Úfn)r   Útarget_pathÚtargetÚ
rc_conf_fnr   Úget_rc_config_value)ÚselfÚkeyr   s      Ú3/usr/lib/python3/dist-packages/cloudinit/net/bsd.pyr   ÚBSDRenderer.get_rc_config_value   s*   € Ü×Ò˜dŸk™k¨4¯?©?Ó;ˆÜ×%Ò% cÓ1ó    c                 ó„   • [         R                  " U R                  U R                  5      n[        R
                  " XUS9  g r   )r   r   r   r   r   Úset_rc_config_value)r   r   Úvaluer   s       r   r   ÚBSDRenderer.set_rc_config_value   s,   € Ü×Ò˜dŸk™k¨4¯?©?Ó;ˆÜ×%Ò% c°RÓ8r   Nc                 ón   • U(       d  0 nS U l         0 U l        0 U l        UR                  SS5      U l        g )NÚpostcmdsT)r   Úinterface_configurationsÚinterface_configurations_ipv6ÚgetÚ	_postcmds)r   Úconfigs     r   Ú__init__ÚBSDRenderer.__init__   s3   € ÞØˆFØˆŒØ(*ˆÔ%Ø-/ˆÔ*ØŸ™ J°Ó5ˆ�r   c           
      óh  • [         R                  " 5       nUR                  5        GHà  nUR                  S5      nUR                  S5      nU(       a  [        R
                  " SU5      (       a  MK  XR;  a  [        R                  SU5        OFU(       a;  U(       a4  X%   nXd:w  a*  [        R                  SUU5         U R                  Xd5        OOX%   n[        R                  SU5        UR                  S/ 5       GH  nUR                  S	5      S
:X  aÍ  UR                  S5      (       d'  [        R                  SUR                  S5      5        MV  [        R                  SUUR                  S5      UR                  S5      5        UR                  S5      UR                  S5      UR                  S5      =(       d    UR                  S5      S.U R                  U'   Mæ  UR                  S	5      S:X  aÏ  UR                  S5      (       d(  [        R                  SUR                  S5      5        GM9  [        R                  SUUR                  S5      UR                  S5      5        UR                  S5      UR                  S5      UR                  S5      =(       d    UR                  S5      S.U R                  U'   GMÊ  UR                  S	5      S:X  d  UR                  S	5      S:X  d  GM÷  SU R                  U'   GM	     GMã     g ! [         a    [        R                  S5        Un GN]f = f)NÚnameÚmac_addressz^lo\d+$z"Cannot find any device with MAC %sz,netif service will rename interface %s to %sz.Interface renaming is not supported on this OSzConfiguring interface %sÚsubnetsÚtypeÚstaticÚnetmaskz+Skipping IP %s, because there is no netmaskÚaddresszConfiguring dev %s with %s / %sÚmtu)r/   r.   r0   Ústatic6Úprefixz*Skipping IP %s, because there is no prefix)r/   r2   r0   ÚdhcpÚdhcp4ÚDHCP)r   Úget_interfaces_by_macÚiter_interfacesr#   ÚreÚmatchÚLOGÚinfoÚrename_interfaceÚNotImplementedErrorÚerrorÚdebugr!   r"   )r   ÚsettingsÚifname_by_macÚ	interfaceÚdevice_nameÚ
device_macÚcur_nameÚsubnets           r   Ú_ifconfig_entriesÚBSDRenderer._ifconfig_entries'   s˜  € Ü×1Ò1Ó3ˆØ!×1Ñ1×3ˆIØ#Ÿ-™-¨Ó/ˆKØ"Ÿ™ }Ó5ˆJÞœrŸxšx¨
°K×@Ñ@ÙØÓ.Ü—‘Ð=¸zÕJÞ¦Ø(Ñ4�ØÓ*Ü—H‘HØFØ Ø#ôð
/Ø×-Ñ-¨hÕDð +ð ,Ñ7�ä�H‰HÐ/°Ô=à#Ÿ-™-¨	°2×6�Ø—:‘:˜fÓ%¨Ó1Ø!Ÿ:™: i×0Ñ0ÜŸ	™	ØIØ"ŸJ™J yÓ1ôñ !Ü—I‘IØ9Ø#ØŸ
™
 9Ó-ØŸ
™
 9Ó-ô	ð $*§:¡:¨iÓ#8Ø#)§:¡:¨iÓ#8Ø%Ÿz™z¨%Ó0×H°I·M±MÀ%Ó4HñB�D×1Ñ1°+Ó>ð —Z‘Z Ó'¨9Ó4Ø!Ÿ:™: h×/Ñ/ÜŸ	™	ØHØ"ŸJ™J yÓ1ôò !Ü—I‘IØ9Ø#ØŸ
™
 9Ó-ØŸ
™
 8Ó,ô	ð $*§:¡:¨iÓ#8Ø"(§*¡*¨XÓ"6Ø%Ÿz™z¨%Ó0×H°I·M±MÀ%Ó4HñG�D×6Ñ6°{ÔCð —J‘J˜vÓ&¨&Ó0Ø—z‘z &Ó)¨WÖ4àAG�D×1Ñ1°+Ô>ôY 7ò9 4øô" /ó /ÜŸ	™	ØLôð '/›ð	/ús   Â<LÌ!L1Ì0L1c                 óp  • [        UR                  5       5      nUR                  5        Hö  nUR                  S/ 5      nU HÛ  nUR                  S5      S:X  aL  UR                  S5      nU(       a3  [	        UR                  S5      5      S:X  a  UR                  SSUS.5        OcUR                  S5      S	:X  aL  UR                  S5      nU(       a3  [	        UR                  S
5      5      S:”  a  UR                  SSUS.5        OMÇ  X%R                  S/ 5      -  nMÝ     Mø     U H�  nUR                  S5      nU(       d  [        R                  S5        M2  UR                  S5      (       a  UR                  S5      OUR                  S5      n	UR                  S5      nU R                  X‰U5        M�     g )Nr+   r,   r-   ÚgatewayÚ.é   z0.0.0.0)Únetworkr.   rJ   r1   Ú:é   z::Ú0)rM   r2   rJ   ÚroutesrM   zSkipping a bad route entryr.   r2   )
ÚlistÚiter_routesr7   r#   ÚlenÚsplitÚappendr:   r?   Ú	set_route)
r   r@   rQ   rB   r+   rF   rJ   ÚrouterM   r.   s
             r   Ú_route_entriesÚBSDRenderer._route_entriess   s{  € Ü�h×*Ñ*Ó,Ó-ˆØ!×1Ñ1Ö3ˆIØ—m‘m I¨rÓ2ˆGÛ!�Ø—:‘:˜fÓ%¨Ó1Ø$Ÿj™j¨Ó3�GÞ¤3 w§}¡}°SÓ'9Ó#:¸aÓ#?ØŸ™à+4Ø+4Ø+2ñôøð —Z‘Z Ó'¨9Ó4Ø$Ÿj™j¨Ó3�GÞ¤3 w§}¡}°SÓ'9Ó#:¸QÓ#>ØŸ™à+/Ø*-Ø+2ñôøñ ØŸ*™* X¨rÓ2Ñ2’ó/ "ñ 4ó6 ˆEØ—i‘i 	Ó*ˆGÞÜ—	‘	Ð6Ô7Ùð —9‘9˜Y×'Ñ'ð —	‘	˜)Ô$à—Y‘Y˜xÓ(ð ð
 —i‘i 	Ó*ˆGØ�N‰N˜7¨WÖ5ò r   c           	      ón  • UR                   nUR                  nUR                  5        HR  nUR                  S/ 5       H9  nSU;   a  UR	                  US   5        SU;   d  M%  UR	                  US   5        M;     MT      [        [        R                  " [        R                  " U R                  U R                  5      5      5      nUR                  5         [!        U5       H  n UR#                  U5        M     [!        U5       H  n UR'                  U5        M     [        R(                  " [        R                  " U R                  U R                  5      [+        U5      S5        g ! [         ac    [        R                  " [        S[        R                  " U R                  U R                  5      5        [        S5      nUR                  5          Nÿf = f! [$         a!    [        R                  " [        SU5         GM"  f = f! [$         a!    [        R                  " [        SU5         GM,  f = f)	Nr+   Údns_nameserversÚ
dns_searchz&Failed to parse %s, use new empty filer   zFailed to add nameserver %szFailed to add search domain %si¤  )r\   Údns_searchdomainsr7   r#   Úextendr   r   Úload_text_filer   r   r   Úresolv_conf_fnÚparseÚIOErrorÚlogexcr:   ÚsetÚadd_nameserverÚ
ValueErrorÚadd_search_domainÚ
write_fileÚstr)	r   r@   ÚnameserversÚsearchdomainsrB   rF   Ú
resolvconfÚserverÚdomains	            r   Ú_resolve_confÚBSDRenderer._resolve_conf�   sØ  € Ø×.Ñ.ˆØ ×2Ñ2ˆØ!×1Ñ1Ö3ˆIØ#Ÿ-™-¨	°2Ö6�Ø$¨Ó.Ø×&Ñ& vÐ.?Ñ'@ÔAØ 6Õ)Ø!×(Ñ(¨°Ñ)=Ö>ó	 7ñ 4ð	Ü#Ü×#Ò#Ü×$Ò$ T§[¡[°$×2EÑ2EÓFóóˆJð
 ×ÑÔô ˜+Ö&ˆFðHØ×)Ñ)¨&Ö1ñ 'ô ˜-Ö(ˆFðKØ×,Ñ,¨VÖ4ñ )ô
 	�ŠÜ×Ò˜TŸ[™[¨$×*=Ñ*=Ó>Ü�
‹OØõ	
øô- ó 	Ü�KŠKÜØ8Ü× Ò  §¡¨d×.AÑ.AÓBôô
 $ B›ˆJØ×ÑÖð	ûô ó HÜ—’œCÐ!>À×GÐGðHûô ó KÜ—’œCÐ!AÀ6×JÐJðKús8   Â AE+ Ã'GÄH	Å+A*GÇGÇ&HÈHÈ	&H4È3H4Únetwork_stateÚ	templatesÚreturnc                 óÊ   • U(       a  X0l         U R                  US9  U R                  US9  U R                  US9  U R	                  5         U R                  U R                  S9  g )N)r@   )Úrun)r   rG   rY   rp   Úwrite_configÚstart_servicesr$   )r   rr   rs   r   s       r   Úrender_network_stateÚ BSDRenderer.render_network_stateË   s`   € ö Ø ŒKØ×Ñ¨ÐÑ6Ø×Ñ ]ÐÑ3Ø×Ñ MÐÑ2à×ÑÔØ×Ñ §¡ÐÒ/r   c                 ó‚   • U R                   R                  nU" 5        VVs/ s H  u  p#US:X  d  M  UPM     snn$ s  snnf )Nr5   )r!   Úitems)r   ÚicÚkÚvs       r   Údhcp_interfacesÚBSDRenderer.dhcp_interfacesÚ   s5   € Ø×*Ñ*×0Ñ0ˆÙ œdÔ2šd‘d�a a¨6¡k—™dÒ2Ð2ùÓ2s   ¡;±;c                 ó   • [        5       e©N©r=   )r   rv   s     r   rx   ÚBSDRenderer.start_servicesÞ   ó   € Ü!Ó#Ð#r   c                 ó   • [        5       erƒ   r„   )r   r   s     r   rw   ÚBSDRenderer.write_configá   r†   r   c                 ó   • [        5       erƒ   r„   )r   rE   rC   s      r   r<   ÚBSDRenderer.rename_interfaceä   r†   r   c                 ó   • [        5       erƒ   r„   )r   rM   r.   rJ   s       r   rW   ÚBSDRenderer.set_routeç   r†   r   )r$   r!   r"   r   rƒ   )NN)F)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ra   r   Úinterface_routesÚroute_namesÚroute6_namesr   r   r&   rG   rY   rp   r
   r   Údictry   r€   rx   rw   r<   rW   Ú__static_attributes__© r   r   r   r      s…   † Ø&€NØ€JØÐØ€KØ€Lò2ò9ô6òJHòX(6òT,
ðb %)Øñ	0à#ð0ð ˜D‘>ð0ð
 
õ0ò3ô$ô$ò$õ$r   r   )Úloggingr8   Útypingr   Ú	cloudinitr   r   r   Úcloudinit.distrosr   Ú%cloudinit.distros.parsers.resolv_confr   Úcloudinit.netr	   Úcloudinit.net.network_stater
   Ú	getLoggerr�   r:   ÚRendererr   r–   r   r   Ú<module>r       sF   ðó Û 	Ý ç %Ñ %Ý 'Ý <Ý "Ý 4à×Ò˜Ó!€ôX$�(×#Ñ#õ X$r   