Current File : //lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pyc
�
oB�]c@s:ddlZddlmZmZmZddlmZddlZddlm	Z
ddlmZddl
mZddlmZddlmZdd	lmZeje�Zd
efd��YZdejfd
��YZd�Zd�Zd�Zdd�Zd�Zeej ej!ffgZ"d�Z#dS(i����N(t	inet_ntoatgetaddrinfotgaierror(tpack(t	ec2_utils(tlog(tdhcp(tsources(t
url_helper(tutiltCloudStackPasswordServerClientcBs)eZdZd�Zd�Zd�ZRS(s�
    Implements password fetching from the CloudStack password server.

    http://cloudstack-administration.readthedocs.org/
       en/latest/templates.html#adding-password-management-to-your-templates
    has documentation about the system.  This implementation is following that
    found at
    https://github.com/shankerbalan/cloudstack-scripts/
       blob/master/cloud-set-guest-password-debian
    cCs
||_dS(N(tvirtual_router_address(tselfR((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pyt__init__*sc
CsUtjddddddddd	d
j|�dj|j�g�\}}|j�S(Ntwgets--quiets--triest3s	--timeoutt20s--output-documentt-s--headersDomU_Request: {0}s{0}:8080(R	tsubptformatRtstrip(Rtdomu_requesttoutputt_((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pyt_do_request-s	cCsK|jd�}|dkrdS|dkr:td��n|jd�|S(Ntsend_my_passwordttsaved_passwordtbad_requests-Error when attempting to fetch root password.(RR(RtNonetRuntimeError(Rtpassword((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pytget_password9s
(t__name__t
__module__t__doc__R
RR (((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pyR
s
		tDataSourceCloudStackcBsVeZdZdZdZd�Zd�Zd�Zd�Zd�Z	e
d��ZRS(	t
CloudStackixi2cCs�tjj||||�tjj|jd�|_d|_t�|_	|j	sat
d��nd|j	f|_i|_dS(NtcstlatestsNo virtual router found!s
http://%s/(
Rt
DataSourceR
tostpathtjointseed_dirtapi_vertget_vr_addresstvr_addrRtmetadata_addresstcfg(Rtsys_cfgtdistrotpaths((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pyR
Ks		c	Cs�|j�}|jdkrtStj|jd�g}tj�}tjd|d|jd|jdt	j
�\}}|r�t	jd|�n#t	jd|t
tj�|��t|�S(	Nislatest/meta-data/instance-idturlstmax_waitttimeoutt	status_cbsUsing metadata source: '%s's>Giving up on waiting for the metadata from %s after %s seconds(tget_url_paramstmax_wait_secondstFalsetuhelptcombine_urlR0ttimetwait_for_urlttimeout_secondstLOGtwarningtdebugtcriticaltinttbool(Rt
url_paramsR5t
start_timeturlt	_response((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pytwait_for_metadata_serviceWs		cCs|jS(N(R1(R((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pytget_config_objmscCssi}tj|d|jd�rS|d|_|d|_tjd|j�tSy�|j�sft	St
j
�}tj|j
|j�|_tj|j
|j�|_tjdtt
j
�|��t|j�}y|j�}Wn'tk
rtjtd|j�n/X|r?itd6|d	6it	d
6d6|_ntSWn(tk
rntjtd|j�t	SXdS(
Ntbaset/s	user-datas	meta-datas%Using seeded cloudstack data from: %ss)Crawl of metadata service took %s secondss/Failed to fetch password from virtual router %st
ssh_pwauthRtexpiretchpasswds(Failed fetching from metadata service %s(R	tread_optional_seedR,tuserdata_rawtmetadataRARCtTrueRKR;R>tec2tget_instance_userdataR-R0tget_instance_metadataRER
R/R t	ExceptiontlogexcR1(Rtseed_retRHtpassword_clienttset_password((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pyt	_get_datapsD

	
	

cCs|jdS(Nsinstance-id(RT(R((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pytget_instance_id�scCs|jdS(Nsavailability-zone(RT(R((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pytavailability_zone�s(R!R"tdsnameturl_max_waitturl_timeoutR
RKRLR^R_tpropertyR`(((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pyR$Cs				'	cCsIytdd�}Wntk
r4tjd�dSX|dddSdS(Nsdata-server.iPsDNS Entry data-server not foundii(RRRARCR(taddrinfo((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pytget_data_server�s

cCstjd�j�}xc|D][}|jd�}|ddkrttdt|dd���}tjd|�|SqWdS(	Ns/proc/net/routes	it00000000s<Liis"Found default route, gateway is %s(
R	t	load_filet
splitlinestsplitRRRERARCR(tlinestlinetitemstgw((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pytget_default_gateway�s
"cCsedddg}xO|D]G}tjj|�rttj|��dkrtjd|�|SqWdS(Ns/var/lib/dhclients
/var/lib/dhcps/var/lib/NetworkManagerisUsing %s lease directory(R)R*texiststlentlistdirRARCR(tsupported_dirstd((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pytget_dhclient_d�s	
-cCs�|dkrt�}n|s"dStj|�}d}d}x�|D]�}|jd�r_qDn|jd�pz|jd�s�qDntjj||�}tjj|�}||krD|}|}qDqDW|S(Ni����t	dhclient6s.leases.leases(	RRuR)Rrt
startswithtendswithR*R+tgetmtime(tlease_dtlease_filestlatest_mtimetlatest_filetfnametabs_pathtmtime((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pytget_latest_lease�s$


cCst�}|r#tjd|�|Stjd�}|rLtjd|�|St�}|sotjd�t�St|d��t}xj|D]b}d|kr�|jd�j	d�}t
|�d	kr�|d	}tjd
|�|}q�q�q�WWdQX|stjd�t�S|S(Ns4Found metadata server '%s' via data-server DNS entrytSERVER_ADDRESSs-Found SERVER_ADDRESS '%s' via networkd_leasess*No lease file found, using default gatewaytrsdhcp-server-identifiers ;
t isFound DHCP identifier %ss$No DHCP found, using default gateway(RfRARCRtnetworkd_get_option_from_leasesR�RotopenRRjRq(tlatest_addresst
lease_filetfdRltwordstdhcptok((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pyR.�s4				



cCstj|t�S(N(Rtlist_from_dependstdatasources(tdepends((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pytget_datasource_lists($R)tsocketRRRtstructRR>t	cloudinitRRVRtloggingt
cloudinit.netRRRR<R	t	getLoggerR!RAtobjectR
R(R$RfRoRuRR�R.tDEP_FILESYSTEMtDEP_NETWORKR�R�(((sJ/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceCloudStack.pyt<module>s&%\		
	!	*