Current File : //usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyo
�
oB�]c@s�ddlZddlZddlmZddlZddlmZddlmZddlmZddlm	Z	ddlm
Z
ddlmZdd	l
mZdd
lmZeje�Zdejfd��YZdS(
i����N(tStringIO(tdistros(thelpers(tlog(tssh_util(tutil(tnet_util(t
ResolvConf(tPER_INSTANCEtDistrocBs�eZdZdZdZdZdZdZdZd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd)d�Zd�Zd�Zd�Zd�Zed�Zd�Zd�Zed��Zed��Zed��Zed��Zed��Zed��Z d�Z!d�Z"e#d�Z$d�Z%d �Z&e'd!��Z(d"�Z)d)d#�Z*d$�Z+d%�Z,d)d)d&�Z-d'�Z.d(�Z/RS(*s/usr/local/libs/etc/rc.confs/etc/login.confs/etc/login.conf.origs/etc/resolv.confs,/usr/local/etc/sudoers.d/90-cloud-init-usersthn0cCsTtjj||||�tj|�|_d|_tjd�|_	d|d<dS(Ntfreebsds\s+inet\s+\d+[.]\d+[.]\d+[.]\d+tsshdtssh_svcname(
RR	t__init__RtRunnerst_runnertosfamilytretcompiletipv4_pat(tselftnametcfgtpaths((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyR$s
	cCs,tjd|j||�|j�}t}||krctjd|j||�|||<t}n_x\|j�D]N}||krp|||krp|||<tjd|j||�t}qpqpW|r(tjd|j�t�}x%|j	�D]}|j
d|�q�Wtj|j|j
��ndS(NsChecking %s for: %s = %ssAdding key in %s: %s = %ssChanging key in %s: %s = %ss
Writing %ss%s="%s"
(tLOGtdebugt
rc_conf_fnt
loadrcconftFalsetTruetkeystinfoRtitemstwriteRt
write_filetgetvalue(Rtkeytvaluetconftconfig_changedtitemtbuftkeyval((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytupdatercconf/s(
	


	cCstjd�}i}tj|j�j�}x�|D]�}|j|�}|setjd|�q4n|j	d�j
�}|j	d�j
�}|dd
kr�|d}n|ddkr�|dd!}nt|�dkr�tjd	|�q4n|||<q4W|S(Ns^(\w+)\s*=\s*(.*)\s*s#Skipping line from /etc/rc.conf: %siiit"t'i����s*Skipping empty value from /etc/rc.conf: %s(R-R.(R-R.(RRRt	load_fileRt
splitlinestmatchRRtgrouptrstriptlen(RtRE_MATCHR'tlinestlinetmR%tval((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyRJs&

cCs8|j�}y||}Wntk
r3d}nX|S(N(RtKeyErrortNone(RR%R'R9((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt
readrcconfas

cCs%tjd|�|jd�r#|Stjd|�}|jd�}tjddg�\}}g|j�j	�D]$}t
|j��dkrr|^qr}d}xW|D]O}	tjd|	�}
|
r�|
jd�jd�r�q�n|
jd�}Pq�q�Wtj
d||�}tjd	|�|S(
Ns Translating network interface %stlos\d+$itifconfigs-at	NOT_FOUNDs^\w+sUsing network interface %s(RRt
startswithRtsearchR2RtsubptstripR0R4tsplitR1tsub(Rtdevtntindextoutt_errtxtifconfigoutputtbsddevR7R8((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytgetnetifnamems&$
cCs|r
|S|S(N((Rthostnametfqdn((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt_select_hostname�scCs|jdd�}d|fS(Ntfilenamesrc.conf(t_read_hostnameR;(Rtsys_hostname((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt_read_system_hostname�scCs;d}y|jd�}Wntk
r,nX|s7|S|S(NRO(R;R<tIOError(RRRtdefaultRO((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyRS�s
cCs|jd|�dS(NRO(R,(RRORR((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt_write_hostname�scCs3dd|g}tj|�r1tjd|�nPy!tj|�tjd|�Wn,tk
r�}tjtd|�|�nXt|�dkr/x�|D]�}tj	|�s�tjd||�q�ny6tjddd|d	|g�tjd
||�Wq�tk
r'tjtd||�q�Xq�WndS(Ntpws-ns(Skipping creation of existing group '%s'sCreated new group %ssFailed to create group %sisCUnable to add group member '%s' to group '%s'; user does not exist.tusermods-GsAdded user '%s' to group '%s's%Failed to add user '%s' to group '%s'(
Rtis_groupRtwarningRBR t	ExceptiontlogexcR4tis_user(RRtmemberst
group_add_cmdtetmember((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytcreate_group�s*


	

cKs&tj|�r#tjd|�tSddd|g}ddd|g}idd6dd6d	d
6dd6d
d6dd6}idd6dd6dd6}x�|j�D]�\}}||kr�|r�t|tj�r�|j	|||g�q�||kr�|r�|j
||�|j
||�q�q�Wd|ks<d|krY|j
d�|j
d�n<|j
d|�|j
d�|j
d|�|j
d�tjd|�ytj|d|�Wn,tk
r�}	tj
td|�|	�nX|jdd�}
|
dk	r"|j||
dt�ndS( Ns!User %s already exists, skipping.RYtuseradds-ns-dthomedirs-ctgecoss-gt
primary_groups-Gtgroupss-stshells-Etinactives--no-user-groupt
no_user_groups--systemtsystems
--no-log-inittno_log_inittno_create_homes-d/nonexistents-d/usr/home/%ss-msAdding user %st	logstringsFailed to create user %stpasswdthashed(RR_RR RR!t
isinstancetsixtstring_typestextendtappendRBR]R^tgetR;t
set_passwdR(RRtkwargstpw_useradd_cmdtlog_pw_useradd_cmdtpw_useradd_optstpw_useradd_flagsR%R9Rbt
passwd_val((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytadd_user�sN





cCsSy tjdd|ddg�Wn,tk
rN}tjtd|�|�nXdS(NRYRZs-ps01-Jan-1970s"Failed to set pw expiration for %s(RRBR]R^R(RtuserRb((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt
expire_passwd�s
 cCsx|rd}nd}y0tjdd||dgd|dd|�Wn,tk
rs}tjtd	|�|�nXdS(
Ns-Hs-hRYRZt0tdataRpschpasswd for %ssFailed to set password for %s(RRBR]R^R(RR�RqRrthash_optRb((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyRy�s	cCsSy tjdd|ddg�Wn,tk
rN}tjtd|�|�nXdS(NRYRZs-ht-sFailed to lock user %s(RRBR]R^R(RRRb((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytlock_passwds
 cKs�|j||�d|kr=|dr=|j||d�n|jdt�r_|j|�nd|kr�|dtk	r�|j||d�nd|kr�t|d�p�g}tj	||dd�ndS(Ntplain_text_passwdR�tsudotssh_authorized_keystoptions(R�RyRxRR�Rtwrite_sudo_rulestsetRtsetup_user_keysR;(RRRzR((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytcreate_userscCsTddg}tj|dddg�\}}t|�rPtjd||�dS|S(NR>s-ltrcsiisError running %s: %s(RRBR4RR\R;(tcmdtnicsterr((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytget_ifconfig_lists!cCsTd|g}tj|dddg�\}}t|�rPtjd||�dS|S(NR>R�iisError running %s: %s(RRBR4RR\R;(tifnameR�t	if_resultR�((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytget_ifconfig_ifname_out&s!cCsWdddg}tj|dddg�\}}t|�rStjd||�dS|S(NR>s-ltetherR�iisError running %s: %s(RRBR4RR\R;(R�R�R�((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytget_ifconfig_ether/s!cCsbtj|�}xL|j�D]>}|jd�dkrt|j�d�}|rZ|SqqWdS(Nsether i����i(R	R�R0tfindtstrRD(R�R�R)tmac((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytget_interface_mac8scCstj�}|j�S(N(R	R�RD(R�((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytget_devicelistAscCs�g}tj�}xn|D]f}tj|�}xN|j�D]@}|jd�dkr;|jd�dkr;|j|�q;q;WqW|S(Nsinet6 i����tscopeid(R	R�R�R0R�Rw(tipv6R�tnicR�R)((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytget_ipv6Fs
*cCstg}tj�}x[|D]S}tj|�}x;|j�D]-}|GH|jj|�r;|j|�q;q;WqW|S(N(R	R�R�R0RR1Rw(Rtipv4R�R�R�R)((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytget_ipv4Qs
cCs�tj|�}d|}xb|j�D]T}tj||�r&|jd�djd�d}|jd�dkrztSq&q&WdS(Nt^t<it>itUPi����(R	R�R0RR1RDR�R(RR�R�tpatR)tflags((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytis_up\s
 cCs�tj�}i}x?|D]7}i|d6|j|�d6dd6|tj|�<qWt�}|r�t|j�|j��}nx8|j�D]*}|dt	kp�|d|k|d<q�W|S(s4Collect information necessary for rename_interfaces.RtuptdownableN(
R	R�R�R;R�R�R�R�tvaluesR(Rtcheck_downabletnamestbymacRGtnics_with_addressestd((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt_get_current_rename_infoes
2	cCst|�stjd�dS|j�}i}x:|j�D],\}}|j�}||d<|||<q<Wd�}d�}d�}	d�}
g}g}g}
||�}d}d}x;|D]3\}}|j|i�}|jd	�}g}||krq�n|s)|jd
||f�q�n|dr�d}|d
sc|j||||f�q�nt|d<|jd|||ff�|
jd|||ff�n||kr�||}|drd}|d
s�|j||||f�q�q|jd|||ff�nd}x0|dks8||krO|d7}||}q W|jd||||ff�||d	<||�}|dr�|
jd|||ff�q�n|jd|||d	|ff�||d	<||�}||7}q�Wi|d6|	d6|
d6}t|�t|
�dkrat|�rNtjd|�q�tjd|�n�tjd|||
�xk||
D]_\}}}}y|j|�|�Wq�t
k
r�}|jd|||||f�q�Xq�Wt|�r
t
dj|���ndS(Nsno interfaces to renameR�cSstd�|j�D��S(Ncss|]}|d|fVqdS(RN((t.0R�((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pys	<genexpr>�s(tdictR�(R�((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt
update_byname�s	cSs#tjd|d|gdt�dS(NR>Rtcapture(RRBR(tcurtnew((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytrename�scSs tjd|dgdt�dS(NR>tdownR�(RRBR(R((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyR��scSs tjd|dgdt�dS(NR>R�R�(RRBR(R((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyR��ss
cirename%di����Rs<[nic not present] Cannot rename mac=%s to %s, not available.R�s*[busy] Error renaming mac=%s from %s to %sR�R�s2[busy-target] Error renaming mac=%s from %s to %s.iR�is(unable to do any work for renaming of %ss$no work necessary for renaming of %ss$achieving renaming of %s with ops %ss.[unknown] Error performing %s%s for %s, %s: %ss
(R4RRR�R!tcopyRxRwRR;R]tjoin(Rtrenamestcurrent_infot	cur_bymacR�R�R�R�R�R�R�topsterrorstupst
cur_bynamettmpname_fmtttmpitnew_nametcur_nametcur_opstmsgttargetttmp_nametopmaptoptparamsRb((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt_rename_interfacesws�

					








"#
	cCs�g}xr|jdi�D]^}|jd�dkr:qn|jd�}|jd�}|sdqn|j||g�qW|j|�S(Ntconfigttypetphysicaltmac_addressR(RxRwR�(RtnetcfgR�tentR�R((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytapply_network_config_names�scCs�tj�}|dkr)tjd�dS|j�}g}x�|D]�}d|}tj|�}xq|jd�D]`}tj||�rq|jd�djd�d}|j	d�d	kr�|j
|�q�qqqqWqBW|r�|}ntt|��}	tj
}
|
|	kr/|	j|
�|	jd|
�nd}d}x3|	D]+}
tj|
�}|rB|
}|}PqBqBW|r�|r�igd
6dd6}|d
j
idd
6|d6|d6idd
6gd6�|SdSdS(NsFail to get network interfacesR�s
R�iR�itRUNNINGi����R�tversionR�R�RR�tdhcptsubnets(R	R�R;RRRDR�RR1R�Rwtlisttsortedtdefault_primary_nictremovetinsertR�(RR�tpotential_interfacest	connectedR�R�R�R)R�R�tdefault_pri_nicttarget_namet
target_macRR�tnconf((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytgenerate_fallback_config�sH


 		


c
Csctj|�}g}g}|j�}x!|j�D]\}}|jd�rUq4n|j|�}tjd|�|jd�dkr-tj	d||jd�|jd��|jd�d|jd�}	|j
d	|jd
��d|kr
|j|d�nd|kr3|j|d�q3nd
}	|j
d||	�q4Wy&tt
j|j��}
|
j�Wn=tk
r�t
jtd|j�td�}
|
j�nXxF|D]>}y|
j|�Wq�tk
r�t
jtd|�q�Xq�WxF|D]>}y|
j|�Wqtk
r>t
jtd|�qXqWt
j|jt|
�d�|S(NR=sConfiguring interface %st	bootprototstaticsConfiguring dev %s with %s / %staddresstnetmasks	 netmask t
defaultroutertgatewaysdns-nameserverss
dns-searchtDHCPt	ifconfig_s&Failed to parse %s, use new empty filetsFailed to add nameserver %ssFailed to add search domain %si�(Rttranslate_networkRR!R@RNRR RxRR,RvRRR/tresolv_conf_fntparseRVR^tadd_nameservert
ValueErrortadd_search_domainR#R�(
Rtsettingstentriestnameserverst
searchdomainst	dev_namestdeviceR RFR>t
resolvconftservertdomain((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt_write_networksR





cCs$t�}xMtj|j�j�D]3}|jtjdd||��|jd�q"Wtj|j|j	�tj
|j|j��y*tj
d|�tjd|jg�Wnktjk
rtjtd|�ytj|j	|j�Wq tk
rtjtd|j�q XnXdS(Ns	^default:sdefault:lang=%s:s
sRunning cap_mkdb for %stcap_mkdbsFailed to apply locale %ssFailed to restore %s backup(RRR/t
login_conf_fnR0R"RRER�tlogin_conf_fn_bakR#R$RRRBtProcessExecutionErrorR^RV(Rtlocaletout_fntnewconfR7((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytapply_localeMs"	
cCs�|jd�rdS|j|�}dd|g}tjd||�tj|dddg�\}}t|�r�tjd||�ndS(	NR=s/etc/rc.d/netiftstarts4Attempting to bring up interface %s using command %sR�iisError running %s: %s(R@RNRRRRBR4R\(Rtdevice_nameRFR�t_outR�((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt_bring_up_interfacegs	
!cCs!|j�|jdd|�dS(Ntinstalltpkgs(tupdate_package_sourcestpackage_command(Rtpkglist((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytinstall_packagests
cCs�|dkrg}ntjj�}d|d<dg}|r\t|t�r\|j|�n%|r�t|t�r�|j|�n|r�|j|�nt	j
d|�}|j|�t	j|d|dt�dS(NtYEStASSUME_ALWAYS_YEStpkgs%s-%stenvR�(
R;tostenvironR�RsR�RwR�RvRtexpand_package_listRBR(RtcommandtargsRRbR�R((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyRxs	
	
cCs#tjd|d|j|��dS(Nttzttz_file(Rtset_etc_timezonet
_find_tz_file(RR((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pytset_timezone�scCs&|jjd|jdgdt�dS(Nsupdate-sourcestupdatetfreq(RtrunRR(R((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyR�sN(0t__name__t
__module__tusr_lib_execRRRR�t
ci_sudoers_fnR�RR,RR<RNRQRUR;RSRXRdR�R�RRyR�R�tstaticmethodR�R�R�R�R�R�R�R�RR�R�R�tclassmethodR�RR	R
RRR!R(((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyR	sR							
			5	
										e	(	=	
		(RRtRRt	cloudinitRRRtloggingRRtcloudinit.distrosRt%cloudinit.distros.parsers.resolv_confRtcloudinit.settingsRt	getLoggerR%RR	(((s=/usr/lib/python2.7/site-packages/cloudinit/distros/freebsd.pyt<module>s