509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
\¼me»!  ã               @   s€   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	„ d	ejƒZdS )
é    N)ÚOptional)ÚnetÚsubpÚutil)Ú	bsd_utils)Ú
ResolvConf)Úrenderer)ÚNetworkStatec               @   s’   e Zd ZdZdZdZdZdd„ Zdd„ Zdd	d
„Z	dd„ Z
dd„ Zdd„ Zd eee ddœdd„Zdd„ Zd!dd„Zd"dd„Zdd„ Zdd„ ZdS )#ÚBSDRendererzetc/resolv.confzetc/rc.confÚ c             C   s"   t j| j| jƒ}tj||d� d S )N)Úfn)r   Útarget_pathÚtargetÚ
rc_conf_fnr   Úget_rc_config_value)ÚselfÚkeyr   © r   ú/usr/lib/python3.6/bsd.pyr      s    zBSDRenderer.get_rc_config_valuec             C   s$   t j| j| jƒ}tj|||d� d S )N)r   )r   r   r   r   r   Úset_rc_config_value)r   r   Úvaluer   r   r   r   r      s    zBSDRenderer.set_rc_config_valueNc             C   s,   |si }d | _ i | _i | _|jddƒ| _d S )NZpostcmdsT)r   Úinterface_configurationsÚinterface_configurations_ipv6ÚgetÚ	_postcmds)r   Úconfigr   r   r   Ú__init__   s    zBSDRenderer.__init__c             C   s  t jƒ }�xü|jƒ D �]î}|jdƒ}|jdƒ}|r@tjd|ƒr@q||krVtjd|ƒ nd|r²|r²|| }||krºtjd||ƒ y| j||ƒ W qº t	k
r®   tj
dƒ |}Y qºX n|| }tjd|ƒ �x:|jdg ƒD �](}|jd	ƒd
k�rZ|jdƒ�stjd|jdƒƒ qÖtjd||jdƒ|jdƒƒ |jdƒ|jdƒ|jdƒ�pL|jdƒdœ| j|< qÖ|jd	ƒdk�rØ|jdƒ�sŠtjd|jdƒƒ qÖtjd||jdƒ|jdƒƒ |jdƒ|jdƒ|jdƒ�pÊ|jdƒdœ| j|< qÖ|jd	ƒdk�sö|jd	ƒdkrÖd| j|< qÖW qW d S )NÚnameZ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#   ZdhcpZdhcp4ÚDHCP)r   Zget_interfaces_by_macÚiter_interfacesr   ÚreÚmatchÚLOGÚinfoÚrename_interfaceÚNotImplementedErrorÚerrorÚdebugr   r   )r   ÚsettingsZifname_by_macÚ	interfaceÚdevice_nameZ
device_macÚcur_nameÚsubnetr   r   r   Ú_ifconfig_entries&   sn    

""zBSDRenderer._ifconfig_entriesc       
      C   s2  t |jƒ ƒ}xÀ|jƒ D ]´}|jdg ƒ}x¢|D ]š}|jdƒdkrr|jdƒ}|r¶t|jdƒƒdkr¶|jdd|dœƒ nD|jdƒd	kr,|jdƒ}|r¶t|jd
ƒƒdkr¶|jdd|dœƒ nq,||jdg ƒ7 }q,W qW x^|D ]V}|jdƒ}|sòtjdƒ qÔ|jdƒ�r|jdƒn|jdƒ}	|jdƒ}| j	||	|ƒ qÔW d S )Nr   r   r    ÚgatewayÚ.é   z0.0.0.0)Únetworkr!   r6   r$   ú:é   z::Ú0)r9   r%   r6   Úroutesr9   zSkipping a bad route entryr!   r%   )
ÚlistZiter_routesr'   r   ÚlenÚsplitÚappendr*   r/   Ú	set_route)
r   r0   r=   r1   r   r4   r6   Zrouter9   r!   r   r   r   Ú_route_entriesr   s:    







zBSDRenderer._route_entriesc       	      C   sv  |j }|j}xR|jƒ D ]F}x@|jdg ƒD ]0}d|krB|j|d ƒ d|kr(|j|d ƒ q(W qW y&ttjtj	| j
| jƒƒƒ}|jƒ  W n> tk
rÄ   tjtdtj	| j
| jƒƒ tdƒ}|jƒ  Y nX xDt|ƒD ]8}y|j|ƒ W qÐ tk
�r   tjtd|ƒ Y qÐX qÐW xFt|ƒD ]:}y|j|ƒ W n$ tk
�rL   tjtd|ƒ Y nX �qW tjtj	| j
| jƒt|ƒdƒ d S )	Nr   Údns_nameserversZ
dns_searchz&Failed to parse %s, use new empty filer   zFailed to add nameserver %szFailed to add search domain %si¤  )rD   Zdns_searchdomainsr'   r   Úextendr   r   Z	load_filer   r   r   Úresolv_conf_fnÚparseÚIOErrorZlogexcr*   ÚsetZadd_nameserverÚ
ValueErrorZadd_search_domainZ
write_fileÚstr)	r   r0   ZnameserversZsearchdomainsr1   r4   Z
resolvconfZserverZdomainr   r   r   Ú_resolve_confœ   sD    zBSDRenderer._resolve_conf)Únetwork_stateÚ	templatesÚreturnc             C   sH   |r
|| _ | j|d� | j|d� | j|d� | jƒ  | j| jd� d S )N)r0   )Úrun)r   r5   rC   rL   Úwrite_configÚstart_servicesr   )r   rM   rN   r   r   r   r   Úrender_network_stateÊ   s    z BSDRenderer.render_network_statec             C   s   | j j}dd„ |ƒ D ƒS )Nc             S   s   g | ]\}}|d kr|‘qS )r&   r   )Ú.0ÚkÚvr   r   r   ú
<listcomp>Û   s    z/BSDRenderer.dhcp_interfaces.<locals>.<listcomp>)r   Úitems)r   Zicr   r   r   Údhcp_interfacesÙ   s    zBSDRenderer.dhcp_interfacesFc             C   s
   t ƒ ‚d S )N)r-   )r   rP   r   r   r   rR   Ý   s    zBSDRenderer.start_servicesc             C   s
   t ƒ ‚d S )N)r-   )r   r   r   r   r   rQ   à   s    zBSDRenderer.write_configc             C   s
   t ƒ ‚d S )N)r-   )r   r3   r2   r   r   r   r,   ã   s    zBSDRenderer.rename_interfacec             C   s
   t ƒ ‚d S )N)r-   )r   r9   r!   r6   r   r   r   rB   æ   s    zBSDRenderer.set_route)N)NN)F)N)Ú__name__Ú
__module__Ú__qualname__rF   r   Zinterface_routesZroute_namesr   r   r   r5   rC   rL   r	   r   ÚdictrS   rY   rR   rQ   r,   rB   r   r   r   r   r
      s$   
L*1 



r
   )Zloggingr(   Ztypingr   Z	cloudinitr   r   r   Zcloudinit.distrosr   Z%cloudinit.distros.parsers.resolv_confr   Zcloudinit.netr   Zcloudinit.net.network_stater	   Z	getLoggerrZ   r*   ZRendererr
   r   r   r   r   Ú<module>   s   
