U
    ¯Ad   ã                   @   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„ 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                   @   s4   e Zd ZdZdd„ Zdd„ Z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   s¢   t  d¡ tƒ }|s"t  d¡ dS t  d¡ |  ¡ }|d krDtdƒ‚|| _|d | jd< |d | jd< |d | jd< |d	 | jd
< | dd ¡| _| dd ¡| _	dS )Nz'Detecting if machine is a NWCS instancezMachine is not a NWCS instanceFzMachine is a NWCS instancezfailed to get metadatazinstance-idzpublic-keysÚnetworkZhostnamezlocal-hostnameZuserdataZ
vendordataT)
ÚLOGÚinfoÚget_nwcs_dataÚget_metadataÚ	ExceptionZmetadata_fullr   r   Zuserdata_rawZvendordata_raw)r!   Zon_nwcsZmdr#   r#   r$   Ú	_get_data-   s"    


zDataSourceNWCS._get_datac                 C   s–   zTt  d¡ t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)r&   r'   r   r   Zfind_fallback_nicÚBASE_URL_V1Úread_metadatar   r   r   r   r
   r   ZProcessExecutionErrorÚRuntimeErrorr   ZRequestExceptionÚerror)r!   Úer#   r#   r$   r)   I   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_configc   s$    

þ
zDataSourceNWCS.network_configN)	Ú__name__Ú
__module__Ú__qualname__Zdsnamer   r+   r)   Úpropertyr8   r#   r#   r#   r$   r      s   r   c                  C   s   t  d¡} | dkrdS dS )Nzsystem-manufacturerr   FT)r   Zread_dmi_data)Zvendor_namer#   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$   r6   Š   s    r6   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Úokr1   r	   Z	load_jsonÚcontentsÚdecode)r,   r   r.   r   Zresponser#   r#   r$   r0   ˜   s       ÿr0   N)r@   r@   r   )Zrequestsr   Z	cloudinitr   r   Zloggingr   r   r   r   r	   Zcloudinit.net.dhcpr
   Zcloudinit.net.ephemeralr   Z	getLoggerr9   r&   r/   r   r   r   r   r   r   r(   r6   r?   r0   ZDEP_FILESYSTEMr>   r#   r#   r#   r$   Ú<module>   s(   
 ÿi	


ÿ