o
    fp                     @   s   d dl Z d dlmZ d dlmZ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 )    N)
exceptions)dminetsourcessubp
url_helperutil)NoDHCPLeaseError)EphemeralDHCPv4zhttp://169.254.169.254/api/v1metadata_urlz	/metadata      c                       sZ   e Zd ZdZdd Zdeddf fddZd	d
 Zdd Ze	dd Z
edd Z  Z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 | _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metadata_full)selfsys_cfgr   paths r*   B/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceNWCS.pyr      s   
zDataSourceNWCS.__init__ci_pkl_versionreturnNc                    s"   t  | | jstj| _d S d S N)super	_unpickler#   r   r"   )r'   r,   	__class__r*   r+   r0   0   s   zDataSourceNWCS._unpicklec                 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RuntimeErrorr&   r   r   userdata_rawvendordata_raw)r'   mdr*   r*   r+   	_get_data5   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   ProcessExecutionErrorr8   r   RequestExceptionerror)r'   er*   r*   r+   r7   H   s2   
(zDataSourceNWCS.get_metadatac                 C   s   t d | jtjkr| jS | jd d std| jd d D ]}t|d }|r7t d|d | ||d< q | jd | _| jS )Nz Attempting network configurationr3   configz"Unable to get metadata from servermac_addresszOverriding %s with %sname)	rB   debugr#   r   r"   r   r8   get_interface_namerC   )r'   i
iface_namer*   r*   r+   network_configc   s   
zDataSourceNWCS.network_configc                   C   s   dt dkS )Nr   zsystem-manufacturer)r   read_dmi_datar*   r*   r*   r+   	ds_detecty   s   zDataSourceNWCS.ds_detect)__name__
__module____qualname__dsnamer   intr0   r<   r7   propertyrR   staticmethodrT   __classcell__r*   r*   r1   r+   r      s    
r   c                 C   s   t  }| |vr
d S || S r.   )r   get_interfaces_by_macr   )macmacs_to_nicr*   r*   r+   rO   ~   s   
rO   c                 C   s   t | tS r.   )r   list_from_dependsdatasources)dependsr*   r*   r+   get_datasource_list   s   rc      c                 C   s6   t j| |||d}| std|  t|j S )Nr@   zunable to read metadata at %s)r   readurlokr8   r   	load_jsoncontentsdecode)r=   r   rA   r   responser*   r*   r+   rF      s   rF   )rd   rd   r   )loggingrequestsr   	cloudinitr   r   r   r   r   r   cloudinit.net.dhcpr	   cloudinit.net.ephemeralr
   	getLoggerrU   rB   rE   r   r   r    r!   r   r   rO   rc   rF   DEP_FILESYSTEMra   r*   r*   r*   r+   <module>   s$    
d


