U
    L¬÷de  ã                   @   s˜   d dl Z d dlmZmZ d dlm  m  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< ej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 „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                    sF   t ƒ  |||¡ t |¡| _d|d< d|d< t ¡  ¡ | _t	j
| _d S )NZsshdZssh_svcnameZrsyslogdZrsyslog_svcname)ÚsuperÚ__init__r   ZRunnersZ_runnerÚplatformÚsystemÚlowerZosfamilyÚ
bsd_netopsÚ	BsdNetOpsÚnet_ops)Ú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"   0   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_cmd3   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_hostname6   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_group9   s8    


ü   ÿzBSD.create_groupc                 C   sB   g ddœ}t  ¡  ¡ D ]&\}}|d  d||ddigdœ¡ q|S )Né   )ÚconfigÚversionr5   ZphysicalÚtypeZdhcp)r7   r   Zmac_addressZsubnets)r   Zget_interfaces_by_macÚitemsÚappend)r   ZnconfZmacr   r    r    r!   Úgenerate_fallback_configW   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_packagesd   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_environh   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 )Nr;   ÚremoveÚupdateZupgradez%s-%sF)ÚenvZcapture)r   r   r   r   Ú
isinstanceÚstrr9   ÚlistÚextendr	   Zexpand_package_listr   r@   )r   ZcommandÚargsr<   Úcmdr>   r    r    r!   r=   l   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   rJ   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)rO   )Z
set_passwd)r   rN   rO   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   rE   Ú__annotations__r   r   r   r   r   r   r   r   r   r$   r"   r+   r-   r3   r:   r?   r@   r=   rK   rM   rF   ÚboolrP   Ú__classcell__r    r    r   r!   r      s0   




r   )r   Útypingr   r   Zcloudinit.net.netops.bsd_netopsr   Znetopsr   Z	cloudinitr   r   r   Zloggingr   r	   Zcloudinit.distrosr
   Zcloudinit.distros.networkingr   Z	getLoggerrQ   r.   ZDistror   r    r    r    r!   Ú<module>   s   
