a 'DgN5@sddlZddlZddlZddlmZddlmZmZmZm Z m Z ddl m Z ddl mZmZddlmZddlmZddlmZeeZd Zd eiZd Zd Zd diZdZGdddZGdddej Z!Gddde!Z"ddZ#ddZ$d7ddZ%d8ddZ&dd Z'e"ej(ffe!ej(ej)ffgZ*d!d"Z+ed#kr ddl,Z,ddl-Z-dd$lm.Z.e,j/d%d&Z0e0j1d'd(d)ed*e0j1d+d,d-d.dd/e02Z3e&e3j4e3j5d0Z6d1e6vrze6d17e6d1<Wn:e8ye-j9:d2e6d1=e.e6d17e6d3<Yn0e;ejs&5   r0c@seZdZdZdS)DataSourceGCELocalTN)r-r.r/rArrrrrbsrbcCsRdtt|f}|d}tj||tddd}|rBtd|n td|dS)Nz%s/%s/%srZPUTF)rdatarZrequest_methodZ check_statusz&Wrote %s host key to guest attributes.z0Unable to write %s host key to guest attributes.) GUEST_ATTRIBUTES_URLHOSTKEY_NAMESPACEencoderrrokr r!)Zkey_type key_valuerr)rrrrUs rUc Csz|dddd\}}Wnttfy4YdS0|dkrBdSzt|}WntydYdS0d|vrrdS|d}d}ztj||}WntyYdS0tjtjj |kS)NFz google-sshZexpireOnz%Y-%m-%dT%H:%M:%S%z) rZ ValueErrorAttributeErrorjsonloadsdatetimestrptimeZnowtimezoneZutc) public_keyZschemaZjson_strZjson_objZ expire_strZ format_strZ expire_timerrr _has_expireds&  rscCsrg}|s |S|D]\}|rtdd|Ds,q|dd}t|dkrFq|\}}|d|fvrt|s||q|S)Ncss|]}t|dkVqdS)N)ord).0crrr z%_parse_public_keys..:r9rj cloudinit)allrZrErsappend)rSr3Z public_keysrrZsplit_public_keyuserrVrrrrRs   rRTcCs |dur t}ddddd}t|d<|r<|dsr=zNot running on GCE.r>z%s is not resolvablezaddress "%s" is not resolvable))rN)z instance/idTTF)r\)z instance/zoneTTF)rX)zinstance/hostnameTTF) instance-data)zinstance/attributesFFT) project-data)zproject/attributesFFTz)required key %s returned nothing. not GCErz{}rZsshKeyszssh-keyszblock-project-ssh-keystrue cSsg|] }|r|qSrr)rvrVrrr -ryzread_md..rQr\/r@rzuser-data-encodingbase64z(unknown user-data-encoding: %s, ignoringr?Tr<) MD_V1_URLr=rZis_resolvable_urlr r!rrrr,rmrngetlowerr}join splitlinesrZrfrrH)r:r;platform_checkrIZurl_mapZmetadata_fetcherZmdZmkeyr8requiredr&r'r(r%Z new_valuer+Z instance_dataZ project_dataZ valid_keysZ block_projectrSZudencodingrrrrFsj                rFcCsPtdp d}|dks|dkr"dStdp.d}|dr>dStd||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!)Zpnameserialrrrr=Cs r=cCs t|tSr)rZlist_from_depends datasources)Zdependsrrrget_datasource_list[sr__main__) b64encodezQuery GCE Metadata Service) descriptionz --endpointZURLz The url of the metadata service.)metavarhelpdefaultz--no-platform-checkrzIgnore smbios platform check store_false)destractionr)r:rr@z/User-data cannot be decoded. Writing as base64 z user-data-b64r9),z: )indentZ sort_keysZ separators)N)NNT)=rormZloggingrrr{rrrrrZcloudinit.distrosrZcloudinit.eventr r Zcloudinit.net.dhcpr Zcloudinit.net.ephemeralr Zcloudinit.sourcesr Z getLoggerr-r rr6rdrerrBrr2r0rbrUrsrRrFr=ZDEP_FILESYSTEMZ DEP_NETWORKrrargparsesysrArgumentParserparser add_argument parse_argsargsZendpointrrcr$UnicodeDecodeErrorstderrwriteprintdumpsrrrrsv       n"  M