o x[h@sddlZddlmZddlmZmZmZmZmZm Z ddl m Z ddl m Z eeZdZdediZd Zd Zd ZGd d d ejZd dZddZdddZeejffgZdS)N) exceptions)dminetsourcessubp url_helperutil)NoDHCPLeaseError)EphemeralDHCPv4zhttp://169.254.169.254/api/v1 metadata_urlz /metadatacsZeZdZdZddZdeddffdd Zd d Zd d Ze d dZ e ddZ Z S)DataSourceNWCSNWCScCstj||||||_t|_tt|ddgit g|_ |j d|_ |j dt |_|j dt|_|j dt|_tj|_tj|_d|_dS)N datasourcerr retriestimeout wait_retry)r DataSource__init__distrodictmetadatar mergemanydictget_cfg_by_pathBUILTIN_DS_CONFIGds_cfgmetadata_addressget MD_RETRIESr MD_TIMEOUTr MD_WAIT_RETRYrUNSET_network_configDSMODE_NETWORKdsmode metadata_full)selfsys_cfgrpathsr*B/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceNWCS.pyrs  zDataSourceNWCS.__init__ci_pkl_versionreturnNcs"t||jstj|_dSdSN)super _unpickler#rr")r'r, __class__r*r+r00s  zDataSourceNWCS._unpicklecCsv|}|dur td||_|d|jd<|d|jd<|d|jd<|d|jd<|dd|_|dd|_d S) Nzfailed to get metadataz instance-idz public-keysnetworkhostnamezlocal-hostnameuserdata vendordataT) get_metadata RuntimeErrorr&rr userdata_rawvendordata_raw)r'mdr*r*r+ _get_data5szDataSourceNWCS._get_datac Csz4tdt|jtdtdigdt|j|j |j |j dWdWS1s-wYWdSt t jttjfyM}ztd|d}~ww)Nz#Attempting to get metadata via DHCPurlz/metadata/instance-id)ifaceconnectivity_urls_datar sec_betweenrzDHCP failure: %s)LOGinfor rrfind_fallback_nic BASE_URL_V1 read_metadatarrrrr rProcessExecutionErrorr8rRequestExceptionerror)r'er*r*r+r7Hs4  ( zDataSourceNWCS.get_metadatacCstd|jtjkr|jS|jddstd|jddD]}t|d}|r7td|d|||d<q |jd|_|jS)Nz Attempting network configurationr3configz"Unable to get metadata from server mac_addresszOverriding %s with %sname) rBdebugr#rr"rr8get_interface_namerC)r'i iface_namer*r*r+network_configes    zDataSourceNWCS.network_configcCsdtdkS)Nrzsystem-manufacturer)r read_dmi_datar*r*r*r+ ds_detect{szDataSourceNWCS.ds_detect)__name__ __module__ __qualname__dsnamerintr0r<r7propertyrR staticmethodrT __classcell__r*r*r1r+rs rcCst}||vr dS||Sr.)rget_interfaces_by_macr)mac macs_to_nicr*r*r+rOs rOcCs t|tSr.)rlist_from_depends datasources)dependsr*r*r+get_datasource_lists rccCs6tj||||d}|std|t|jS)Nr@zunable to read metadata at %s)rreadurlokr8r load_jsoncontentsdecode)r=rrArresponser*r*r+rFs  rF)rdrdr )loggingrequestsr cloudinitrrrrrrcloudinit.net.dhcpr cloudinit.net.ephemeralr getLoggerrUrBrErrr r!rrrOrcrFDEP_FILESYSTEMrar*r*r*r+s$     f