x[hddlZddlZddlmZddlmZmZmZmZeje Z dgZ dZ dZGddejZd efd Zd efd Zeej*ej,ffgZd Zy)N)Optional)dmisources url_helperutilzhttp://169.254.169.254CloudCIXcreZdZdZdZdZdZfdZdZde fdZ de e fdZ ed Zed ZxZS) DataSourceCloudCIXr cLtt| |||d|_d|_yN)superr __init__ _metadata_url_net_cfg)selfsys_cfgdistropaths __class__s F/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceCloudCIX.pyrzDataSourceCloudCIX.__init__s&  $0&%H! c |j}|d|_t j|d|_y#tj$r }tj d|Yd}~yd}~wwxYw)z6 Fetch the user data and the metadata z0Failed to read data from CloudCIX datasource: %sNF meta-data user-dataT) crawl_metadata_servicerInvalidMetaDataExceptionLOGerrormetadatar decode_binary userdata_raw)r crawled_datar!s r _get_datazDataSourceCloudCIX._get_datasl 668L%[1  ..|K/HI//  IIBE   s:A- A((A-returnc|j}|tjdt||j }|S)Nz Could not determine metadata URL)determine_md_urlrr read_metadataget_url_params)rmd_urldatas rrz)DataSourceCloudCIX.crawl_metadata_service/sG&&( >222 VT%8%8%:; rc|jr |jS|j}tjt|j |j \}}|syttddD]}tj|dj|d} tj||j}|j!r7tj|dj||_|jStjd||jS#tj$r!}tjd||Yd}~d}~wwxYw) N)max_waittimeoutrzv{0}r")r0zURL %s raised exception %szNo metadata found at URL %s)rr+r wait_for_url METADATA_URLSmax_wait_secondstimeout_secondsrangeMETADATA_VERSION combine_urlformatreadurl url_timeoutUrlErrorr debugok)r url_paramsbase_url_versionurlresponsees rr)z#DataSourceCloudCIX.determine_md_url9s:   %% %((*  -- 00.. ! -q"5 >G((&--0*C %--c4;K;KL {{}%/%;%;fmmG4&"!!! 7=! >$!!!&&  6Q? s!D&&E9EEctSr)is_platform_viablerr ds_detectzDataSourceCloudCIX.ds_detect\s !##rc|jr |jS|jsy|jd|_|jS)Nnetwork)rr")rs rnetwork_configz!DataSourceCloudCIX.network_config`s7 ==== }} i0 }}r)__name__ __module__ __qualname__dsname url_retriesurl_timeout_secondsurl_sec_between_retriesrr&dictrrstrr) staticmethodrIpropertyrL __classcell__)rs@rr r sh FK "!"(3-!"F$$rr r'c:tjdtk(S)Nzsystem-product-name)r read_dmi_dataCLOUDCIX_DMI_NAMErHrrrGrGks   2 37H HHrr@c i}ddtjfddtjff}|D]\}}} tjtj |||j |j|j}|js+tjd |d |d|d |j ||j||<|S#tj$r&}tjd|d|d|d|d }~wwxYw#tj j"$r$} tjd |d|d| | d } ~ wwxYw)a; Read metadata from metadata server at base_url :returns: dictionary of retrieved metadata and user data containing the following keys: meta-data, user-data :param: base_url: meta data server's base URL :param: url_params: dictionary of URL retrieval parameters. Valid keys are `retries`, `sec_between` and `timeout`. :raises: InvalidMetadataException upon network error connecting to metadata URL, error response from meta data server or failure to decode/parse metadata and userdata payload. r"ruserdatar)rCretries sec_betweenr0zFailed to fetch IMDS z: /Nz No valid z found. URL z returned code zInvalid JSON at )r load_jsonmaybe_b64decoderr:r8 num_retriessec_between_retriesr5r<rrr>codecontentsjsondecoderJSONDecodeError) r@r?mdleaf_key_format_callbackurl_leafnew_keyformat_callbackrDr!excs rr*r*os~ B [$..1 [$"6"67  /G*'? !))**8X>"..&::"22 H{{}22H:&j(?8==/K   )(*;*;r}s 44g!)* W++WtIDI-C-d'00'2E2EFG ;r