ó 'KXc@scddlmZddlZddljZddlZddlZddlZddlm Z ddlm Z ddlm Z ddlm Z e jeƒZdZde jfd „ƒYZd „Zddedd „Zd „Zdd „Zdefd„ƒYZdefd„ƒYZee je jffgZd„Zedkr_d„Z e ƒndS(iÿÿÿÿ(t parsedateN(tlog(tsources(t url_helper(tutils 2012-03-01tDataSourceMAAScBsDeZdZd„Zd„Zd„Zd„Zd„Zd„ZRS(sÕ DataSourceMAAS reads instance information from MAAS. Given a config metadata_url, and oauth tokens, it expects to find files under the root named: instance-id user-data hostname cCsJtjj||||ƒd|_tjj|jdƒ|_d|_ dS(Ntmaas( Rt DataSourcet__init__tNonetbase_urltostpathtjointseed_dirtoauth_clockskew(tselftsys_cfgtdistrotpaths((sM/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/DataSourceMAAS.pyR.s cCs#tjj|ƒ}d||jfS(Ns%s [%s](RRt__str__R (Rtroot((sM/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/DataSourceMAAS.pyR4scCs)|j}y;t|jƒ\}}||_||_|j|_tSWn@tk rWn0tk r†}t j d|j|fƒ‚nX|j ddƒ}|s£t SyZ|j|ƒs¹t S||_t|j|jd|jƒ\}}||_||_tSWn%tk r$tjt d|ƒt SXdS(Ns%s was malformed: %st metadata_urlRs$Failed fetching metadata from url %s(tds_cfgtread_maas_seed_dirRt userdata_rawtmetadataR tTruetMAASSeedDirNonetMAASSeedDirMalformedtLOGtwarntgetR tFalsetwait_for_metadata_servicetread_maas_seed_urlt _md_headersRt ExceptionRtlogexc(RtmcfgtuserdataRtexcturl((sM/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/DataSourceMAAS.pytget_data8s8           c Csž|j}xdD]}||kriSqW|jddƒ}d}|jrgttjƒƒ|j}ntd|d|dd|dd|dd|d|ƒS( Nt token_keyt token_secrett consumer_keytconsumer_secrettR*t timestamp(s token_keys token_secrets consumer_key(RR R Rtintttimet oauth_headers(RR*R'trequiredR/R1((sM/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/DataSourceMAAS.pyR$\s        c CsS|j}d}yt|jd|ƒƒ}Wn$tk rQtjtd|ƒnX|dkrbtSd}y+||kr’t|jd|ƒƒ}nWn"tk r·tjd|ƒnXt j ƒ}d|t f}|g}t j d |d|d|d |j d |jƒ}|r&tjd |ƒn#tjd |tt j ƒ|ƒƒt|ƒS(Nixtmax_waits Failed to get max wait. using %sii2ttimeoutsFailed to get timeout, using %ss%s/%s/meta-data/instance-idturlst exception_cbt headers_cbsUsing metadata source: '%s's(Giving up on md from %s after %i seconds(RR2R R%RR&RR!RR3t MD_VERSIONRt wait_for_urlt _except_cbR$tdebugtcriticaltbool(RR*R'R6R7t starttimet check_urlR8((sM/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/DataSourceMAAS.pyR"rs4          cCsÚt|tjƒo-|jdkp-|jdks4dSd|jkrZtjd|jƒdS|jd}ytjt |ƒƒ}Wn't k r©}tjd||ƒdSXt |tjƒƒ|_ tjd|j ƒdS(Ni“i‘tdates$Missing header 'date' in %s responses#Failed to convert datetime '%s': %ssSetting oauth clockskew to %d( t isinstanceRtUrlErrortcodetheadersRRR3tmktimeRR%R2R(Rtmsgt exceptionRCtret_timete((sM/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/DataSourceMAAS.pyR=•s ( t__name__t __module__t__doc__RRR+R$R"R=(((sM/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/DataSourceMAAS.pyR%s   $  #cCsŸtjj|ƒs!tdƒ‚nd}i}xb|D]Z}y&tjtjj||ƒƒ||//meta-data/instance-id * //meta-data/local-hostname * //user-data s%s/%sslocal-hostnames instance-ids public-keyss user-datasmeta-data/local-hostnamesmeta-data/instance-idsmeta-data/public-keyscSsiS(N((R*((sM/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/DataSourceMAAS.pyt_cbÞsitretriesR:R7t ssl_detailss4Fetching from %s resulted in an invalid http code %si”N( R R Rtfetch_ssl_detailstread_file_or_urltoktstrRRRFRRERU(tseed_urlt header_cbR7tversionRR t file_orderRWRXtnameR*RZR[R\trespRL((sM/opt/freeware/lib/python2.7/site-packages/cloudinit/sources/DataSourceMAAS.pyR#ÁsB          c Csâd}t|ƒdkr+td|ƒ‚nt|jƒƒ}g|D]}||krD|^qD}t|ƒr‡td||fƒ‚n|jddƒ}i}x6|jƒD](\}} |dkrÊq¬n| ||s0    … 6     V