U
    Ӈg                     @   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                       sX   e Zd ZdZdd Zedd 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 )NZ
datasourcer   r   retriestimeout
wait_retry)r   
DataSource__init__distrodictmetadatar   ZmergemanydictZget_cfg_by_pathBUILTIN_DS_CONFIGZds_cfgmetadata_addressget
MD_RETRIESr   
MD_TIMEOUTr   MD_WAIT_RETRYr   UNSET_network_configZDSMODE_NETWORKZdsmodemetadata_full)selfZsys_cfgr   paths r#   B/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceNWCS.pyr      s    zDataSourceNWCS.__init__N)ci_pkl_versionreturnc                    s   t  | | jstj| _d S N)super	_unpickler   r   r   )r!   r%   	__class__r#   r$   r)   0   s    zDataSourceNWCS._unpicklec                 C   sv   |   }|d k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networkZhostnamezlocal-hostnameZuserdataZ
vendordataT)get_metadataRuntimeErrorr    r   r   Zuserdata_rawZvendordata_raw)r!   Zmdr#   r#   r$   	_get_data5   s    zDataSourceNWCS._get_datac                 C   s   zZt d t| jt dtd igd( t| j| j	| j
| jdW  5 Q R  W S Q R X W n< ttjttjfk
r } zt d|  W 5 d }~X Y nX d S )Nz#Attempting to get metadata via DHCPurlz/metadata/instance-id)ZifaceZconnectivity_urls_datar   sec_betweenr   zDHCP failure: %s)LOGinfor
   r   r   Zfind_fallback_nicBASE_URL_V1read_metadatar   r   r   r   r	   r   ZProcessExecutionErrorr.   r   ZRequestExceptionerror)r!   er#   r#   r$   r-   H   s0    
 	zDataSourceNWCS.get_metadatac                 C   s   t d | jtjkr| jS | jd d s2td| jd d D ].}t|d }|r@t d|d | ||d< q@| jd | _| jS )Nz Attempting network configurationr,   Zconfigz"Unable to get metadata from serverZmac_addresszOverriding %s with %sname)	r3   debugr   r   r   r   r.   get_interface_namer4   )r!   iZ
iface_namer#   r#   r$   network_confige   s    

zDataSourceNWCS.network_configc                   C   s   dt dkS )Nr   zsystem-manufacturer)r   Zread_dmi_datar#   r#   r#   r$   	ds_detect{   s    zDataSourceNWCS.ds_detect)__name__
__module____qualname__Zdsnamer   intr)   r/   r-   propertyr=   staticmethodr>   __classcell__r#   r#   r*   r$   r      s   
r   c                 C   s   t  }| |krd S || S r'   )r   Zget_interfaces_by_macr   )ZmacZmacs_to_nicr#   r#   r$   r;      s    r;   c                 C   s   t | tS r'   )r   Zlist_from_dependsdatasources)Zdependsr#   r#   r$   get_datasource_list   s    rG      c                 C   s6   t j| |||d}| s&td|  t|j S )Nr1   zunable to read metadata at %s)r   Zreadurlokr.   r   Z	load_jsoncontentsdecode)r0   r   r2   r   Zresponser#   r#   r$   r6      s       r6   )rH   rH   r   )ZloggingZrequestsr   Z	cloudinitr   r   r   r   r   r   Zcloudinit.net.dhcpr	   Zcloudinit.net.ephemeralr
   Z	getLoggerr?   r3   r5   r   r   r   r   r   r   r;   rG   r6   ZDEP_FILESYSTEMrF   r#   r#   r#   r$   <module>   s$    
 f


