o
    w7e                     @   s   d dl mZ d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZ d dlmZ eeZdZded	 iZd
ZdZdZG dd dejZdd Zdd ZdddZeejffgZdS )    )
exceptions)dmi)log)netsourcessubp
url_helperutil)NoDHCPLeaseError)EphemeralDHCPv4zhttp://169.254.169.254/api/v1metadata_urlz	/metadata      c                   @   s@   e Zd ZdZdd Zdd Zdd Zedd	 Ze	d
d Z
dS )DataSourceNWCSNWCSc                 C   s   t j| ||| || _t | _tt|ddgi t	g| _
| j
d | _| j
dt| _| j
dt| _| j
dt| _t j| _t j| _d S )N
datasourcer   r   retriestimeout
wait_retry)r   
DataSource__init__distrodictmetadatar	   mergemanydictget_cfg_by_pathBUILTIN_DS_CONFIGds_cfgmetadata_addressget
MD_RETRIESr   
MD_TIMEOUTr   MD_WAIT_RETRYr   UNSET_network_configDSMODE_NETWORKdsmode)selfsys_cfgr   paths r*   B/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceNWCS.pyr      s   zDataSourceNWCS.__init__c                 C   sv   |   }|d u rtd|| _|d | jd< |d | jd< |d | jd< |d | jd< |dd | _|dd | _d	S )
Nzfailed to get metadatazinstance-idzpublic-keysnetworkhostnamezlocal-hostnameuserdata
vendordataT)get_metadataRuntimeErrormetadata_fullr   r   userdata_rawvendordata_raw)r'   mdr*   r*   r+   	_get_data-   s   zDataSourceNWCS._get_datac                 C   s   z3t d t| jt dtd id t| j| j	| j
| jdW  d    W S 1 s,w   Y  W d S  ttjttjfyL } zt d|  d }~ww )Nz#Attempting to get metadata via DHCPurlz/metadata/instance-id)ifaceconnectivity_url_datar   sec_betweenr   zDHCP failure: %s)LOGinfor   r   r   find_fallback_nicBASE_URL_V1read_metadatar   r   r   r   r
   r   ProcessExecutionErrorr1   r   RequestExceptionerror)r'   er*   r*   r+   r0   @   s2   
(zDataSourceNWCS.get_metadatac                 C   s   t d | jd u rt dtj tj| _| jtjkr| jS | jd d s)td| jd d D ]}t|d }|rGt 	d|d | ||d< q0| jd | _| jS )	Nz Attempting network configurationz5Found None as cached _network_config, resetting to %sr,   configz"Unable to get metadata from servermac_addresszOverriding %s with %sname)
r<   debugr$   warningr   r#   r   r1   get_interface_namer=   )r'   i
iface_namer*   r*   r+   network_config[   s&   

zDataSourceNWCS.network_configc                   C   s   dt dkS )Nr   zsystem-manufacturer)r   read_dmi_datar*   r*   r*   r+   	ds_detectx   s   zDataSourceNWCS.ds_detectN)__name__
__module____qualname__dsnamer   r6   r0   propertyrM   staticmethodrO   r*   r*   r*   r+   r      s    
r   c                 C   s   t  }| |vr
d S || S N)r   get_interfaces_by_macr   )macmacs_to_nicr*   r*   r+   rJ   }   s   
rJ   c                 C   s   t | tS rV   )r   list_from_dependsdatasources)dependsr*   r*   r+   get_datasource_list   s   r]      c                 C   s6   t j| |||d}| std|  t|j S )Nr:   zunable to read metadata at %s)r   readurlokr1   r	   	load_jsoncontentsdecode)r7   r   r;   r   responser*   r*   r+   r@      s   r@   N)r^   r^   r   )requestsr   	cloudinitr   r   loggingr   r   r   r   r	   cloudinit.net.dhcpr
   cloudinit.net.ephemeralr   	getLoggerrP   r<   r?   r   r    r!   r"   r   r   rJ   r]   r@   DEP_FILESYSTEMr[   r*   r*   r*   r+   <module>   s&   
e


