Ë
    x[hÖ!  ã                   ó²   — d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ  e j                   e«      Z G d„ d	ej&                  «      Zy)
é    N)ÚOptional)ÚnetÚsubpÚutil)Ú	bsd_utils)Ú
ResolvConf)Úrenderer)ÚNetworkStatec                   óˆ   — e Zd ZdZdZdZdZdZd„ Zd„ Z	dd„Z
d„ Zd	„ Zd
„ Z	 	 ddedee   ddfd„Zd„ Zdd„Zdd„Zd„ Zd„ Zy)ÚBSDRendererzetc/resolv.confzetc/rc.confÚ c                 ó†   — t        j                  | j                  | j                  «      }t	        j
                  ||¬«       y ©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   zBSDRenderer.get_rc_config_value   s,   € Ü×Ñ˜dŸk™k¨4¯?©?Ó;ˆÜ×%Ñ% c¨bÖ1ó    c                 óˆ   — t        j                  | j                  | j                  «      }t	        j
                  |||¬«       y r   )r   r   r   r   r   Úset_rc_config_value)r   r   Úvaluer   s       r   r   zBSDRenderer.set_rc_config_value   s.   € Ü×Ñ˜dŸk™k¨4¯?©?Ó;ˆÜ×%Ñ% c¨5°RÖ8r   Nc                 ód   — |si }d | _         i | _        i | _        |j                  dd«      | _        y )NÚpostcmdsT)r   Úinterface_configurationsÚinterface_configurations_ipv6ÚgetÚ	_postcmds)r   Úconfigs     r   Ú__init__zBSDRenderer.__init__   s3   € ÙØˆFØˆŒØ(*ˆÔ%Ø-/ˆÔ*ØŸ™ J°Ó5ˆ�r   c           
      óø  — t        j                  «       }|j                  «       D �]«  }|j                  d«      }|j                  d«      }|rt	        j
                  d|«      rŒ?||vrt        j                  d|«       n>|r7|r5||   }||k7  r0t        j                  d||«       	 | j                  ||«       n||   }t        j                  d|«       |j                  dg «      D �]è  }|j                  d	«      d
k(  rÁ|j                  d«      s&t        j                  d|j                  d«      «       ŒOt        j                  d||j                  d«      |j                  d«      «       |j                  d«      |j                  d«      |j                  d«      xs |j                  d«      dœ| j                  |<   ŒÙ|j                  d	«      dk(  rÃ|j                  d«      s't        j                  d|j                  d«      «       �Œ%t        j                  d||j                  d«      |j                  d«      «       |j                  d«      |j                  d«      |j                  d«      xs |j                  d«      dœ| j                  |<   �Œ°|j                  d	«      dk(  s|j                  d	«      dk(  s�ŒÚd| j                  |<   �Œë �Œ® y # t        $ r t        j                  d«       |}Y �Œ;w xY w)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*   r,   Ústatic6Úprefixz*Skipping IP %s, because there is no prefix)r+   r.   r,   Ú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_entrieszBSDRenderer._ifconfig_entries'   s¤  € Ü×1Ñ1Ó3ˆØ!×1Ñ1Ó3ó H	HˆIØ#Ÿ-™-¨Ó/ˆKØ"Ÿ™ }Ó5ˆJÙœrŸx™x¨
°KÔ@ØØ Ñ.Ü—‘Ð=¸zÕJÙ¡Ø(¨Ñ4�Ø˜{Ò*Ü—H‘HØFØ Ø#ôð
/Ø×-Ñ-¨h¸ÕDð ,¨JÑ7�ä�H‰HÐ/°Ô=à#Ÿ-™-¨	°2Ó6ó ,H�Ø—:‘:˜fÓ%¨Ò1Ø!Ÿ:™: iÔ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,Hñ9H	Høô" /ò /ÜŸ	™	ØLôð '/›ð	/ús   Â%KË K9Ë8K9c                 ó4  — t        |j                  «       «      }|j                  «       D ]å  }|j                  dg «      }|D ]Ì  }|j                  d«      dk(  rF|j                  d«      }|rŽt	        |j                  d«      «      dk(  rq|j                  dd|dœ«       n[|j                  d«      d	k(  rF|j                  d«      }|r4t	        |j                  d
«      «      dkD  r|j                  dd|dœ«       nŒ¸||j                  dg «      z  }ŒÎ Œç |D ]‚  }|j                  d«      }|st        j                  d«       Œ,|j                  d«      r|j                  d«      n|j                  d«      }	|j                  d«      }| j                  ||	|«       Œ„ y )Nr'   r(   r)   Úgatewayú.é   z0.0.0.0)Únetworkr*   rE   r-   ú:é   z::Ú0)rH   r.   rE   ÚroutesrH   zSkipping a bad route entryr*   r.   )
ÚlistÚiter_routesr3   r    ÚlenÚsplitÚappendr6   r;   Ú	set_route)
r   r<   rL   r>   r'   rB   rE   ÚrouterH   r*   s
             r   Ú_route_entrieszBSDRenderer._route_entriess   s‰  € Ü�h×*Ñ*Ó,Ó-ˆØ!×1Ñ1Ó3ò 	3ˆIØ—m‘m I¨rÓ2ˆGØ!ò 3�Ø—:‘:˜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‘ñ/3ð	3ð6 ò 	6ˆEØ—i‘i 	Ó*ˆGÙÜ—	‘	Ð6Ô7Øð —9‘9˜YÔ'ð —	‘	˜)Ô$à—Y‘Y˜xÓ(ð ð
 —i‘i 	Ó*ˆGØ�N‰N˜7 G¨WÕ5ñ	6r   c           	      ó:  — |j                   }|j                  }|j                  «       D ]J  }|j                  dg «      D ]3  }d|v r|j	                  |d   «       d|v sŒ |j	                  |d   «       Œ5 ŒL 	 t        t        j                  t        j                  | j                  | j                  «      «      «      }|j                  «        t!        |«      D ]  }	 |j#                  |«       Œ t!        |«      D ]  }	 |j'                  |«       Œ t        j(                  t        j                  | j                  | j                  «      t+        |«      d«       y # t        $ ra t        j                  t        dt        j                  | j                  | j                  «      «       t        d«      }|j                  «        Y Œöw xY w# t$        $ r t        j                  t        d|«       Y �Œw xY w# t$        $ r t        j                  t        d|«       Y �Œw xY w)	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¤  )rV   Údns_searchdomainsr3   r    Úextendr   r   Úload_text_filer   r   r   Úresolv_conf_fnÚparseÚIOErrorÚlogexcr6   ÚsetÚadd_nameserverÚ
ValueErrorÚadd_search_domainÚ
write_fileÚstr)	r   r<   ÚnameserversÚsearchdomainsr>   rB   Ú
resolvconfÚserverÚdomains	            r   Ú_resolve_confzBSDRenderer._resolve_conf�   sê  € Ø×.Ñ.ˆØ ×2Ñ2ˆØ!×1Ñ1Ó3ò 	?ˆIØ#Ÿ-™-¨	°2Ó6ò ?�Ø$¨Ñ.Ø×&Ñ& vÐ.?Ñ'@ÔAØ 6Ò)Ø!×(Ñ(¨°Ñ)=Õ>ñ	?ð	?ð	Ü#Ü×#Ñ#Ü×$Ñ$ T§[¡[°$×2EÑ2EÓFóóˆJð
 ×ÑÔô ˜+Ó&ò 	HˆFðHØ×)Ñ)¨&Õ1ð	Hô ˜-Ó(ò 	KˆFðKØ×,Ñ,¨VÕ4ð	Kô
 	�‰Ü×Ñ˜TŸ[™[¨$×*=Ñ*=Ó>Ü�
‹OØõ	
øô- ò 	Ü�K‰KÜØ8Ü× Ñ  §¡¨d×.AÑ.AÓBôô
 $ B›ˆJØ×ÑÖð	ûô ò HÜ—‘œCÐ!>À×GðHûô ò KÜ—‘œCÐ!AÀ6×JðKús8   Á7AE ÃGÃ>G2ÅA'GÇGÇ$G/Ç.G/Ç2$HÈHÚnetwork_stateÚ	templatesÚreturnc                 óÚ   — |r|| _         | j                  |¬«       | j                  |¬«       | j                  |¬«       | j	                  «        | j                  | j                  ¬«       y )N)r<   )Úrun)r   rC   rT   rj   Úwrite_configÚstart_servicesr!   )r   rk   rl   r   s       r   Úrender_network_statez BSDRenderer.render_network_stateË   sb   € ñ Ø ˆDŒKØ×Ñ¨ÐÔ6Ø×Ñ ]ÐÔ3Ø×Ñ MÐÔ2à×ÑÔØ×Ñ §¡ÐÕ/r   c                 óz   — | j                   j                  } |«       D ��cg c]  \  }}|dk(  sŒ|‘Œ c}}S c c}}w )Nr1   )r   Úitems)r   ÚicÚkÚvs       r   Údhcp_interfaceszBSDRenderer.dhcp_interfacesÚ   s3   € Ø×*Ñ*×0Ñ0ˆÙ ›d×2‘d�a˜ a¨6£k’Ó2Ð2ùÓ2s   ¡7¯7c                 ó   — t        «       ‚©N©r9   )r   ro   s     r   rq   zBSDRenderer.start_servicesÞ   ó   € Ü!Ó#Ð#r   c                 ó   — t        «       ‚rz   r{   )r   r   s     r   rp   zBSDRenderer.write_configá   r|   r   c                 ó   — t        «       ‚rz   r{   )r   rA   r?   s      r   r8   zBSDRenderer.rename_interfaceä   r|   r   c                 ó   — t        «       ‚rz   r{   )r   rH   r*   rE   s       r   rR   zBSDRenderer.set_routeç   r|   r   rz   )NN)F)Ú__name__Ú
__module__Ú__qualname__r[   r   Úinterface_routesÚroute_namesÚroute6_namesr   r   r#   rC   rT   rj   r
   r   Údictrr   rx   rq   rp   r8   rR   © 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   )Úloggingr4   Útypingr   Ú	cloudinitr   r   r   Úcloudinit.distrosr   Ú%cloudinit.distros.parsers.resolv_confr   Úcloudinit.netr	   Úcloudinit.net.network_stater
   Ú	getLoggerr€   r6   ÚRendererr   r‡   r   r   ú<module>r‘      sH   ðó Û 	Ý ç %Ñ %Ý 'Ý <Ý "Ý 4à€g×Ñ˜Ó!€ôX$�(×#Ñ#õ X$r   