
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
\me                 @   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 j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               @   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j| ||| || _t | _tjtj|ddgi t	g| _
| j
d | _| j
jdt| _| j
jdt| _| j
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"   $/usr/lib/python3.6/DataSourceNWCS.pyr      s    
zDataSourceNWCS.__init__c             C   sv   | j  }|d krtd|| _|d | jd< |d | jd< |d | jd< |d | jd< |jdd | _|j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   yJt jd t| jtj dtd id t| j| j	| j
| jdS Q R X W n< ttjttjfk
r } zt jd|  W Y d d }~X 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%   B   s$    
zDataSourceNWCS.get_metadatac             C   s   t jd | jd kr*t jdtj tj| _| jtjkr<| jS | jd d sRtdx@| jd d D ].}t|d }|rbt j	d|d | ||d< qbW | jd | _| jS )	Nz Attempting network configurationz5Found None as cached _network_config, resetting to %sr$   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 jdkS )Nr   zsystem-manufacturer)r   Zread_dmi_datar"   r"   r"   r#   	ds_detectz   s    zDataSourceNWCS.ds_detectN)__name__
__module____qualname__Zdsnamer   r'   r%   propertyr5   staticmethodr6   r"   r"   r"   r#   r      s   r   c             C   s   t j }| |krd S |j| S )N)r   Zget_interfaces_by_macr   )ZmacZmacs_to_nicr"   r"   r#   r3      s    r3   c             C   s   t j| tS )N)r   Zlist_from_dependsdatasources)Zdependsr"   r"   r#   get_datasource_list   s    r=      c             C   s6   t j| |||d}|j s&td|  tj|jj S )N)r   r)   r   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-   )r>   r>   r   )ZloggingZrequestsr   Z	cloudinitr   r   r   r   r   r   Zcloudinit.net.dhcpr	   Zcloudinit.net.ephemeralr
   Z	getLoggerr7   r*   r,   r   r   r   r   r   r   r3   r=   r-   ZDEP_FILESYSTEMr<   r"   r"   r"   r#   <module>   s    
e

