
    f>                         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                   4    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& 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_hostname/   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_cmd2   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_hostname5   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_group8   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_configV   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_packagesc   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_environg   s    !"LMMr/   c                    |g }|dk(  r| j                   }nO|dk(  r| j                  }n=|dk(  r| j                  sy | j                  }n|dk(  r| j                  sy | j                  }|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_commandk   s    <Di--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/   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   __classcell__)r-   s   @r.   r   r      s    "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8H,; ;t ; ! !r/   r   )loggingr"   typingr   r   cloudinit.net.netops.bsd_netopsr   netopsr&   	cloudinitr   r   r   r	   cloudinit.distrosr
   r   cloudinit.distros.networkingr   	getLoggerr   rG   Distror    r/   r.   <module>r      sD      ! 4 4 7 7 4 6g!J!'.. J!r/   