
"T`                 @   s   d  d l  Z  d  d l m Z d  d l m Z d  d l m Z d  d l 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 Gd d   d e j  Z d S)    N)distros)	bsd_utils)helpers)log)net)subp)util   )BSDNetworkingc                   s  e  Z d  Z e Z d Z d Z d d d d d d i Z g  Z g  Z	 g  Z
 d Z d Z   f d	 d
   Z d d   Z d d d  Z d d   Z d d   Z d d d  Z d d   Z d d   Z d d   Z d d d d  Z d d   Z d d    Z d d! d"  Z d# d$   Z   S)%BSDz/etc/rc.confZhaltz-HZpoweroffz-pZrebootz-rNc                sK   t    j | | |  t j |  |  _ d | d <t j   j   |  _ d  S)NZsshdZssh_svcname)	super__init__r   ZRunnersZ_runnerplatformsystemlowerZosfamily)selfnameZcfgpaths)	__class__ 7/usr/lib/python3/dist-packages/cloudinit/distros/bsd.pyr       s    
zBSD.__init__c             C   s   |  j  |  j  } |  j | f S)N)_read_hostnamehostname_conf_fn)r   Zsys_hostnamer   r   r   _read_system_hostname)   s    zBSD._read_system_hostnamec             C   s   t  j d  S)Nhostname)r   Zget_rc_config_value)r   filenamedefaultr   r   r   r   -   s    zBSD._read_hostnamec             C   s   t  d   d  S)Nz&Return list cmd to add member to group)NotImplementedError)r   Zmember_nameZ
group_namer   r   r   _get_add_member_to_group_cmd0   s    z BSD._get_add_member_to_group_cmdc             C   s   t  j d | d d d  S)Nr   fnz/etc/rc.conf)r   Zset_rc_config_value)r   r   r   r   r   r   _write_hostname3   s    zBSD._write_hostnamec             C   s  t  j |  r" t j d |  nY |  j | g } y! t j |  t j d |  Wn% t k
 rz t  j t d |  Yn X| s g  } x | D] } t  j	 |  s t j d | |  q y0 t j |  j
 | |   t j d | |  Wq t k
 rt  j t d | |  Yq Xq Wd  S)Nz(Skipping creation of existing group '%s'zCreated new group %szFailed to create group %szCUnable to add group member '%s' to group '%s'; user does not exist.zAdded user '%s' to group '%s'z%Failed to add user '%s' to group '%s')r   Zis_groupLOGZwarninggroup_add_cmd_prefixr   info	ExceptionZlogexcZis_userr   )r   r   ZmembersZgroup_add_cmdZmemberr   r   r   create_group6   s*    	
zBSD.create_groupc             C   sk   d g  d d i } xR t  j   j   D]> \ } } | d j d d d | d | d d d	 i g i  q% W| S)
Nconfigversionr	   typeZphysicalr   Zmac_addressZsubnetsZdhcp)r   Zget_interfaces_by_macitemsappend)r   ZnconfZmacr   r   r   r   generate_fallback_configO   s    
 zBSD.generate_fallback_configc             C   s!   |  j    |  j d d | d  S)Ninstallpkgs)Zupdate_package_sourcespackage_command)r   pkglistr   r   r   install_packagesW   s    
zBSD.install_packagesc             C   s   t  d   d S)z?Return environment vars used in *BSD package_command operationsz(BSD subclasses return a dict of env varsN)r   )r   r   r   r   _get_pkg_cmd_environ[   s    zBSD._get_pkg_cmd_environc             C   s  | d  k r g  } | d k r* |  j  } n_ | d k rB |  j } nG | d k rg |  j s[ d  S|  j } n" | d k r |  j s d  S|  j } | r t | t  r | j |  n" | r t | t  r | j |  t	 j
 d |  } | j |  t j | d |  j   d d d  S)	Nr,   removeupdateZupgradez%s-%senvZcaptureF)pkg_cmd_install_prefixpkg_cmd_remove_prefixpkg_cmd_update_prefixpkg_cmd_upgrade_prefix
isinstancestrr*   listextendr   Zexpand_package_listr   r1   )r   Zcommandargsr-   cmdr/   r   r   r   r.   _   s*    			zBSD.package_commandc             C   s   |  j  |  S)N)Z_supported_write_network_config)r   	netconfigr   r   r   _write_network_config{   s    zBSD._write_network_configc             C   s#   t  j d | d |  j |   d  S)NtzZtz_file)r   Zset_etc_timezoneZ_find_tz_file)r   rA   r   r   r   set_timezone~   s    zBSD.set_timezonec             C   s   t  j d  d  S)NzCannot set the locale.)r!   debug)r   ZlocaleZout_fnr   r   r   apply_locale   s    zBSD.apply_localec             C   s   t  j d  d  S)Nz Cannot rename network interface.)r!   rC   )r   r?   r   r   r   apply_network_config_names   s    zBSD.apply_network_config_names)__name__
__module____qualname__r
   Znetworking_clsr   Z
rc_conf_fnZshutdown_options_mapr"   r5   r6   r7   r8   r   r   r   r   r    r%   r+   r0   r1   r.   r@   rB   rD   rE   r   r   )r   r   r      s.   	r   )r   Z	cloudinitr   Zcloudinit.distrosr   r   r   Zloggingr   r   r   Z
networkingr
   Z	getLoggerrF   r!   ZDistror   r   r   r   r   <module>   s   