o
    w7ee                     @   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 d%e!d&e"fd'd(Z#  Z$S )+BSD/etc/rc.confz
root:wheelz-Hz-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                    sF   t  ||| t|| _d|d< d|d< t  | _t	j
| _d S )Nsshdssh_svcnamersyslogdrsyslog_svcname)super__init__r   Runners_runnerplatformsystemlowerosfamily
bsd_netops	BsdNetOpsnet_ops)selfname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%   sys_hostnamer+   r+   r,   _read_system_hostname,   s   
zBSD._read_system_hostnamec                 C   s
   t dS )Nhostname)r
   get_rc_config_value)r%   filenamedefaultr+   r+   r,   r.   0   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_cmd3   s   z BSD._get_add_member_to_group_cmdc                 C   s   t jd|dd d S )Nr2   r   )fn)r
   set_rc_config_value)r%   r2   r4   r+   r+   r,   _write_hostname6   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_group9   s8   


zBSD.create_groupc                 C   sB   g dd}t   D ]\}}|d d||ddigd q|S )N   )configversionrK   physicaltypedhcp)rN   r&   mac_addresssubnets)r   get_interfaces_by_macitemsappend)r%   nconfmacr&   r+   r+   r,   generate_fallback_configW   s   
zBSD.generate_fallback_configc                 C   s   |    | jd|d d S )Ninstall)pkgs)update_package_sourcespackage_command)r%   pkglistr+   r+   r,   install_packagesd   s   zBSD.install_packagesc                 C   r6   )z?Return environment vars used in *BSD package_command operationsz(BSD subclasses return a dict of env varsr7   )r%   r+   r+   r,   _get_pkg_cmd_environh   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r/| js,d S | j}|r<t|tr<|| n|rHt|trH|| t	
d|}|| tj||  dd d S )NrX   removeupdateupgradez%s-%sF)envcapture)r   r   r   r   
isinstancestrrT   listextendr	   expand_package_listr   r^   )r%   commandargsrY   cmdr\   r+   r+   r,   r[   l   s*   

zBSD.package_commandc                 C   s   t j|| |d d S )N)tztz_file)r   set_etc_timezone_find_tz_file)r%   rl   r+   r+   r,   set_timezone   s   zBSD.set_timezonec                 C   s   t d d S )NzCannot set the locale.)r@   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)rv   )
set_passwd)r%   ru   rv   r&   passwordr+   r+   r,   chpasswd   s   zBSD.chpasswdr-   )NN)%__name__
__module____qualname__r   networking_clsr/   
rc_conf_fndefault_ownershutdown_options_mapr   r   re   __annotations__r   r   r   r   r   r"   r#   r$   r   r1   r.   r;   r>   rI   rW   r]   r^   r[   rp   rt   rf   boolry   __classcell__r+   r+   r)   r,   r      s2   
 



r   )r   typingr   r   cloudinit.net.netops.bsd_netopsr   netopsr"   	cloudinitr   r   r   loggingr   r	   cloudinit.distrosr
   cloudinit.distros.networkingr   	getLoggerrz   r@   Distror   r+   r+   r+   r,   <module>   s    
