3 \me@sddlZddlmZddlmZmZmZmZmZm Z ddl m Z ddl m Z ejeZdZdediZd Zd Zd ZGd d d ejZd dZddZdddZeejffgZdS)N) exceptions)dminetsourcessubp url_helperutil)NoDHCPLeaseError)EphemeralDHCPv4zhttp://169.254.169.254/api/v1 metadata_urlz /metadatac@s@eZdZdZddZddZddZedd Ze d d Z d S) DataSourceNWCSNWCScCstjj||||||_t|_tjtj|ddgit g|_ |j d|_ |j j dt |_|j j dt|_|j j dt|_tj|_tj|_dS)NZ datasourcerr retriestimeout wait_retry)r DataSource__init__distrodictmetadatarZ mergemanydictZget_cfg_by_pathBUILTIN_DS_CONFIGZds_cfgmetadata_addressget MD_RETRIESr MD_TIMEOUTr MD_WAIT_RETRYrUNSET_network_configZDSMODE_NETWORKZdsmode)selfZsys_cfgrpathsr"$/usr/lib/python3.6/DataSourceNWCS.pyrs  zDataSourceNWCS.__init__cCsv|j}|dkrtd||_|d|jd<|d|jd<|d|jd<|d|jd<|jdd|_|jdd|_d S) Nzfailed to get metadataz instance-idz public-keysnetworkZhostnamezlocal-hostnameZuserdataZ vendordataT) get_metadata RuntimeErrorZ metadata_fullrrZ userdata_rawZvendordata_raw)r Zmdr"r"r# _get_data/szDataSourceNWCS._get_datacCsyJtjdt|jtjdtdidt|j|j |j |j dSQRXWn<t t jttjfk r}ztjd|WYdd}~XnXdS)Nz#Attempting to get metadata via DHCPurlz/metadata/instance-id)ZifaceZconnectivity_url_data)r sec_betweenrzDHCP failure: %s)LOGinfor rrZfind_fallback_nic BASE_URL_V1 read_metadatarrrrr rZProcessExecutionErrorr&rZRequestExceptionerror)r er"r"r#r%Bs$  zDataSourceNWCS.get_metadatacCstjd|jdkr*tjdtjtj|_|jtjkr<|jS|jddsRtdx@|jddD].}t|d}|rbtj d|d|||d<qbW|jd|_|jS) Nz Attempting network configurationz5Found None as cached _network_config, resetting to %sr$configz"Unable to get metadata from serverZ mac_addresszOverriding %s with %sname) r*debugrZwarningrrrr&get_interface_namer+)r iZ iface_namer"r"r#network_config]s"      zDataSourceNWCS.network_configcCsdtjdkS)Nrzsystem-manufacturer)rZ read_dmi_datar"r"r"r# ds_detectzszDataSourceNWCS.ds_detectN) __name__ __module__ __qualname__Zdsnamerr'r%propertyr5 staticmethodr6r"r"r"r#rs  rcCstj}||krdS|j|S)N)rZget_interfaces_by_macr)ZmacZ macs_to_nicr"r"r#r3sr3cCs tj|tS)N)rZlist_from_depends datasources)Zdependsr"r"r#get_datasource_listsr=cCs6tj||||d}|js&td|tj|jjS)N)rr)rzunable to read metadata at %s)rZreadurlokr&rZ load_jsoncontentsdecode)r(rr)rZresponser"r"r#r-s  r-)r>r>r )ZloggingZrequestsrZ cloudinitrrrrrrZcloudinit.net.dhcpr Zcloudinit.net.ephemeralr Z getLoggerr7r*r,rrrrrrr3r=r-ZDEP_FILESYSTEMr<r"r"r"r#s      e