a '¡DgN5ã@sddlZddlZddlZddlmZddlmZmZmZm Z m Z ddl m Z ddl mZmZddlmZddlmZddlmZe e¡Zd Zd eiZd Zd Zd diZdZGdd„dƒZGdd„dej ƒZ!Gdd„de!ƒZ"dd„Z#dd„Z$d7dd„Z%d8dd„Z&dd „Z'e"ej(ffe!ej(ej)ffgZ*d!d"„Z+ed#k�r ddl,Z,ddl-Z-dd$lm.Z.e,j/d%d&�Z0e0j1d'd(d)ed*�e0j1d+d,d-d.dd/�e0 2¡Z3e&e3j4e3j5d0�Z6d1e6v�rôze6d1 7¡e6d1<Wn:e8�yòe-j9 :d2¡e6d1=e.e6d1ƒ 7¡e6d3<Yn0e;ejs&þÿ5   r0c@seZdZdZdS)ÚDataSourceGCELocalTN)r-r.r/r@rrrrra¬sracCsRdtt|f}| d¡}tj||tddd�}| ¡rBt d|¡n t d|¡dS)Nz%s/%s/%srZPUTF)rÚdatarZrequest_methodZ check_statusz&Wrote %s host key to guest attributes.z0Unable to write %s host key to guest attributes.) ÚGUEST_ATTRIBUTES_URLÚHOSTKEY_NAMESPACEÚencoderrrÚokr r!)Zkey_typeÚ key_valuerr)rrrrS°s ûrSc Csºz| dd¡dd…\}}Wnttfy4YdS0|dkrBdSzt |¡}WntydYdS0d|vrrdS|d}d}ztj ||¡}Wnty¤YdS0tj tjj ¡|kS)NééFz google-sshZexpireOnz%Y-%m-%dT%H:%M:%S%z) rXÚ ValueErrorÚAttributeErrorÚjsonÚloadsÚdatetimeÚstrptimeZnowÚtimezoneZutc)Ú public_keyZschemaZjson_strZjson_objZ expire_strZ format_strZ expire_timerrrÚ _has_expiredÀs&  rrcCsrg}|s |S|D]\}|rtdd„|Dƒƒs,q| dd¡}t|ƒdkrFq|\}}|d|fvrt|ƒs| |¡q|S)Ncss|]}t|ƒdkVqdS)é€N)Úord)Ú.0ÚcrrrÚ ëóz%_parse_public_keys..ú:r]riÚ cloudinit)ÚallrXÚlenrrÚappend)rQr3Z public_keysrqZsplit_public_keyÚuserrTrrrrPâs   rPTcCs |dur t}dddddœ}tƒ|d<|r<|dsr?r;r=r<zNot running on GCE.r=z%s is not resolvablezaddress "%s" is not resolvable))rL)z instance/idTTF)rZ)z instance/zoneTTF)rV)zinstance/hostnameTTF)ú instance-data)zinstance/attributesFFT)ú project-data)zproject/attributesFFTz)required key %s returned nothing. not GCErz{}r€ZsshKeyszssh-keyszblock-project-ssh-keysÚÚtrueÚ cSsg|] }|r|‘qSrr)rurTrrrÚ -rxzread_md..rOrZú/éÿÿÿÿr?rzuser-data-encodingÚbase64z(unknown user-data-encoding: %s, ignoringr>Tr;)Ú MD_V1_URLr<rZis_resolvable_urlr r!rrrr,rlrmÚgetÚlowerr}ÚjoinÚ splitlinesrXrerrF)r9r:Úplatform_checkrGZurl_mapZmetadata_fetcherZmdZmkeyr8Úrequiredr&r'r(r%Z new_valuer+Z instance_dataZ project_dataZ valid_keysZ block_projectrQZudÚencodingrrrrDösjü      ÿ          rDcCsPt d¡p d}|dks|dkr"dSt d¡p.d}| d¡r>dSt d||¡d S) Nzsystem-product-namezN/AzGoogle Compute EnginerTzsystem-serial-numberz GoogleCloud-z6Not running on google cloud. product-name=%s serial=%sF)rZ read_dmi_dataÚ startswithr r!)ZpnameÚserialrrrr<Cs ÿr<cCs t |t¡Sr)rZlist_from_dependsÚ datasources)ZdependsrrrÚget_datasource_list[sr“Ú__main__)Ú b64encodezQuery GCE Metadata Service)Ú descriptionz --endpointZURLz The url of the metadata service.)ÚmetavarÚhelpÚdefaultz--no-platform-checkr�zIgnore smbios platform checkÚ store_false)Údestr˜Úactionr™)r9r�r?z/User-data cannot be decoded. Writing as base64 z user-data-b64r])ú,z: )ÚindentZ sort_keysZ separators)N)NNT)=rnrlZloggingr‡rrzrrrrrZcloudinit.distrosrZcloudinit.eventr r Zcloudinit.net.dhcpr Zcloudinit.net.ephemeralr Zcloudinit.sourcesr Z getLoggerr-r rˆr6rcrdrrArr2r0rarSrrrPrDr<ZDEP_FILESYSTEMZ DEP_NETWORKr’r“ÚargparseÚsysr•ÚArgumentParserÚparserÚ add_argumentÚ parse_argsÚargsZendpointr�rbr$ÚUnicodeDecodeErrorÚstderrÚwriteÚprintÚdumpsrrrrÚsv      ÿ n"  M þ   üû ÿ