
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
\meT                 @   s   d dl Z d dlZd dlmZmZ d dljjj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 jeZG dd de
jZdS )    N)ListOptional)distroshelpersnetsubputil)PackageList	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 	g Ze
e g Ze
e dZee
e  dZee
e  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ed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 )(BSDz/etc/rc.confz
root:wheelz-Hz-pz-r)ZhaltZpoweroffZrebootNc                sF   t  j||| tj|| _d|d< d|d< tj j | _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__ /usr/lib/python3.6/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   member_nameZ
group_namer   r   r   _get_add_member_to_group_cmd2   s    z BSD._get_add_member_to_group_cmdc             C   s   t jd|dd d S )Nr   z/etc/rc.conf)fn)r
   Zset_rc_config_value)r   r   r   r   r   r   _write_hostname5   s    zBSD._write_hostnamec             C   s   t j|rtjd| nJ| j|g }ytj| tjd| W n" tk
r`   t jtd| Y nX |sjg }xp|D ]h}t j	|stjd|| qpy$tj| j
|| tjd|| W qp tk
r   t jtd|| Y qpX qpW 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   Zis_groupLOGZwarninggroup_add_cmd_prefixr   info	ExceptionZlogexcZis_userr#   )r   r   membersZgroup_add_cmdmemberr   r   r   create_group8   s.    



zBSD.create_groupc             C   sF   g dd}x6t j j D ]&\}}|d jd||ddigd qW |S )N   )configversionr.   ZphysicaltypeZdhcp)r0   r   Zmac_addressZsubnets)r   Zget_interfaces_by_macitemsappend)r   ZnconfZmacr   r   r   r   generate_fallback_configV   s    
zBSD.generate_fallback_config)pkglistc             C   s   | j   | jd|d d S )Ninstall)pkgs)Zupdate_package_sourcespackage_command)r   r4   r   r   r   install_packagesc   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_environg   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|j| n|rt|tr|j| t	j
d|}|j| tj|| j dd d S )Nr5   removeupdateZupgradez%s-%sF)envZcapture)pkg_cmd_install_prefixpkg_cmd_remove_prefixpkg_cmd_update_prefixpkg_cmd_upgrade_prefix
isinstancestrr2   listextendr   Zexpand_package_listr   r9   )r   Zcommandargsr6   cmdr4   r   r   r   r7   k   s*    

zBSD.package_commandc             C   s   t j|| 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 j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&   x |D ]\}}| j |||d qW 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   r=   r>   r?   r   r@   r   r   r   r   r   r   r#   r%   r,   r3   r	   r8   r9   r7   rH   rJ   rC   boolrM   __classcell__r   r   )r   r   r      s0   




r   )Zloggingr   Ztypingr   r   Zcloudinit.net.netops.bsd_netopsr   Znetopsr   Z	cloudinitr   r   r   r   Zcloudinit.distrosr	   r
   Zcloudinit.distros.networkingr   Z	getLoggerrN   r&   ZDistror   r   r   r   r   <module>   s   
