o
    x[hZ  ã                   @   s˜   d dl Z d dlZ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mZmZmZ d dlmZmZ d dlmZ e  e¡ZG dd„ dejƒZdS )é    N)ÚListÚOptional)ÚdistrosÚhelpersÚnetÚsubpÚutil)ÚPackageListÚ	bsd_utils)ÚBSDNetworkingc                       sf  e Zd ZU eZd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eddf‡ fdd„Zdd„ Zd7dd„Zdd„ Zdd„ Zd7dd„Zdd„ Zd efd!d"„Z d#d$„ Z!d8d%d&„Z"d'd(„ Z#d7d)d*„Z$d+e%d,e&fd-d.„Z'e(d/d0„ ƒZ)e(d1edee fd2d3„ƒZ*e(d4ede+fd5d6„ƒZ,‡  Z-S )9ÚBSDú/etc/rc.confz/etc/master.passwdz
root:wheelz-Hú-pz-r)ÚhaltÚpoweroffÚrebootÚgroup_add_cmd_prefixÚpkg_cmd_install_prefixÚpkg_cmd_remove_prefixNÚpkg_cmd_update_prefixÚpkg_cmd_upgrade_prefixc                    sL   t ƒ  |||¡ t |¡| _d|d< d|d< t ¡  ¡ | _t	j
| _d| _d S )NÚsshdÚssh_svcnameÚrsyslogdÚrsyslog_svcnameF)ÚsuperÚ__init__r   ÚRunnersÚ_runnerÚplatformÚsystemÚlowerÚosfamilyÚ
bsd_netopsÚ	BsdNetOpsÚnet_opsÚis_linux)ÚselfÚnameÚcfgÚpaths©Ú	__class__© ú7/usr/lib/python3/dist-packages/cloudinit/distros/bsd.pyr   "   s   
zBSD.__init__Úci_pkl_versionÚreturnc                    s   t ƒ  |¡ d| _d S )NF)r   Ú	_unpickler&   )r'   r/   r+   r-   r.   r1   .   s   
zBSD._unpicklec                 C   s   |   | j¡}| j|fS ©N)Ú_read_hostnameÚhostname_conf_fn)r'   Úsys_hostnamer-   r-   r.   Ú_read_system_hostname4   s   
zBSD._read_system_hostnamec                 C   s
   t  d¡S )NÚhostname)r
   Úget_rc_config_value)r'   ÚfilenameÚdefaultr-   r-   r.   r3   8   s   
zBSD._read_hostnamec                 C   ó   t dƒ‚)Nz&Return list cmd to add member to group©ÚNotImplementedError)r'   Úmember_nameÚ
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 )Nr7   r   )Úfn)r
   Úset_rc_config_value)r'   r7   r9   r-   r-   r.   Ú_write_hostname>   s   zBSD._write_hostnamec              
   C   sÖ   t  |¡rt d|¡ n$| j|g }zt |¡ t d|¡ W n ty/   t  td|¡ Y nw |s4g }|D ]2}t  	|¡sEt d||¡ q6zt |  
||¡¡ t d||¡ W q6 tyh   t  td||¡ Y q6w d 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   Úis_groupÚLOGÚwarningr   r   ÚinfoÚ	ExceptionÚlogexcÚis_userr@   )r'   r(   ÚmembersÚgroup_add_cmdÚmemberr-   r-   r.   Úcreate_groupA   s8   

ÿ
üÿÿôzBSD.create_groupc                 C   sB   g ddœ}t  ¡  ¡ D ]\}}|d  d||ddigdœ¡ q|S )Né   )ÚconfigÚversionrP   ÚphysicalÚtypeÚdhcp)rS   r(   Úmac_addressÚsubnets)r   Úget_interfaces_by_macÚitemsÚappend)r'   ÚnconfÚmacr(   r-   r-   r.   Úgenerate_fallback_config_   s   
üÿzBSD.generate_fallback_configÚpkglistc                 C   s   |   ¡  | jd|d� d S )NÚinstall)Úpkgs)Úupdate_package_sourcesÚpackage_command)r'   r]   r-   r-   r.   Úinstall_packagesl   s   zBSD.install_packagesc                 C   r;   )z?Return environment vars used in *BSD package_command operationsz(BSD subclasses return a dict of env varsr<   )r'   r-   r-   r.   Ú_get_pkg_cmd_environp   s   zBSD._get_pkg_cmd_environc                 C   sÄ   |d u rg }|dkr| j }n$|dkr| j}n|dkr#| jsd S | j}n|dkr0| js,d S | j}ng }|r?t|tƒr?| |¡ n|rKt|tƒrK| |¡ t	 
d|¡}| |¡ tj||  ¡ dd� d S )Nr^   ÚremoveÚupdateÚupgradez%s-%sF)Ú
update_envÚcapture)r   r   r   r   Ú
isinstanceÚstrrY   ÚlistÚextendr   Úexpand_package_listr   rc   )r'   ÚcommandÚargsr_   Úcmdr]   r-   r-   r.   ra   t   s,   

zBSD.package_commandc                 C   s   t j||  |¡d� d S )N)ÚtzÚtz_file)r   Úset_etc_timezoneÚ_find_tz_file)r'   rq   r-   r-   r.   Úset_timezone’   s   zBSD.set_timezonec                 C   s   t  d¡ d S )NzCannot set the locale.)rE   Údebug)r'   ÚlocaleÚout_fnr-   r-   r.   Úapply_locale•   s   zBSD.apply_localeÚplist_inÚhashedc                 C   s"   |D ]\}}| j |||d� qd S )N)r{   )Ú
set_passwd)r'   rz   r{   r(   Úpasswordr-   r-   r.   Úchpasswd˜   s   ÿzBSD.chpasswdc                 C   s&   t   dddt| ƒg¡\}}t| ¡ ƒS )zC
        Return the parent pid of a process by checking ps
        Úpsz-oppid=r   )r   rj   ÚintÚstrip)ÚpidÚppidÚ_r-   r-   r.   Úget_proc_ppidœ   s   zBSD.get_proc_ppidÚblockdevc                 C   s   d S r2   r-   )r†   r-   r-   r.   Úget_mapped_device¤   s   zBSD.get_mapped_deviceÚdevpathc                 C   sH   t  | ¡}|rd|› �}t d|¡}|r|d |d fS td| › d�ƒ‚)Nz/dev/z/^(?P<dev>/dev/.+)[sp](?P<part_slice>\d+[a-z]*)$ÚdevÚ
part_slicezInvalid value for devpath: 'ú')r   Úfind_freebsd_partÚreÚsearchÚ
ValueError)rˆ   ÚpartÚfpartÚmr-   r-   r.   Údevice_part_info¨   s   

ÿzBSD.device_part_infor2   )NN).Ú__name__Ú
__module__Ú__qualname__r   Únetworking_clsr4   Ú
rc_conf_fnÚ	shadow_fnÚdefault_ownerÚshutdown_options_mapr   r   rj   Ú__annotations__r   r   r   r   r   r#   r$   r%   r   r€   r1   r6   r3   r@   rC   rN   r\   r	   rb   rc   ra   ru   ry   rk   Úboolr~   Ústaticmethodr…   r‡   Útupler“   Ú__classcell__r-   r-   r+   r.   r      sB   
 




r   )Úloggingr   r�   Útypingr   r   Úcloudinit.net.netops.bsd_netopsr   Únetopsr#   Ú	cloudinitr   r   r   r   Úcloudinit.distrosr	   r
   Úcloudinit.distros.networkingr   Ú	getLoggerr”   rE   ÚDistror   r-   r-   r-   r.   Ú<module>   s    
