ó 'KXc@s›ddlZddlZddlZddlZddlmZddlmZddlmZddlm Z ddlm Z ej e ƒZ idd„d fd 6d e jifd 6d d„d fd6ZddefddeffZdZdZdZdZeeefZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZd efd!„ƒYZd"efd#„ƒYZdS($iÿÿÿÿN(t ec2_utils(tlog(tsources(t url_helper(tutiltnetwork_configcCs|S(N((tx((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyt&stsetc/network/interfacestmeta_jssmeta.jstauthorized_keyscCs|S(N((R((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyR(ssroot/.ssh/authorized_keysslocal-hostnamethostnames instance-idtuuidtlatests 2012-08-10s 2013-04-04s 2013-10-17t NonReadablecBseZRS((t__name__t __module__(((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyR:stBrokenMetadatacBseZRS((RR(((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyR>st SourceMixincBs5eZd„Zd„Zd„Zd„Zd„ZRS(cCsS|js dS|jjdiƒ}x*|jƒD]\}}||kr/|Sq/WdS(Nsblock-device-mapping(t ec2_metadatatNonetgettitems(tselftnametbdmtent_nametdevice((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyt_ec2_name_to_deviceCs  cCs7d}|jdkrd}ntj|jj|ƒƒS(Nt public_keysis public-keys(tversionRtnormalize_pubkey_datatmetadataR(RR((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pytget_public_ssh_keysLs cCsjd}yId|}|dkr,d|}ntj|ƒ}|rN|d}nWntjk renX|S(NsLABEL=%stswapsTYPE=%si(RRtfind_devs_withtProcessExecutionError(RRRtcriteriat dev_entries((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyt_os_name_to_deviceRs   cCsx|s dS|jdƒs&d|}ntjj|ƒr<|S|jtjj|ƒƒ}|rttjd||ƒ|SdS(Nt/s/dev/%ssRemapped device name %s => %s( Rt startswithtostpathtexistst _remap_devicetbasenametLOGtdebug(RRtremapped((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyt_validate_device_name_s cCs|s dS|g}|dkr2|jddƒn|dkrN|jdƒnd}tjd|ƒx6|D].}|j|ƒ}|j|ƒ}|rkPqkqkW|sïtjd|ƒx9|D].}|j|ƒ}|j|ƒ}|rºPqºqºWn|sùdStjd||ƒ|SdS(Ntrootitamis(Using ec2 style lookup to find device %ss.Using openstack style lookup to find device %ssMapped %s to device %s(RtinserttappendR/R0RR2R'(RRtnamesRtn((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pytdevice_name_to_devicems2      (RRRR!R'R2R9(((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyRBs   t BaseReadercBs€eZejZd„Zejd„ƒZejd„ƒZejd„ƒZ ejd„ƒZ d„Z d„Z dd„ZRS( cCs ||_dS(N(t base_path(RR;((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyt__init__‘scGsdS(N((Rtbasetadd_ons((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyt _path_join”scCsdS(N((RR+((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyt _path_exists˜scCsdS(N((RR+((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyt _path_readœscCsdS(N((R((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyt_read_ec2_metadata scCs|jddƒjdƒ}|jdƒ}g|D]}t|ƒr1|^q1}|shtd|ƒ‚n|j|jd|Œ}|j|ƒS(Nt content_pathRR(s!Item %s has no valid content patht openstack(RtlstriptsplittlenRR?R;RA(RtitemR+t path_piecestpt valid_pieces((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyt_read_content_path¤s%cCs”|gttƒ}xg|D]_}|s,qn|j|jd|ƒ}|j|ƒr||krutjd||ƒn|SqWtjd|tƒtS(NRDsBVersion '%s' not available, attempting to use version '%s' insteads:Version '%s' not available, attempting to use '%s' instead(tlistt OS_VERSIONSR?R;R@R/R0t OS_LATEST(RRtsearch_versionstpotential_versionR+((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyt_find_working_version­s       cs:‡fd†}ˆj|ƒ}idd6dd6}||ƒ}x |jƒD]ü\}\}}}ˆjˆj|ƒ}d}t} ˆj|ƒrÐyˆj|ƒ}Wn!tk rÆt d|ƒ‚nXt } n|rét d|ƒ‚n| r4|r4y||ƒ}Wq4t k r0} t d|| fƒ‚q4Xn| rK|||eZd„Zd„Zd„Zd„Zd„Zd„ZRS(cCstt|ƒj|ƒdS(N(tsuperRwR<(RR;((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyR<1scGs#|gt|ƒ}tjj|ŒS(N(RMR*R+tjoin(RR=R>t components((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyR?4scCstjj|ƒS(N(R*R+R,(RR+((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyR@8scCs tj|ƒS(N(Rt load_file(RR+((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyRA;scCsx|j|jdddƒ}|j|ƒs.iSytj|j|ƒƒSWn)tk rs}td||fƒ‚nXdS(Ntec2R smeta-data.jsonsFailed to process path %s: %s(R?R;R@RRWRAR`R(RR+Rl((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyRB>s cCs+i}xEtjƒD]7}|j|j|ƒ}|j|ƒr|||eZdddd„Zd„Zd„Zd„Zd„ZRS(icCsAtt|ƒj|ƒ||_t|ƒ|_t|ƒ|_dS(N(RxR‹R<t ssl_detailstfloatttimeouttinttretries(Rtbase_urlRŒRŽR((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyR<Žs cCs1tj|d|jd|jd|jƒ}|jS(NRRŒRŽ(RtreadurlRRŒRŽR†(RR+tresponse((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyRA”s     c Cs`d„}y>tj|d|jd|jd|jd|ƒ}|jƒSWntk r[tSXdS(NcSsAy#t|jƒ}|dkr"tSWnttfk r<nXtS(Ni(RtcodeRXRdRcRV(trequesttcauseR”((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pytshould_retry_cbs RRŒRŽt exception_cb(RR’RRŒRŽtokR_RX(RR+R—R“((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyR@›s       cGstj||ŒS(N(Rt combine_url(RR=R>((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyR?±scCs%tjd|jd|jd|jƒS(NRŒRŽR(Rtget_instance_metadataRŒRŽR(R((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyRB´s N(RRRR<RAR@R?RB(((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyR‹s    ( RsRaR€R*t cloudinitRRtloggingRRRt getLoggerRR/RWR~RXRVRfROt OS_FOLSOMt OS_GRIZZLYt OS_HAVANARNR_RRtobjectRR:RwR‹(((sP/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/helpers/openstack.pyts8      L¢]