x[hM"ddlZddlZddlZddlmZmZej eZe ejgZ GddZ GddZ dZ dddddddd d Z dd Z dd Z dd Zy)N) url_helperutilceZdZdZdZdZy)MetadataLeafDecoderz.Decodes a leaf blob into something meaningful.cp|sy|j}|jdr|jdryy)NF{}T)strip startswithendswith)selftexts ?/usr/lib/python3/dist-packages/cloudinit/sources/helpers/ec2.py_maybe_json_objectz&MetadataLeafDecoder._maybe_json_objects0zz| ??3 DMM#$6cV|sy tj|}|j|r t j |S|jddk7r|jS|S#t$r|cYSwxYw#t tf$r!}tjd||Yd}~bd}~wwxYw)Nz6Field %s looked like a json object, but it was not: %s ) r decode_binaryUnicodeDecodeErrorrjsonloads ValueError TypeErrorLOGwarningfind splitlines)r fieldblobes r__call__zMetadataLeafDecoder.__call__s %%d+D  " "4 ( zz$'' 99T?b ??$ $ " K   *  L s(A'A8' A54A58B(B##B(N)__name__ __module__ __qualname____doc__rr#rrrrs8rrc&eZdZddZdZdZdZy)MetadataMaterializerNcn||_d|_||_||_|t |_y||_yN)_blob_md _base_url_callerr _leaf_decoder)r r!base_urlcaller leaf_decoders r__init__zMetadataMaterializer.__init__7s7 !  !4!6D !-D rci}g}tj|}|s||fSd}d}|jD]}|j}||}|r|s |dk(r&||r||vs3|j |E|j dd}|} t |dkDr#|\} } tj| } | d| z} | }| ||<||fS)Nc(|jdryy)N/TF)r items r has_childrenz1MetadataMaterializer._parse..has_childrenIs}}S!rcJ|jdr|jdS|S)Nr8)r rstripr9s rget_namez-MetadataMaterializer._parse..get_nameOs"}}S!{{3''Krzsecurity-credentials=z%s/openssh-key)rrrr appendsplitlensafe_int) r r!leaveschildrenr;r>r field_namecontentsresourceident sub_contentss r_parsezMetadataMaterializer._parseAs!!$'H% %    __& .EKKME!%J 33E"X-OOJ/ ;;sA.%x=1$,4)UL MM%0E(#3u#=%1 %-z"+ .,!!rc|j |jS|j|j|j|_|jSr,)r. _materializer-r/)r s r materializez MetadataMaterializer.materializels: 88 88O$$TZZ@xxrc&|j|\}}i}|D]T}tj||}|jds|dz }|j |}|j ||||<Vi} |j D]A\} } tj|| } |j | } |j| | | | <Ci}|j|| jD]%} | |vrtjd|| | || <'|S)Nr8z&Duplicate key found in results from %s) rLr combine_urlr r0rNitemsr1updatekeysrr)r r!r2rErFchild_contentsc child_url child_blob leaf_contentsr rIleaf_url leaf_blobjoineds rrNz!MetadataMaterializer._materializers)![[. IA"..x;I%%c*S i0J $ 1 1*i HN1   I  %||~ HOE8!--hAH X.I#'#5#5eY#GM%  H n%"'') 5E DhO -e 4u  5  rr,)r$r%r&r5rLrOrNr(rrr*r*6s.)"V rr*c|j|vS)z/Returns False if cause.code is in status_codes.)code) status_codescauses rskip_retry_on_codesras ::\ ))r ssl_detailstimeoutretries headers_cbheaders_redact exception_cbc tj||}tj|d}d} |stjtt }tj |||||||} | j} | S#tj$r8} | jt vrtjtd|Yd} ~ | Sd} ~ wt$rtjtd|Y| SwxYw)Nz user-datar)rdrerfrirgrhz$Failed fetching userdata from url %s)rrQ functoolspartialraSKIP_USERDATA_CODESread_file_or_urlrHUrlErrorr^rlogexcr Exception) api_versionmetadata_addressrdrerfrgrhriud_url user_dataresponser"s rget_instance_userdatarws # #$4k BF  # #FK 8FII%,,#%8L.. #%!) %%    M 66, , KKCV L  I C?H IsAA::C+ -C'C+*C+c z tj|||} tjtj||||||  fd} | } t | j | | |}|j}t|tsi}|S#t$r!tjtd|| icYSwxYw)Nrcc |jS#tj$r+}r|stj d|Yd}~yd}~wwxYw)Nz&Skipped retrieval of the content of %sz (skipped))rHrrorr)urlr"r3retrieval_exception_ignore_cbs rmcallerz'_get_instance_metadata..mcallersN ##;'' '"" #14Q7 DcJ" #sA!AA)r4zFailed fetching %s from url %s)rrQrkrlrnr*rHrO isinstancedictrqrrpr)treerrrsrdrerfr4rgrhrir{md_urlr|rv materializermdr3s ` @r_get_instance_metadatars # #$4k4 HF   ##%!F # &>+   vw\  % % '"t%B  C94H s AB'B:9B:c .td||||||||||  S)Nz meta-data/) rrrrsrdrerfr4rhrgrir{r) rrrsrdrerfr4rgrhrir{s rget_instance_metadatars2 " )!%!&C  rc ,td||||||||| S)Nzdynamic/instance-identity) rrrrsrdrerfr4rhrgrir) rrrsrdrerfr4rgrhris rget_instance_identityrs/ " ()!%!  r)latesthttp://169.254.169.254) rrNrbrbNNNNN) rrNrbrbNNNN)rkrlogging cloudinitrr getLoggerr$r frozenset NOT_FOUNDrmrr*rarwrrrr(rrrs &g!!5!5 67FQQh* -% %T- "&0h- "&<- r