܍~c"ddlZddlZddlmZddlmZmZejeZ e ej gZ GddZ GddZdZ dd Z dd Z ddZ ddZdS)N)log) url_helperutilceZdZdZdZdZdS)MetadataLeafDecoderz.Decodes a leaf blob into something meaningful.c|sdS|}|dr|drdSdS)NF{}T)strip startswithendswith)selftexts ?/usr/lib/python3/dist-packages/cloudinit/sources/helpers/ec2.py_maybe_json_objectz&MetadataLeafDecoder._maybe_json_objectsM 5zz|| ??3   DMM#$6$6 4uc|sdS tj|}n#t$r|cYSwxYw||rO t j|S#t tf$r&}t d||Yd}~nd}~wwxYw| ddkr| S|S)Nz6Field %s looked like a json object, but it was not: %s ) r decode_binaryUnicodeDecodeErrorrjsonloads ValueError TypeErrorLOGwarningfind splitlines)rfieldblobes r__call__zMetadataLeafDecoder.__call__s 2 %d++DD!   KKK   " "4 ( (  z$''' *    L  99T??b ??$$ $ s$ **AB(B  BN)__name__ __module__ __qualname____doc__rr$rrrrs888rrc(eZdZddZdZdZdZdS)MetadataMaterializerNcz||_d|_||_||_|t |_dS||_dSN)_blob_md _base_url_callerr _leaf_decoder)rr"base_urlcaller leaf_decoders r__init__zMetadataMaterializer.__init__7sF !  !4!6!6D   !-D   rci}g}tj|}|s||fSd}d}|D]}|}||}|r|s&|dkr-||r||vr||R|dd}|} t |dkr"|\} } tj| } | d| z} | }| ||<||fS)Nc4|drdSdS)N/TF)r items r has_childrenz1MetadataMaterializer._parse..has_childrenIs }}S!! turcZ|dr|dS|S)Nr9)r rstripr:s rget_namez-MetadataMaterializer._parse..get_nameOs-}}S!! ({{3'''Krzsecurity-credentials=z%s/openssh-key)rrr r appendsplitlensafe_int) rr"leaveschildrenr<r?r! field_namecontentsresourceident sub_contentss r_parsezMetadataMaterializer._parseAsB!$'' &H% %        __&& . .EKKMME!%J   333|E"" .X--OOJ/// ;;sA..%x==1$$,4)UL M%00E(#3u#=%1 %-z""!!rcv|j|jS||j|j|_|jSr-)r/ _materializer.r0)rs r materializez MetadataMaterializer.materializels3 8 8O$$TZ@@xrcn||\}}i}|D]_}tj||}|ds|dz }||}|||||<`i} |D]H\} } tj|| } || } || | | | <Ii}||| D]-} | |vrt d|"| | || <.|S)Nr9z&Duplicate key found in results from %s) rMr combine_urlr r1rOitemsr2updatekeysrr)rr"r3rFrGchild_contentsc child_url child_blob leaf_contentsr!rJleaf_url leaf_blobjoineds rrOz!MetadataMaterializer._materializersY![[.. I IA".x;;I%%c** !S i00J $ 1 1*i H HN1   !' H H UH!-hAAH X..I#'#5#5eY#G#GM%  n%%%"'')) 5 5E DhOOOO -e 4u  rr-)r%r&r'r6rMrPrOr)rrr+r+6sV....)")")"V rr+c|j|vS)z/Returns False if cause.code is in status_codes.)code) status_codes _request_argscauses rskip_retry_on_codesrcs :\ ))rlatesthttp://169.254.169.254c tj||}tj|d}d} |stjtt }tj|||||||} | j} nk#tj$r3} | j t vrtj td|Yd} ~ n.d} ~ wt$rtj td|YnwxYw| S)Nz user-datar) ssl_detailstimeoutretries exception_cb headers_cbheaders_redactz$Failed fetching userdata from url %s)rrR functoolspartialrcSKIP_USERDATA_CODESread_file_or_urlrIUrlErrorr_rlogexcr Exception) api_versionmetadata_addressrhrirjrlrmrkud_url user_dataresponser#s rget_instance_userdatarzs #$4k B BF  #FK 8 8FII %,#%8L. #%!)   %  MMM 6, , , KCV L L L III C?HHHHHI sAA22C)B//(CCc  tj|||} tjtj||||||  fd} | } t | j| | |}|}t|tsi}|S#t$r!tj td|| icYSwxYw)N)rhrirjrlrmrkc |jS#tj$r4}r |std|Yd}~dSd}~wwxYw)Nz&Skipped retrieval of the content of %sz (skipped))rIrrrrr)urlr#r4retrieval_exception_ignore_cbs rmcallerz'_get_instance_metadata..mcallers} #6#;;' '" # # #1 #44Q77 # DcJJJ"{{{{{ #sA)AA)r5zFailed fetching %s from url %s)rrRrnrorqr+rIrP isinstancedictrtrrsr)treerurvrhrirjr5rlrmrkr~md_urlrry materializermdr4s ` @r_get_instance_metadatars #$4k4 H HF  #%!F # # # # # # 6&>>+  vw\    % % ' '"t%% B  C94HHH sAB(C?Cc 6td||||||||||  S)Nz meta-data/) rrurvrhrirjr5rmrlrkr~r) rurvrhrirjr5rlrmrkr~s rget_instance_metadatars< " )!%!&C    rc 4td||||||||| S)Nzdynamic/instance-identity) rrurvrhrirjr5rmrlrkr) rurvrhrirjr5rlrmrks rget_instance_identityrs9 " ()!%!    r)rdreNrfrfNNN) rdreNrfrfNNNNN) rdreNrfrfNNNN)rnr cloudinitrloggingrr getLoggerr%r frozenset NOT_FOUNDrprr+rcrzrrrr)rrrs $$$$$$&&&&&&&&g!!i!5 677FQQQQQQQQh*** - $$$$R- "&0000h- "&<- r