
    x[hZ                         d dl Z d dlZd dlZd dlmZmZ d dlmc mc 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 j(                  e      Z G d dej.                        Zy)    N)ListOptional)distroshelpersnetsubputil)PackageList	bsd_utils)BSDNetworkingc                       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Zdeddf fdZd Zd&dZd Zd Zd&dZd ZdefdZ d Z!d'dZ"d Z#d&dZ$de%de&fd Z'e(d!        Z)e(d"edee   fd#       Z*e(d$ede+fd%       Z, xZ-S )(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                     t         |   |||       t        j                  |      | _        d|d<   d|d<   t        j                         j                         | _        t        j                  | _        d| _        y )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__s       7/usr/lib/python3/dist-packages/cloudinit/distros/bsd.pyr   zBSD.__init__"   sf    sE* u-#M!+ )//1!++    ci_pkl_versionreturnc                 2    t         |   |       d| _        y )NF)r   	_unpickler)   )r*   r1   r.   s     r/   r4   zBSD._unpickle.   s    .) r0   c                 T    | j                  | j                        }| j                  |fS N)_read_hostnamehostname_conf_fn)r*   sys_hostnames     r/   _read_system_hostnamezBSD._read_system_hostname4   s)    **4+@+@A%%|44r0   c                 ,    t        j                  d      S )Nhostname)r   get_rc_config_value)r*   filenamedefaults      r/   r7   zBSD._read_hostname8   s    ,,Z88r0   c                     t        d      )Nz&Return list cmd to add member to groupNotImplementedError)r*   member_name
group_names      r/   _get_add_member_to_group_cmdz BSD._get_add_member_to_group_cmd;   s    !"JKKr0   c                 4    t        j                  d|d       y )Nr<   r   )fn)r   set_rc_config_value)r*   r<   r>   s      r/   _write_hostnamezBSD._write_hostname>   s    %%j(~Nr0   c                 h   t        j                  |      rt        j                  d|       n<| j                  |gz   }	 t        j
                  |       t        j                  d|       |sg }|D ]l  }t        j                  |      st        j                  d||       0	 t        j
                  | j                  ||             t        j                  d||       n y # t        $ r t        j                  t        d|       Y w xY w# t        $ r t        j                  t        d||       Y w xY w)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_userrE   )r*   r+   membersgroup_add_cmdmembers        r/   create_groupzBSD.create_groupA   s
   ==KKBDI 55>MD		-(/6 G 	F<<'-	 		$;;FDIJ8&$G	  DC!<dCD"  @&$s#   +C  <D	$DD	%D10D1c                     g dd}t        j                         j                         D ]!  \  }}|d   j                  d||ddigd       # |S )N   )configversionrX   physicaltypedhcp)r[   r+   mac_addresssubnets)r   get_interfaces_by_macitemsappend)r*   nconfmacr+   s       r/   generate_fallback_configzBSD.generate_fallback_config_   sc    !,224::< 	IC(O""& #&!' 01		 r0   pkglistc                 J    | j                          | j                  d|       y )Ninstall)pkgs)update_package_sourcespackage_command)r*   re   s     r/   install_packageszBSD.install_packagesl   s!    ##%YW5r0   c                     t        d      )z?Return environment vars used in *BSD package_command operationsz(BSD subclasses return a dict of env varsrA   )r*   s    r/   _get_pkg_cmd_environzBSD._get_pkg_cmd_environp   s    !"LMMr0   c                    |g }|dk(  r| j                   }nR|dk(  r| j                  }n@|dk(  r| j                  sy | j                  }n!|dk(  r| j                  sy | j                  }ng }|r"t	        |t
              r|j                  |       n#|r!t	        |t              r|j                  |       t        j                  d|      }|j                  |       t        j                  || j                         d       y )Nrg   removeupdateupgradez%s-%sF)
update_envcapture)r   r   r   r   
isinstancestrra   listextendr	   expand_package_listr   rm   )r*   commandargsrh   cmdre   s         r/   rj   zBSD.package_commandt   s    <Di--C ,,C --,,C	!..--CCJtS)JJtjt,JJt**7D9

7 			#$";";"=uMr0   c                 P    t        j                  || j                  |             y )N)tztz_file)r   set_etc_timezone_find_tz_file)r*   r}   s     r/   set_timezonezBSD.set_timezone   s      B0B0B20FGr0   c                 .    t         j                  d       y )NzCannot set the locale.)rL   debug)r*   localeout_fns      r/   apply_localezBSD.apply_locale   s    		*+r0   plist_inhashedc                 @    |D ]  \  }}| j                  |||        y )N)r   )
set_passwd)r*   r   r   r+   passwords        r/   chpasswdzBSD.chpasswd   s'    & 	;ND(OOD(6O:	;r0   c                 ~    t        j                   dddt        |       g      \  }}t        |j                               S )zC
        Return the parent pid of a process by checking ps
        psz-oppid=r   )r   ru   intstrip)pidppid_s      r/   get_proc_ppidzBSD.get_proc_ppid   s4    
 ))T9dCH=>a4::<  r0   blockdevc                      y r6    )r   s    r/   get_mapped_devicezBSD.get_mapped_device   s    r0   devpathc                     t        j                  |       }|r'd| }t        j                  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ms       r/   device_part_infozBSD.device_part_info   sd     %%g.D6NE		BEA x<00 7yBCCr0   r6   )NN).__name__
__module____qualname__r   networking_clsr8   
rc_conf_fn	shadow_fndefault_ownershutdown_options_mapr   r   ru   __annotations__r   r   r   r   r   r&   r'   r(   r   r   r4   r:   r7   rE   rI   rU   rd   r
   rk   rm   rj   r   r   rv   boolr   staticmethodr   r   tupler   __classcell__)r.   s   @r/   r   r      s\   "N%J$I M %)ddK ')$s)((*DI*')49)158DI.526HT#Y/6""G
  59LO<6 6NN<H,; ;t ; ! ! C HSM   D# D% D Dr0   r   )loggingr"   r   typingr   r   cloudinit.net.netops.bsd_netopsr   netopsr&   	cloudinitr   r   r   r	   cloudinit.distrosr
   r   cloudinit.distros.networkingr   	getLoggerr   rL   Distror   r   r0   r/   <module>r      sI      	 ! 4 4 7 7 4 6g!iD'.. iDr0   