
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
\meB                 @   s   d Z ddlZddljjjZddlmZm	Z	mZm
Z
 ddlmZ ddlmZ ejeZdZed ed d	Zd
ZdZdZG dd dejZdd ZeejffgZdd ZdS )z>Hetzner Cloud API Documentation
   https://docs.hetzner.cloud/    N)dminetsourcesutil)NoDHCPLeaseError)EphemeralDHCPv4z!http://169.254.169.254/hetzner/v1z	/metadataz	/userdata)metadata_urluserdata_url<      c               @   s4   e Zd ZdZdd Zdd Zdd Zedd	 Zd
S )DataSourceHetznerHetznerc             C   s   t jj| ||| || _t | _tjtj|ddgi t	g| _
| j
d | _| j
d | _| j
jdt| _| j
jdt| _| j
jdt| _t j| _t j| _d S )NZ
datasourcer   r   r	   retriestimeout
wait_retry)r   
DataSource__init__distrodictmetadatar   ZmergemanydictZget_cfg_by_pathBUILTIN_DS_CONFIGZds_cfgmetadata_addressuserdata_addressget
MD_RETRIESr   
MD_TIMEOUTr   MD_WAIT_RETRYr   UNSET_network_configZDSMODE_NETWORKZdsmode)selfsys_cfgr   paths r"   '/usr/lib/python3.6/DataSourceHetzner.pyr   "   s    
zDataSourceHetzner.__init__c             C   s  t  \}}|sdS y`t| jtj dtd id: tj| j| j	| j
| jd}tj| j| j	| j
| jd}W d Q R X W n0 tk
r } ztjd|  W Y d d }~X nX tj|| _|| _|d | jd< |d | jd	< |jd
d | jd
< |jdd | jd< |jdd | _| j |krtddS )NFZurlz/metadata/instance-id)ZifaceZconnectivity_url_data)r   Zsec_betweenr   zBailing, DHCP Exception: %szinstance-idZhostnamezlocal-hostnameznetwork-configzpublic-keysZvendor_dataz6SMBIOS serial does not match instance ID from metadataT)get_hcloud_datar   r   r   Zfind_fallback_nicBASE_URL_V1	hc_helperZread_metadatar   r   r   r   Zread_userdatar   r   LOGerrorr   Zmaybe_b64decodeZuserdata_rawZmetadata_fullr   r   Zvendordata_rawget_instance_idRuntimeError)r   Z
on_hetznerserialZmdZuder"   r"   r#   	_get_data4   s@    

	zDataSourceHetzner._get_datac             C   s   t j| j dS )Nzsystem-serial-number)r   Zinstance_id_matches_system_uuidr)   )r   r    r"   r"   r#   check_instance_idm   s    z#DataSourceHetzner.check_instance_idc             C   sT   | j dkr tjdtj tj| _ | j tjkr2| j S | jd }|sHtd|| _ | j S )zConfigure the networking. This needs to be done each boot, since
        the IP information may have changed due to snapshot and/or
        migration.
        Nz5Found None as cached _network_config. Resetting to %sznetwork-configz'Unable to get meta-data from server....)r   r'   Zwarningr   r   r   r*   )r   Z_net_configr"   r"   r#   network_configr   s    

z DataSourceHetzner.network_configN)	__name__
__module____qualname__Zdsnamer   r-   r.   propertyr/   r"   r"   r"   r#   r      s
   9r   c              C   sB   t jd} | dkrdS t jd}|r2tjd| ntdd|fS )	Nzsystem-manufacturerr   Fzsystem-serial-numberz#Running on Hetzner Cloud: serial=%sz+Hetzner Cloud detected, but no serial foundT)FN)r   Zread_dmi_datar'   debugr*   )Zvendor_namer+   r"   r"   r#   r$      s    

r$   c             C   s   t j| tS )N)r   Zlist_from_dependsdatasources)Zdependsr"   r"   r#   get_datasource_list   s    r6   )__doc__ZloggingZ!cloudinit.sources.helpers.hetznerr   ZhelpersZhetznerr&   Z	cloudinitr   r   r   Zcloudinit.net.dhcpr   Zcloudinit.net.ephemeralr   Z	getLoggerr0   r'   r%   r   r   r   r   r   r   r$   ZDEP_FILESYSTEMr5   r6   r"   r"   r"   r#   <module>   s    
n