a 'DgU" @sddlZddlZddlZddlmZmZeeZe ej gZ GdddZ GdddZ ddZdd d ZdddZdddZdddZdS)N) url_helperutilc@s eZdZdZddZddZdS)MetadataLeafDecoderz.Decodes a leaf blob into something meaningful.cCs,|sdS|}|dr(|dr(dSdS)NF{}T)strip startswithendswith)selftextr A/usr/lib/python3.9/site-packages/cloudinit/sources/helpers/ec2.py_maybe_json_objects z&MetadataLeafDecoder._maybe_json_objectc Cs|sdSzt|}Wnty,|YS0||r|z t|WSttfyz}zt d||WYd}~n d}~00| ddkr| S|S)Nz6Field %s looked like a json object, but it was not: %s ) r decode_binaryUnicodeDecodeErrorrjsonloads ValueError TypeErrorLOGwarningfind splitlines)r fieldblober r r __call__s$    zMetadataLeafDecoder.__call__N)__name__ __module__ __qualname____doc__rrr r r r rsrc@s.eZdZd ddZddZddZdd ZdS) MetadataMaterializerNcCs4||_d|_||_||_|dur*t|_n||_dSN)_blob_md _base_url_callerr _leaf_decoder)r rbase_urlcaller leaf_decoderr r r __init__7s zMetadataMaterializer.__init__c Csi}g}t|}|s||fSdd}dd}|D]}|}||}|r6|sTq6|dkr^q6||rz||vr||q6|dd}|} t|dkr|\} } t| } | durd| } | }| ||<q6||fS) NcSs|drdSdSdS)N/TF)r itemr r r has_childrenIs z1MetadataMaterializer._parse..has_childrencSs|dr|dS|S)Nr/)r rstripr0r r r get_nameOs  z-MetadataMaterializer._parse..get_namezsecurity-credentials=z%s/openssh-key)rrrrappendsplitlenZsafe_int) r rleaveschildrenr2r4r field_namecontentsresourceidentZ sub_contentsr r r _parseAs6       zMetadataMaterializer._parsecCs(|jdur|jS||j|j|_|jSr%)r' _materializer&r()r r r r materializels z MetadataMaterializer.materializecCs||\}}i}|D]<}t||}|ds8|d7}||}|||||<qi} |D].\} } t|| } || } || | | | <q`i}||| D]&} | |vrt d|q| | || <q|S)Nr/z&Duplicate key found in results from %s) r@r combine_urlr r)rAitemsr*updatekeysrr)r rr+r:r;Zchild_contentscZ child_urlZ child_blobZ leaf_contentsrr>Zleaf_urlZ leaf_blobZjoinedr r r rArs(       z!MetadataMaterializer._materialize)N)r r!r"r.r@rBrAr r r r r$6s +r$cCs |j|vS)z/Returns False if cause.code is in status_codes.)code)Z status_codesZ _request_argscauser r r skip_retry_on_codessrJlatesthttp://169.254.169.254c Cst||}t|d}d} z2|s.ttt}tj|||||||d} | j} Wn\tjy} z$| j tvrxt t d|WYd} ~ n(d} ~ 0t yt t d|Yn0| S)Nz user-data) ssl_detailstimeoutretries exception_cb headers_cbheaders_redactz$Failed fetching userdata from url %s)rrC functoolspartialrJSKIP_USERDATA_CODESread_file_or_urlr=UrlErrorrHrlogexcr Exception) api_versionmetadata_addressrOrPrQrSrTrRZud_urlZ user_dataresponserr r r get_instance_userdatas0    " r_c  st|||} tjtj|||||| dfdd} z6| } t| j| | |d}|}t|t shi}|WSt yt t d|| iYS0dS)N)rOrPrQrSrTrRc sbz |jWStjy\}z6r*|s.ntd|WYd}~dSWYd}~n d}~00dS)Nz&Skipped retrieval of the content of %sz (skipped))r=rrYrr)urlrr,retrieval_exception_ignore_cbr r mcallers  z'_get_instance_metadata..mcaller)r-zFailed fetching %s from url %s)rrCrUrVrXr$r=rB isinstancedictr[rrZr)treer\r]rOrPrQr-rSrTrRrbZmd_urlrcr^Z materializerZmdr rar _get_instance_metadatas.      rgc Cstd|||||||||| d S)Nz meta-data/) rfr\r]rOrPrQr-rTrSrRrbrg) r\r]rOrPrQr-rSrTrRrbr r r get_instance_metadatasric Cstd|||||||||d S)Nzdynamic/instance-identity) rfr\r]rOrPrQr-rTrSrRrh) r\r]rOrPrQr-rSrTrRr r r get_instance_identitys rj)rKrLNrMrMNNN) rKrLNrMrMNNNNN) rKrLNrMrMNNNNN) rKrLNrMrMNNNN)rUrZloggingZ cloudinitrrZ getLoggerr r frozensetZ NOT_FOUNDrWrr$rJr_rgrirjr r r r  sb  #T ) 4