Current File : //lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenStack.pyc
�
oB�]c@s[ddlZddlmZddlmZmZddlmZddlmZddlm	Z	ddl
mZddlm
Zeje�Zd	Zd
Zied6ZdZd
ZeegZdZegZdejejfd��YZdefd��YZdddd�Ze d�Z!eej"ffeej"ej#ffgZ$d�Z%dS(i����N(tlog(tEphemeralDHCPv4tNoDHCPLeaseError(tsources(t
url_helper(tutil(t	openstack(tDataSourceOracleshttp://169.254.169.254siid-dsopenstacksinstance-idsOpenStack NovasOpenStack ComputetOpenTelekomCloudtDataSourceOpenStackcBsbeZdZejZeZd�Zd�Z	d�Z
d�Zed��Z
d�Zd�ZRS(t	OpenStackcCshtt|�j|||�d|_tj|j�|_d|_	i|_
tj|_
tj|_dS(N(tsuperR	t__init__tNonetmetadata_addressRtfetch_ssl_detailstpathstssl_detailstversiontfilesRtUNSETtec2_metadatatnetwork_json(tselftsys_cfgtdistroR((sI/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenStack.pyR,s			cCs/tjj|�}d||j|jf}|S(Ns%s [%s,ver=%s](Rt
DataSourcet__str__tdsmodeR(Rtroottmstr((sI/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenStack.pyR5scCs�|jjdtg�}g|D]}tj|�r|^q}t|�t|�kr�tjdtt|�t|���nt	|�r�|}ntj
d�tg}g}i}x7|D]/}tj|d�}|j
|�|||<q�W|j�}tj�}	tjd|d|jd|j�\}
}|
rQtjd||
�n#tjd	|ttj�|	��|j|
�|_t|
�S(
Nt
metadata_urlss,Removed the following from metadata urls: %ss+Empty metadata url list! using default listRturlstmax_waitttimeoutsUsing metadata source: '%s's2Giving up on OpenStack md from %s after %s seconds(tds_cfgtgett
DEF_MD_URLRtis_resolvable_urltsettLOGtdebugtlisttlentwarningRtcombine_urltappendtget_url_paramsttimetwait_for_urltmax_wait_secondsttimeout_secondstintRtbool(RR txtfilteredtmd_urlsturl2baseturltmd_urlt
url_paramst
start_timet	avail_urlt	_response((sI/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenStack.pytwait_for_metadata_service:s4(	 	
	

		cCstj|j��S(N(Rtinstance_id_matches_system_uuidtget_instance_id(RR((sI/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenStack.pytcheck_instance_id[scCs�|jtjkr|jStj|jjdt��rGd|_|jS|j	tjkrjt
jd�dSt
jd�t
j|j	dd�|_|jS(s@Return a network config dict for rendering ENI or netplan files.tapply_network_configs<Unexpected call to network_config when network_json is None.s(network config provided via network_jsont
known_macsN(t_network_configRRRtis_falseR#R$tTrueR
RR(R,R)Rtconvert_net_json(R((sI/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenStack.pytnetwork_config_s	
cCsd|jjd�k}td|�s,tS|jr�y>t|j��)tjdt	j
ddd|j�}WdQXWq�tt
jfk
r�}tjt	t|��tSXn@y|j�}Wn-t
jk
r�}tjt	t|��tSX|j|jd	�g�|_|jt
jkr tS|jd
i�}tj|tg�}||_|jd�|_|jd�|_|jd
�|_|d|_|jj|jdi��|jd�}||_yt
j|�|_Wn,t k
r}t	j!d|�d|_nXt#S(s
Crawl metadata, parse and persist that data for this instance.

        @return: True when metadata discovered indicates OpenStack datasource.
            False when unable to contact metadata service or when metadata
            format is invalid or disabled.
        tOracletdatasource_listt
accept_oracletlogfunctmsgsCrawl of metadata servicetfuncNRtmetadatasec2-metadatatnetworkdatatuserdataRRt
vendordatas"Invalid content in vendor-data: %s($RR$tdetect_openstacktFalsetperform_dhcp_setupRtfallback_interfaceRtlog_timeR(R)t_crawl_metadataRRtInvalidMetaDataExceptiontlogexctstrt_determine_dsmodeRtDSMODE_DISABLEDt
mergemanydicttDEFAULT_METADATARQRRtuserdata_rawRRtupdatetvendordata_puretconvert_vendordatatvendordata_rawt
ValueErrorR,R
RH(Rtoracle_consideredtresultstetmdtvd((sI/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenStack.pyt	_get_datavsH			
	
c
Cs y"|j�s!tjd��nWn4tk
rX}tjdjdt|����nX|j�}yLtjt	j
dtd|jgdi|j
d6|jd6|jd	6�}Wnhtjk
r�}tjt|���n>tjtfk
rd
jd|j�}tj|��nX|S(s�Crawl metadata service when available.

        @returns: Dictionary with all metadata discovered for this datasource.
        @raise: InvalidMetaDataException on unreadable or broken
            metadata.
        s No active metadata service founds,IOError contacting metadata service: {error}terrors#Crawl of openstack metadata servicetargstkwargsRtretriesR"sBroken metadata address {addr}taddr(R@RR[tIOErrortformatR]R/RRYR(R)tread_metadata_serviceRRtnum_retriesR3RtNonReadabletBrokenMetadata(RRjR<tresultRO((sI/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenStack.pyRZ�s.		

	(t__name__t
__module__tdsnameRRRFRVRWRRR@RCtpropertyRJRmRZ(((sI/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenStack.pyR	#s					!		1tDataSourceOpenStackLocalcBseZdZeZRS(suRun in init-local using a dhcp discovery prior to metadata crawl.

    In init-local, no network is available. This subclass sets up minimal
    networking with dhclient on a viable nic so that it can talk to the
    metadata service. If the metadata service provides network configuration
    then render the network configuration for that instance based on metadata.
    (RzR{t__doc__RHRW(((sI/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenStack.pyR~�sicCs+tj|d|d|d|�}|j�S(NRR"Rq(RtMetadataReadertread_v2(tbase_urlRR"Rqtreader((sI/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenStack.pyRu�scCs�tj�stStjd�}|tkr/tStjd�tkrHtS|r^tj�r^tStjd�j	d�t
kr�tStS(s<Return True when a potential OpenStack platform is detected.ssystem-product-nameschassis-asset-tagitproduct_name(Rtis_x86RHt
read_dmi_datatVALID_DMI_PRODUCT_NAMEStVALID_DMI_ASSET_TAGStoraclet_is_platform_viabletget_proc_envR$tDMI_PRODUCT_NOVARV(RMR�((sI/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenStack.pyRU�scCstj|t�S(N(Rtlist_from_dependstdatasources(tdepends((sI/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenStack.pytget_datasource_list�s(&R0t	cloudinitRtloggingtcloudinit.net.dhcpRRRRRtcloudinit.sources.helpersRtcloudinit.sourcesRR�t	getLoggerRzR(R%tDEFAULT_IIDRaR�tDMI_PRODUCT_COMPUTER�tDMI_ASSET_TAG_OPENTELEKOMR�tSourceMixinRR	R~R
RuRVRUtDEP_FILESYSTEMtDEP_NETWORKR�R�(((sI/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceOpenStack.pyt<module>s2
	�