
    }f!                         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,    dkk4??;%%cb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.    dkk4??;%%c5R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"}5Jrxx
K@.=zJ(4{*HHF #
/--hD ,J7HH/=#--	26 ,H::f%1!::i0		I"JJy1 !II9#

9-

9-	 $*::i#8#)::i#8%zz%0HIMM%4HBD11+> ZZ'94!::h/		H"JJy1 !II9#

9-

8,	 $*::i#8"(**X"6%zz%0HIMM%4HGD66{C JJv&&0zz&)W4AGD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      }|rt	        |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 	3ImmIr2G! 3::f%1$jj3G3w}}S'9#:a#?+4+4+2 ZZ'94$jj3G3w}}S'9#:Q#>+/*-+2 &**Xr22/3	36  	6Eii	*G		67 99Y' 		)$YYx( 
 ii	*GNN7GW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[[$2E2EFJ
  +& 	HFH))&1	H -( 	KFK,,V4	K
 	T[[$*=*=>
O	
-  	KK8  d.A.AB
 $BJ	  HC!>GH  KC!A6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      DK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2daa6k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(6T,
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   