x[h$ ddlZddlZddlmZddlmZmZmZmZddl Z ddl m Z ddl m Z ddlmZmZej"eZdZdZGd d Zd d d dededededef dZdededefdZ ddedeedefdZdefdZy)N) monotonic)DictOptionalTypeUnion)util)report_diagnostic_event)UrlErrorreadurlzhttp://169.254.169.254/metadatacBdttjdS)Ntrue)Metadatazx-ms-client-request-id)struuiduuid4)_urls >/usr/lib/python3/dist-packages/cloudinit/sources/azure/imds.py headers_cbrs"%djjl"3 c LeZdZdZddddddedeedeed dfd Zd efd Z y) ReadUrlRetryHandleraKManager for readurl retry behavior using exception_callback(). :param logging_backoff: Backoff to limit logging. :param max_connection_errors: Number of connection errors to retry on. :param retry_codes: Set of http codes to retry on. :param retry_deadline: Optional monotonic()-based deadline to retry until. ?N)ilogging_backoffmax_connection_errors retry_codesretry_deadlinerrr returncf||_||_||_||_d|_d|_d|_y)Nrr)rrrr _logging_threshold_request_count _last_error)selfrrrr s r__init__zReadUrlRetryHandler.__init__%s< /%:"&,"%37rc|xjdz c_t|tstd|ztj yd}|j t|j k\rd}nd}|jKt|jtjr'|xjdzc_|jdkr)d}n&|j|j|jvrd}|j|jk\r |xj|jzc_nd}|j-|j |jk7rvd}|j|_nb|j :t|j t"r t|j|j sd}t#|j|_|s|s*td|j|fztj |S)Nz1Polling IMDS failed with unexpected exception: %r logger_funcFTrz1Polling IMDS failed attempt %d with exception: %r)r$ isinstancer r LOGwarningr rrcauserequestsConnectionErrorcoderr#rr%type)r& exceptionlogretrys rexception_callbackz&ReadUrlRetryHandler.exception_callback:s q )X. #CKK      + t222EE  % % 1j OOX557   & &! + &))Q. NN &d&6&66E   $"9"9 9  # #t';'; ; #C >> %9>>1#,>>     $d..5ioot/?/?@C#IOO4D  e #C&& 23KK   r) __name__ __module__ __qualname____doc__floatrintr'boolr7rrrrsZ"%/3 +/88 (} 8!8 8*>t>rrT) log_responsetimeouturl retry_handlerrArBr!c t||jtd||}|jS#t$r$}t d|zt j d}~wwxYw)a'Fetch URL from IMDS. :param url: url to fetch. :param log_response: log responses in readurl(). :param retry_deadline: time()-based deadline to retry until. :param timeout: Read/connection timeout in seconds for readurl(). :raises UrlError: on error fetching metadata. T exception_cbrinfinite log_req_resprBz&Failed to fetch metadata from IMDS: %sr*N)r r7rr r r-r.contents)rCrDrArBresponseerrors r _fetch_urlrM{se  &99!%       4u <    s- AAAct||} tj|jdS#t$r$}t d|zt jd}~wwxYw)zFetch IMDS metadata. :param url: url to fetch. :param retry_deadline: time()-based deadline to retry until. :raises UrlError: on error fetching metadata. :raises ValueError: on error parsing metadata. rDzutf-8z&Failed to parse metadata from IMDS: %sr*N)rMr load_jsondecode ValueErrorr r-r.)rCrDmetadatarLs r_fetch_metadatarTsY#];H~~hoog677  4u <    s#3 A AA r rct||} tdz}t||S#t$rX}|jdk(rCt dt jt||}tdz}t||cYd}~Sd}~wwxYw) zFetch extended metadata, falling back to non-extended as required. :param retry_deadline: time()-based deadline to retry until. :raises UrlError: on error fetching metadata. :raises ValueError: on error parsing metadata. )rr z./instance?api-version=2021-08-01&extended=truerOiz,Falling back to IMDS api-version: 2019-06-01r*z /instance?api-version=2019-06-01N)rIMDS_URLrTr r2r r-r.)r rrDrCrLs r fetch_metadata_with_api_fallbackrWs(3%MIIs-@@   ::  #>KK 0&;-M??C"3mD D  s!% BA B:BBBctdz}tdddd}t||jtddd }t d |j dzd tj |jS)zhFetch extended metadata, falling back to non-extended as required. :raises UrlError: on error. z'/reprovisiondata?api-version=2019-06-01g@r))rrrNrTFr@rFz Polled IMDS z time(s)r*) rVrr r7rr r$r-debugrJ)rChandlerrKs rfetch_reprovision_datar[s > >C!  G // H w--a/09II   r)N) loggingrtimertypingrrrrr0 cloudinitrcloudinit.sources.helpers.azurer cloudinit.url_helperr r getLoggerr8r-rVrrrr>r=bytesrMrTr<rWr[r?rrrds  ..C2g! ,\\F   '      F ' 4CG2:3- @r