
    ܍~cm                         d dl Z d dlm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dS )    N)Optional)log)netsubputil)	bsd_utils)
ResolvConf)renderer)NetworkStatec                       e 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d ZdS )BSDRendererzetc/resolv.confzetc/rc.confc                 p    t          j        | j        | j                  }t	          j        ||           d S 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   s4    dk4?;;%cb111111    c                 r    t          j        | j        | j                  }t	          j        |||           d S r   )r   r   r   r   r   set_rc_config_value)r   r   valuer   s       r   r   zBSDRenderer.set_rc_config_value   s6    dk4?;;%c5R888888r   Nc                 `    |si }d | _         i | _        |                    dd          | _        d S )NpostcmdsT)r   interface_configurationsget	_postcmds)r   configs     r   __init__zBSDRenderer.__init__   s7     	F(*%J55r   c           
         t          j                    }|                                D ]}|                    d          }|                    d          }|rt	          j        d|          rE||vrt                              d|           n{|rq|ro||         }||k    r`t                              d||           	 |                     ||           n5# t          $ r t          
                    d           |}Y nw xY wn||         }t                              d|           d| j        |<   |                    d	g           D ]}|                    d
          dk    r|                    d          s/t                              d|                    d                     _t                              d||                    d          |                    d                     |                    d          |                    d          |                    d          p|                    d          d| j        |<   d S )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DHCPsubnetstypestaticnetmaskz+Skipping IP %s, because there is no netmaskaddresszConfiguring dev %s with %s / %smtu)r+   r*   r,   )r   get_interfaces_by_maciter_interfacesr   rematchLOGinforename_interfaceNotImplementedErrorerrorr   debug)r   settingsifname_by_mac	interfacedevice_name
device_maccur_namesubnets           r   _ifconfig_entrieszBSDRenderer._ifconfig_entries#   sv   133!1133 1	 1	I#--//K"}55J rx
K@@ ..=zJJJJ 8 8(4{**HHF #  
/--hDDDD. / / /		L   '/	/ + ,J7HH/===9?D)+6#--	266  ::f%%11!::i00 !		I"JJy11   !II9#

9--

9--	   $*::i#8#8#)::i#8#8%zz%00HIMM%4H4HB BD1+>=1	 1	s   <C&C<;C<c                    t          |                                          }|                                D ]}|                    dg           }|D ]}|                    d          dk    r|                    d          }|r?t	          |                    d                    dk    r|                    dd|d           ||                    d	g           z  }|D ]u}|                    d
          }|st                              d           4|                    d          }	|                    d          }| 	                    ||	|           vd S )Nr'   r(   r)   gateway.   z0.0.0.0)networkr*   r@   routesrC   zSkipping a bad route entryr*   )
listiter_routesr.   r   lensplitappendr1   r6   	set_route)
r   r7   rD   r9   r'   r=   r@   routerC   r*   s
             r   _route_entrieszBSDRenderer._route_entriesX   sx   h**,,--!1133 	3 	3ImmIr22G! 3 3::f%%11 **Y// s7==#5#566!;;MM'0'0'.    &**Xr2223  	6 	6Eii	**G 		6777ii	**Gii	**GNN7GW5555	6 	6r   c           	      H   |j         }|j        }|                                D ]Y}|                    dg           D ]@}d|v r|                    |d                    d|v r|                    |d                    AZ	 t          t          j        t          j	        | j
        | j                                      }|                                 nk# t          $ r^ t          j        t          dt          j	        | j
        | j                             t          d          }|                                 Y nw xY wt!          |          D ]C}	 |                    |           # t$          $ r t          j        t          d|           Y @w xY wt!          |          D ]C}	 |                    |           # t$          $ r t          j        t          d|           Y @w xY wt          j        t          j	        | j
        | j                  t+          |          d           d S )	Nr'   dns_nameservers
dns_searchz&Failed to parse %s, use new empty file zFailed to add nameserver %szFailed to add search domain %si  )rN   dns_searchdomainsr.   r   extendr	   r   	load_filer   r   r   resolv_conf_fnparseIOErrorlogexcr1   setadd_nameserver
ValueErroradd_search_domain
write_filestr)	r   r7   nameserverssearchdomainsr9   r=   
resolvconfserverdomains	            r   _resolve_confzBSDRenderer._resolve_confr   sz   . 2!1133 	? 	?I#--	266 ? ?$..&&v.?'@AAA6))!(()=>>>	?	#$T[$2EFF  J
  	 	 	K8 d.ABB  
 $BJ	 +&& 	H 	HFH))&1111 H H HC!>GGGGGH -(( 	K 	KFK,,V4444 K K KC!A6JJJJJKT[$*=>>
OO	
 	
 	
 	
 	
s8   >AC A%D98D9E$$%FF!F77%GGnetwork_state	templatesreturnc                     |r|| _         |                     |           |                     |           |                     |           |                                  |                     | j                   d S )N)r7   )run)r   r>   rL   rc   write_configstart_servicesr    )r   rd   re   r   s       r   render_network_statez BSDRenderer.render_network_state   s      	! DK666]333M222/////r   c                 B    | j         j        }d  |            D             S )Nc                 $    g | ]\  }}|d k    |S )r&    ).0kvs      r   
<listcomp>z/BSDRenderer.dhcp_interfaces.<locals>.<listcomp>   s!    222daa6kkkkkr   )r   items)r   ics     r   dhcp_interfaceszBSDRenderer.dhcp_interfaces   s'    *022bbdd2222r   Fc                     t                      Nr4   )r   rh   s     r   rj   zBSDRenderer.start_services       !###r   c                     t                      rw   rx   )r   r   s     r   ri   zBSDRenderer.write_config   ry   r   c                     t                      rw   rx   )r   r@   s     r   set_gatewayzBSDRenderer.set_gateway   ry   r   c                     t                      rw   rx   )r   r<   r:   s      r   r3   zBSDRenderer.rename_interface   ry   r   c                     t                      rw   rx   )r   rC   r*   r@   s       r   rJ   zBSDRenderer.set_route   ry   r   rw   )NN)F)__name__
__module____qualname__rT   r   r   r   r"   r>   rL   rc   r   r   dictrk   ru   rj   ri   r|   r3   rJ   rn   r   r   r   r      s$       &NJ2 2 29 9 96 6 6 63 3 3j6 6 64,
 ,
 ,
b %)	0 0#0 D>0
 
0 0 0 03 3 3$ $ $ $$ $ $ $$ $ $$ $ $$ $ $ $ $r   r   )r/   typingr   	cloudinitr   loggingr   r   r   cloudinit.distrosr   %cloudinit.distros.parsers.resolv_confr	   cloudinit.netr
   cloudinit.net.network_stater   	getLoggerr   r1   Rendererr   rn   r   r   <module>r      s    
			       $ $ $ $ $ $ % % % % % % % % % % ' ' ' ' ' ' < < < < < < " " " " " " 4 4 4 4 4 4g!!p$ p$ p$ p$ p$(# p$ p$ p$ p$ p$r   