U
    L¬÷dž  ã                   @   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 )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)ÚselfZsys_cfgr   Úpaths© r#   úB/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceNWCS.pyr      s    þÿzDataSourceNWCS.__init__c                 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ÚRuntimeErrorZmetadata_fullr   r   Zuserdata_rawZvendordata_raw)r!   Zmdr#   r#   r$   Ú	_get_data-   s    zDataSourceNWCS._get_datac                 C   sš   zXt  d¡ t| jt ¡ dtd i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_url_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&   @   s.    
 ÿýüüzDataSourceNWCS.get_metadatac                 C   s¢   t  d¡ | jd kr*t  dtj¡ tj| _| jtjkr<| jS | jd d sRtdƒ‚| jd d D ].}t|d ƒ}|r`t  	d|d |¡ ||d< q`| jd | _| jS )	Nz Attempting network configurationz5Found None as cached _network_config, resetting to %sr%   Zconfigz"Unable to get metadata from serverZmac_addresszOverriding %s with %sÚname)
r,   Údebugr    Zwarningr   r   r   r'   Úget_interface_namer-   )r!   ÚiZ
iface_namer#   r#   r$   Únetwork_config[   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_detectx   s    zDataSourceNWCS.ds_detectN)Ú__name__Ú
__module__Ú__qualname__Zdsnamer   r(   r&   Úpropertyr6   Ústaticmethodr7   r#   r#   r#   r$   r      s   
r   c                 C   s   t  ¡ }| |krd S | | ¡S ©N)r   Zget_interfaces_by_macr   )ZmacZmacs_to_nicr#   r#   r$   r4   }   s    r4   c                 C   s   t  | t¡S r=   )r   Zlist_from_dependsÚdatasources)Z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   ZreadurlÚokr'   r	   Z	load_jsonÚcontentsÚdecode)r)   r   r+   r   Zresponser#   r#   r$   r/   ‹   s       ÿr/   N)r@   r@   r   )Zrequestsr   Z	cloudinitr   r   Zloggingr   r   r   r   r	   Zcloudinit.net.dhcpr
   Zcloudinit.net.ephemeralr   Z	getLoggerr8   r,   r.   r   r   r   r   r   r   r4   r?   r/   ZDEP_FILESYSTEMr>   r#   r#   r#   r$   Ú<module>   s&   
 ÿe


ÿ