509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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 )zŸConfigure 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