Current File : //usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyc
�
oB�]c@s_ddlZddlZddlZddlZddlZddlmZddlmZddlm	Z	ddlm
Z
eje�Z
dZdZdgZd	e	jfd
��YZdefd��YZd
efd��YZdefd��YZd�Zd�Zddddd�Zdd�Zd�ZeZee	jffgZ d�Z!dS(i����N(tlog(tnet(tsources(tutilsiid-dsopennebulatnobodys
context.shtDataSourceOpenNebulacBsSeZdZd�Zd�Zd�Zd�Zed��Ze	e	e	d�Z
RS(t
OpenNebulacCsAtjj||||�d|_tjj|jd�|_dS(Nt
opennebula(	Rt
DataSourcet__init__tNonetseedtostpathtjointseed_dir(tselftsys_cfgtdistrotpaths((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyR	&s	cCs)tjj|�}d||j|jfS(Ns%s [seed=%s][dsmode=%s](RRt__str__Rtdsmode(Rtroot((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyR+sc	Cs�itd6}d}d}t}d|jkrC|jjd�}n|jg}|jt��x�|D]�}yXtj	j
|j�r�t|d|�}n*|jd�r�t
j|td|�}nWnOtk
r�qfn<tk
r�}|�n$t
jk
rtjd|�nX|rf|}tjd|�PqfqfW|sDtS|d}t
j||g�}|j|jd	�|jjd
�g�|_|jtjkr�tS||_|jd�|_||_|jd�|_tS(
Nsinstance-idt	parseusertasusers/devtdatas%s was not mountablesfound datasource in %stmetadatatDSMODERsnetwork-interfacestuserdata( tDEFAULT_IIDR
tDEFAULT_PARSEUSERtds_cfgtgetRtextendtfind_candidate_devsRR
tisdirtread_context_disk_dirt
startswithRtmount_cbtNonContextDiskDirtBrokenContextDiskDirtMountFailedErrortLOGtwarningtdebugtFalset
mergemanydictt_determine_dsmodeRRtDSMODE_DISABLEDRtnetworkRtuserdata_rawtTrue(	RtdefaultstresultsRRt
candidatestcdevtexctmd((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyt	_get_data/sL


	
'		cCs2|j|jkrd}nd}d||jfS(s/Return the subplatform metadata source details.sseed-dirsconfig-disks%s (%s)(RR(Rtsubplatform_type((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyt_get_subplatformbs	cCs|jdk	r|jSdSdS(N(R1R
(R((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytnetwork_configjscCsF|dkr0|jtjkr't}q0t}ntjj|||�S(N(R
RRtDSMODE_NETWORKR3R-Rtget_hostname(Rtfqdnt
resolve_ipt
metadata_only((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyR?qs
		(t__name__t
__module__tdsnameR	RR:R<tpropertyR=R-R?(((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyR"s			3	R'cBseZRS((RCRD(((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyR'zsR(cBseZRS((RCRD(((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyR(~stOpenNebulaNetworkcBs�eZdd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zdd�Zd
�ZRS(cCs�||_|dkr!t�}ntjgt|j�dd��D]}|^qC�|_i|_xQ|j�D]C\}}t	j
d|�}|rq|jd�|j|j�<qqqqWdS(NtkeycSstj|d�S(Ni(Rtnatural_sort_key(tk((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyt<lambda>�ss
^(.+)_MAC$i(
tcontextR
tget_physical_nics_by_mactcollectionstOrderedDicttsortedtitemstifacestcontext_devnametretmatchtgrouptlower(RRLtsystem_nics_by_macRJtvtm((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyR	�s	"	cCs<djg|jd�dD]}tt|d��^q�S(Nt.t:ii(Rtsplittstrtint(Rtmactc((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytmac2ip�scCs|j|�jd�ddS(NR[is.0(Rbt
rpartition(RR`((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytmac2network�scCs�i}|j|dd�j�}|j|jjdd�j��|rV||d<n|j|dd�j�}|r�||d<n|S(NtdnsttDNSt	addressest
search_domaintsearch(t	get_fieldR]R!RLR (RtdevtnameserversReRi((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytget_nameservers�s"

cCs|j|d�S(Ntmtu(Rk(RRl((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytget_mtu�scCs|j|d|j|��S(Ntip(RkRb(RRlR`((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytget_ip�scCsZg}|j|d�}|r.|j|�n|j|d�}|rV|j|�n|S(Ntip6tip6_ula(Rktappend(RRlt
addresses6RsRt((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytget_ip6�scCs|j|dd�S(Ntip6_prefix_lengtht64(Rk(RRl((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytget_ip6_prefix�scCs|j|d�S(Ntgateway(Rk(RRl((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytget_gateway�scCs|j|d�S(Ntgateway6(Rk(RRl((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytget_gateway6�scCs|j|dd�S(Ntmasks
255.255.255.0(Rk(RRl((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytget_mask�scCs|j|d|j|��S(NR1(RkRd(RRlR`((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytget_network�scCs;|jjdj||f�j��}|dkr7|S|S(s�return the field name in context for device dev.

        context stores <dev>_<NAME> (example: eth0_DOMAIN).
        an empty string for value will return default.t_RfN(NRf(RLR RtupperR
(RRltnametdefaulttval((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyRk�s'cCs�i}d|d<i|d<i}x�|jj�D]|\}}|j�}|jj||�}i}i|d6|d<g|d<|j|�}ttj|��}|dj	|j
||�d|�|j|�}	|	r|j|�}
|dj
g|	D]}|d|
^q��n|j|�}|r<||d<n|j|�}
|
r^|
|d	<n|j|�}|r�||d
<n|j|�}|r�||d<n|||<q0W||d<|S(Nitversiont	ethernetst
macaddressRURht/tgateway4R}RmRo(RRRQRWRSR R�R^Rtmask_to_net_prefixRuRrRwRzR!R|R~RnRp(RtnetconfR�R`Rltc_devtdevconfRtprefixRvtprefix6tiR{R}RmRo((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytgen_conf�sD




%




N(RCRDR
R	RbRdRnRpRrRwRzR|R~R�R�RkR�(((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyRG�s						
						cCsag}xTdD]L}tj|�}|j�x*|D]"}||kr3|j|�q3q3Wq
W|S(sE
    Return a list of devices that may contain the context disk.
    s
LABEL=CONTEXTsLABEL=CDROMsTYPE=iso9660(s
LABEL=CONTEXTsLABEL=CDROMsTYPE=iso9660(Rtfind_devs_withtsortRu(tcombinedtftdevstd((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyR"s


cCs
dd|gS(Ntsudos-u((tuser((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytswitch_user_cmdscCs!t|t�r|g}n|dkr6ddg}n|dkrKt}ngtjdD]}d|^qY}|}|dkr�|}g}ndjd�}d�}	d	||	|�d
|d	|	|�d}
g}|dk	r�||�}n|j|�tj	|d|
�\}}
d}i}i}d}|dd!}x�|j
d�D]�}yo|j
dd�\}}||kr�|||<n:||kr�||ks�|j|�|kr�|||<nWqTtk
r|dkr��n|dkr|}q||kr|}qqTXqTW|S(Ntbashs-eR�s${!%s*}s
s__v="";RfcSs)djdddj|�dddf�S(Ns
sprintf "%s\0" _start_sfor __v in %s; dot s%   printf "%s=%s\0" "$__v" "${!__v}";tdoneRf(R(tvlist((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyt
varprinter/ss
unset IFS
s{
%s

:
} > /dev/null
Rt
EPOCHREALTIMEtEPOCHSECONDStRANDOMtLINENOtSECONDSt__vii����tt=it_start_(s__v="";Rf(R�R�R�R�R�R�R�(
t
isinstanceR^R
R�tstringt
ascii_lettersRR!RtsubpR]R t
ValueError(tcontenttkeylistR�Rtswitch_user_cbtxtallvarst
keylist_intsetupR�tbcmdtcmdtoutputt_errortexcludedtpresettretttargettlineRHR�((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytparse_shell_configsR	$		.


!
	cCsEi}xBtD]:}tjj||�}tjj|�r
|||<q
q
W|sjtd|df��ni}idd6id6}d|krd|dk	r�ytj|�Wq�t	k
r�t
djd|���q�Xny:tjj|d�}tj
|�}t|d|�}Wqptjk
r>}	t
d	|	��qptk
r`}	td
|	��qpXntd��|sz|S||d<d}
d|kr�d}
nd
|kr�d
}
n|
r|j|
�j�}g|D](}t|�r�|jd�r�|^q�|dd<nx0dD](}
|
|kr||
|dd<PqqWd|kr_|d|d<nd|kr||d|d<nd|kr�|jd|jd��}|dkr�ytj|d�|d<Wq�tk
r�tjd�q�Xq�ng|D]}
tjd|
�r�|
^q�}|rAt|�}|j�|d<n|S(s�
    read_context_disk_dir(source_dir):
    read source_dir and return a tuple with metadata dict and user-data
    string populated.  If not a valid dir, raise a NonContextDiskDir
    s%s: %ssno files foundRRs
context.shs'configured user '{user}' does not existR�RsError processing context.sh: %ssError reading context.sh: %ssMissing context.shtSSH_KEYtSSH_PUBLIC_KEYt#spublic-keystHOSTNAMEt	PUBLIC_IPt	IP_PUBLICtETH0_IPslocal-hostnamet	USER_DATAtUSERDATAtUSERDATA_ENCODINGtUSER_DATA_ENCODINGtbase64s"Failed base64 decoding of userdatas
^ETH\d+_IP.*$snetwork-interfacesN(R�R�R�R�(tCONTEXT_DISK_FILESRR
RtisfileR'R
tpwdtgetpwnamtKeyErrorR(tformatRt	load_fileR�tProcessExecutionErrortIOErrorR t
splitlinestlenR%tb64dt	TypeErrorR*R+RTRURGR�(t
source_dirRtfoundtaftfnRLR5R
R�tetssh_key_vartlinestlRJtencodingtipaddr_keystonet((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyR$qsx

	
		
'
	
+cCsJtj�}tg|j�D]'\}}tj|�r||f^q�S(N(Rtget_interfaces_by_mactdictRQtis_physical(R�RZtn((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyRM�scCstj|t�S(N(Rtlist_from_dependstdatasources(tdepends((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pytget_datasource_list�s("RNRR�RTR�t	cloudinitRtloggingRRRt	getLoggerRCR*RRR�RRt	ExceptionR'R(tobjectRGR"R�R
R�R$RMtDataSourceOpenNebulaNettDEP_FILESYSTEMR�R�(((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenNebula.pyt<module>s2	X�			WY