
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
\me                 @   s   d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	 d dl
mZ e jeZddiZd	Zd
Zd
ZG dd dejZG dd deZeejffeejejffgZdd ZdS )    N)net)sourcesutil)NoDHCPLeaseError)EphemeralDHCPv4)upcloudmetadata_urlz'http://169.254.169.254/metadata/v1.json      c               @   sH   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	e
dd ZdS )DataSourceUpCloudUpCloudFc             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| _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   _network_config)selfsys_cfgr   paths r   '/usr/lib/python3.6/DataSourceUpCloud.pyr   "   s    
zDataSourceUpCloud.__init__c             C   s   t j S )N)	uc_helperZread_sysinfo)r   r   r   r    _get_sysinfo2   s    zDataSourceUpCloud._get_sysinfoc             C   s   t j| j| j| j| jdS )N)r   Zsec_betweenr   )r!   Zread_metadatar   r   r   r   )r   r   r   r    _read_metadata5   s
    z DataSourceUpCloud._read_metadatac             C   s  | j  \}}|sdS tjd| | jryNtjd tj }tjd| t| j| t	j
tjd| jd}W d Q R X W n6 ttjfk
r } zt	jtt| dS d }~X nX ndy"tjd t	j
tjd| jd}W n@ tjk
r } z t	jtt| tjd| dS d }~X nX || _|jd	|| jd
< |jd| jd< |jd| jd< |jd| jd< |jdd| jd< |jdd | _|jdd | _dS )NFz"Running on UpCloud. server_uuid=%szFinding a fallback NICz*Discovering metadata via DHCP interface %szReading from metadata service)Zlogfuncmsgfuncz7Discovering metadata without DHCP-configured networkingzENo DHCP-enabled interfaces available, unable to fetch metadata for %sZinstance_idzinstance-idZhostnamezlocal-hostnamenetworkZpublic_keyszpublic-keysZregiondefaultZavailability_zoneZvendor_dataZ	user_dataT)r"   LOGinfoperform_dhcp_setupdebugcloudnetZfind_fallback_nicr   r   r   Zlog_timer#   r   r   ZInvalidMetaDataExceptionZlogexcstrZmetadata_fullr   r   Zvendordata_rawZuserdata_raw)r   Z
is_upcloudZserver_uuidZnicZmder   r   r    	_get_data=   sN    
zDataSourceUpCloud._get_datac             C   s   t j| j S )N)r   Zinstance_id_matches_system_uuidZget_instance_id)r   r   r   r   r    check_instance_idr   s    z#DataSourceUpCloud.check_instance_idc             C   s6   | j r| j S | jjd}|s$tdtj|| _ | j S )z
        Configure the networking. This needs to be done each boot,
        since the IP and interface information might have changed
        due to reconfiguration.
        r&   z/Unable to get network meta-data from server....)r   r   r   RuntimeErrorr!   Zconvert_network_config)r   Zraw_network_configr   r   r    network_configu   s    z DataSourceUpCloud.network_configN)__name__
__module____qualname__Zdsnamer*   r   r"   r#   r/   r0   propertyr2   r   r   r   r    r      s   5r   c               @   s   e Zd ZdZdZdS )DataSourceUpCloudLocalaz  
    Run in init-local using a DHCP discovery prior to metadata crawl.

    In init-local, no network is available. This subclass sets up minimal
    networking with dhclient on a viable nic so that it can talk to the
    metadata service. If the metadata service provides network configuration
    then render the network configuration for that instance based on metadata.
    TN)r3   r4   r5   __doc__r*   r   r   r   r    r7      s   r7   c             C   s   t j| tS )N)r   Zlist_from_dependsdatasources)Zdependsr   r   r    get_datasource_list   s    r:   )ZloggingZ	cloudinitr   r,   r   r   Zcloudinit.net.dhcpr   Zcloudinit.net.ephemeralr   Zcloudinit.sources.helpersr   r!   Z	getLoggerr3   r(   r   r   r   r   r   r   r7   ZDEP_FILESYSTEMZDEP_NETWORKr9   r:   r   r   r   r    <module>   s   
r
