3 \meF7@sddlZddlZddlZddlmZddlmZmZmZm Z m Z ddl m Z ddl mZmZddlmZddlmZddlmZejeZd Zd eiZd;ZdZdZddiZdZGdddZ Gdddej!Z"Gddde"Z#ddZ$ddZ%dd:dS)?N) b64decode)dminetsources url_helperutil)ug_util) EventScope EventType)NoDHCPLeaseError)EphemeralDHCPv4)DataSourceHostnamez3http://metadata.google.internal/computeMetadata/v1/ metadata_url instance-idavailability-zonelocal-hostnamezLhttp://metadata.google.internal/computeMetadata/v1/instance/guest-attributeshostkeyszMetadata-FlavorGoogleZens4c@seZdZddZdddZdS)GoogleMetadataFetchercCs||_||_||_dS)N)metadata_address num_retriessec_between_retries)selfrrrr#/usr/lib/python3.6/DataSourceGCE.py__init__ szGoogleMetadataFetcher.__init__Fc Csd}y0|j|}|r|d7}tj|t|j|jd}Wn6tjk rj}zd}tj|||WYdd}~Xnsz%_parse_public_keys..:r:re cloudinit)allrVrErlappend)rPr4Z public_keysrkZsplit_public_keyuserrSrrrrOs   rOTc Cs|dkr t}ddddd}t|d<|r>|d r>d|d<|Stj|sdtjd|d||d<|Sd(d*d,d.d0g}t||j|j}i}xn|D]f\}}} } } d} x&|D]} |j | | | }|dk r|} qW| r| dkrd}|||d<|S| ||<qWt j |dpd}t j |dpd}|j d|j dg}|j ddj }|dkrz|j d rz|j|j d|j|j ddjdd|D}|j|d<|d r|d jdd1|d <d |kr |d jd!}|j d"}|d#krt|}n|rtjd$|||d <||d%<d |d&<|S)2NF)z meta-dataz user-datar>r@r?zNot running on GCE.r@z%s is not resolvablezaddress "%s" is not resolvable instance-id instance/idTavailability-zone instance/zonelocal-hostnameinstance/hostname instance-datainstance/attributes project-dataproject/attributesz)required key %s returned nothing. not GCEz{}ZsshKeyszssh-keyszblock-project-ssh-keystrue cSsg|] }|r|qSrr)rorSrrr ;szread_md..zpublic-keys-data/r:z user-datazutf-8zuser-data-encodingbase64z(unknown user-data-encoding: %s, ignoringz meta-datar>rx)rwrTTFrz)ryrTTFr|)r{rTTFr~)r}rFFTr)rrFFT) MD_V1_URLr?rZis_resolvable_urlr!r"rrrr-rhrigetlowerrujoin splitlinesrVrarrI)r;r<platform_checkrJZurl_mapZmetadata_fetcherZmdZmkeyr9Zrequiredr'r(r)r&Z new_valuer,Z instance_dataZ project_dataZ valid_keysZ block_projectrPZudencodingrrrrGsn              rGcCsPtjdp d}|dks|dkr"dStjdp.d}|jdr>dStjd||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?Qs  r?cCs tj|tS)N)rZlist_from_depends datasources)Zdependsrrrget_datasource_listisr__main__) b64encodezQuery GCE Metadata Service) descriptionz --endpointZURLz The url of the metadata service.)metavarhelpdefaultz--no-platform-checkrzIgnore smbios platform checkZ store_false)destractionr)r;rz user-dataz/User-data cannot be decoded. Writing as base64 z user-data-b64r:,: )indentZ sort_keysZ separators)rrr)N)NNT)rr)>rjrhZloggingrrrsrrrrrZcloudinit.distrosrZcloudinit.eventr r Zcloudinit.net.dhcpr Zcloudinit.net.ephemeralr Zcloudinit.sourcesr Z getLoggerr.r!rr7ZREQUIRED_FIELDSr_r`r rBrr3r1r]rRrlrOrGr?ZDEP_FILESYSTEMZ DEP_NETWORKrrargparsesysrArgumentParserparser add_argument parse_argsargsZendpointrr^r%UnicodeDecodeErrorstderrwriteprintdumpsrrrrsn       {"  M