U
    ¯Ad¥  ã                   @   s€   d dl Z d dlmZmZ d dlmZ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 e e¡ZG dd	„ d	ejƒZdS )
é    N)ÚListÚOptional)ÚdistrosÚhelpers)Úlog)ÚnetÚsubpÚutil)Ú	bsd_utils)ÚBSDNetworkingc                       s  e Zd ZU eZdZdZdZddddœZg Z	e
e ed< g Ze
e ed< g Ze
e ed	< d
Zee
e  ed< d
Zee
e  ed< ‡ 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 „Zd!d"„ Zd+d#d$„Zeed%œd&d'„Z ‡  Z!S ),ÚBSDú/etc/rc.confz
root:wheelz-Hz-pz-r)ZhaltZpoweroffZrebootÚgroup_add_cmd_prefixÚpkg_cmd_install_prefixÚpkg_cmd_remove_prefixNÚpkg_cmd_update_prefixÚpkg_cmd_upgrade_prefixc                    s6   t ƒ  |||¡ t |¡| _d|d< t ¡  ¡ | _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|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  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   Úmember_nameZ
group_namer   r   r   Ú_get_add_member_to_group_cmd/   s    z BSD._get_add_member_to_group_cmdc                 C   s   t jd|dd d S )Nr"   r   )Úfn)r
   Zset_rc_config_value)r   r"   r#   r   r   r   Ú_write_hostname2   s    zBSD._write_hostnamec              
   C   sÜ   t  |¡rt d|¡ nJ| j|g }zt |¡ t d|¡ W n" tk
r`   t  td|¡ Y nX |sjg }|D ]h}t  	|¡sŒt d||¡ qnz$t |  
||¡¡ t d||¡ W qn tk
rÔ   t  td||¡ Y qnX qnd 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warningr   r   ÚinfoÚ	ExceptionZlogexcZis_userr(   )r   r   ÚmembersZgroup_add_cmdÚmemberr   r   r   Úcreate_group5   s8    


ü   ÿzBSD.create_groupc                 C   sB   g ddœ}t  ¡  ¡ D ]&\}}|d  d||ddigdœ¡ q|S )Né   )ÚconfigÚversionr2   ZphysicalÚtypeZdhcp)r4   r   Zmac_addressZsubnets)r   Zget_interfaces_by_macÚitemsÚappend)r   ZnconfZmacr   r   r   r   Úgenerate_fallback_configS   s    
üÿzBSD.generate_fallback_configc                 C   s   |   ¡  | jd|d d S )NÚinstall)Úpkgs)Zupdate_package_sourcesÚpackage_command)r   Úpkglistr   r   r   Úinstall_packages`   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 varsNr%   )r   r   r   r   Ú_get_pkg_cmd_environd   s    zBSD._get_pkg_cmd_environc                 C   s¾   |d krg }|dkr| j }nB|dkr,| j}n2|dkrF| js>d S | j}n|dkr^| jsXd S | j}|rxt|tƒrx| |¡ n|rt|tƒr| |¡ t	 
d|¡}| |¡ tj||  ¡ dd d S )Nr8   ÚremoveÚupdateZupgradez%s-%sF)ÚenvZcapture)r   r   r   r   Ú
isinstanceÚstrr6   ÚlistÚextendr	   Zexpand_package_listr   r=   )r   ZcommandÚargsr9   Úcmdr;   r   r   r   r:   h   s*    

zBSD.package_commandc                 C   s   t j||  |¡d d S )N)ÚtzZtz_file)r   Zset_etc_timezoneZ_find_tz_file)r   rG   r   r   r   Úset_timezone„   s    zBSD.set_timezonec                 C   s   t  d¡ d S )NzCannot set the locale.)r+   Údebug)r   ZlocaleZout_fnr   r   r   Úapply_locale‡   s    zBSD.apply_locale)Úplist_inÚhashedc                 C   s"   |D ]\}}| j |||d qd S )N)rL   )Z
set_passwd)r   rK   rL   r   Zpasswordr   r   r   ÚchpasswdŠ   s    zBSD.chpasswd)N)N)NN)N)"Ú__name__Ú
__module__Ú__qualname__r   Znetworking_clsr    Z
rc_conf_fnZdefault_ownerZshutdown_options_mapr   r   rB   Ú__annotations__r   r   r   r   r   r   r!   r   r(   r*   r0   r7   r<   r=   r:   rH   rJ   rC   ÚboolrM   Ú__classcell__r   r   r   r   r      s.   
	



r   )r   Útypingr   r   Z	cloudinitr   r   r   Zloggingr   r   r	   Zcloudinit.distrosr
   Zcloudinit.distros.networkingr   Z	getLoggerrN   r+   ZDistror   r   r   r   r   Ú<module>   s   
