o
    x[h¡  ã                   @   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œ   z4t  d¡ t| jt ¡ dtd ig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yM } zt  d|¡ ‚ d }~ww )Nz#Attempting to get metadata via DHCPÚurlz/metadata/instance-id)ÚifaceÚconnectivity_urls_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   s4   
ÿÿý	ü(÷ü€ù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_confige   s   
€zDataSourceNWCS.network_configc                   C   s   dt  d¡kS )Nr   zsystem-manufacturer)r   Úread_dmi_datar*   r*   r*   r+   Ú	ds_detect{   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$    
ÿf


ÿ