
    }fM                         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                   n    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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
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                  | _        y )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__s       7/usr/lib/python3/dist-packages/cloudinit/distros/bsd.pyr   zBSD.__init__!   s_    sE* u-#M!+ )//1!++    c                 T    | j                  | j                        }| j                  |fS N)_read_hostnamehostname_conf_fn)r)   sys_hostnames     r.   _read_system_hostnamezBSD._read_system_hostname,   s)    **4+@+@A%%|44r/   c                 ,    t        j                  d      S )Nhostname)r   get_rc_config_value)r)   filenamedefaults      r.   r2   zBSD._read_hostname0   s    ,,Z88r/   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_cmd3   s    !"JKKr/   c                 4    t        j                  d|d       y )Nr7   r   )fn)r   set_rc_config_value)r)   r7   r9   s      r.   _write_hostnamezBSD._write_hostname6   s    %%j(~Nr/   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_userr@   )r)   r*   membersgroup_add_cmdmembers        r.   create_groupzBSD.create_group9   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versionrS   physicaltypedhcp)rV   r*   mac_addresssubnets)r   get_interfaces_by_macitemsappend)r)   nconfmacr*   s       r.   generate_fallback_configzBSD.generate_fallback_configW   sc    !,224::< 	IC(O""& #&!' 01		 r/   pkglistc                 J    | j                          | j                  d|       y )Ninstall)pkgs)update_package_sourcespackage_command)r)   r`   s     r.   install_packageszBSD.install_packagesd   s!    ##%YW5r/   c                     t        d      )z?Return environment vars used in *BSD package_command operationsz(BSD subclasses return a dict of env varsr<   )r)   s    r.   _get_pkg_cmd_environzBSD._get_pkg_cmd_environh   s    !"LMMr/   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 )Nrb   removeupdateupgradez%s-%sF)
update_envcapture)r   r   r   r   
isinstancestrr\   listextendr	   expand_package_listr   rh   )r)   commandargsrc   cmdr`   s         r.   re   zBSD.package_commandl   s    <Di--C ,,C --,,C	!..--CCJtS)JJtjt,JJt**7D9

7 			#$";";"=uMr/   c                 P    t        j                  || j                  |             y )N)tztz_file)r   set_etc_timezone_find_tz_file)r)   rx   s     r.   set_timezonezBSD.set_timezone   s      B0B0B20FGr/   c                 .    t         j                  d       y )NzCannot set the locale.)rG   debug)r)   localeout_fns      r.   apply_localezBSD.apply_locale   s    		*+r/   plist_inhashedc                 @    |D ]  \  }}| j                  |||        y )N)r   )
set_passwd)r)   r   r   r*   passwords        r.   chpasswdzBSD.chpasswd   s'    & 	;ND(OOD(6O:	;r/   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   rp   intstrip)pidppid_s      r.   get_proc_ppidzBSD.get_proc_ppid   s4    
 ))T9dCH=>a4::<  r/   blockdevreturnc                      y r1    )r   s    r.   get_mapped_devicezBSD.get_mapped_device   s    r/   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Cr/   r1   )NN)+__name__
__module____qualname__r   networking_clsr3   
rc_conf_fndefault_ownershutdown_options_mapr   r   rp   __annotations__r   r   r   r   r   r&   r'   r(   r   r5   r2   r@   rD   rP   r_   r
   rf   rh   re   r|   r   rq   boolr   staticmethodr   r   tupler   __classcell__)r-   s   @r.   r   r      sD   "N%J 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r/   r   )loggingr"   r   typingr   r   cloudinit.net.netops.bsd_netopsr   netopsr&   	cloudinitr   r   r   r	   cloudinit.distrosr
   r   cloudinit.distros.networkingr   	getLoggerr   rG   Distror   r   r/   r.   <module>r      sI      	 ! 4 4 7 7 4 6g!aD'.. aDr/   