
    x[h                         d Z ddlZddlmc mc m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z   edz   d	Zd
ZdZdZ G d dej.                        Zd Zeej4                  ffgZd Zy)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                   2    e Zd ZdZd Zd Zd Zed        Zy)DataSourceHetznerHetznerc                 r   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 | _        y )N
datasourcer   r	   r
   retriestimeout
wait_retry)r   
DataSource__init__distrodictmetadatar   mergemanydictget_cfg_by_pathBUILTIN_DS_CONFIGds_cfgmetadata_addressuserdata_addressget
MD_RETRIESr   
MD_TIMEOUTr   MD_WAIT_RETRYr   UNSET_network_configDSMODE_NETWORKdsmodemetadata_full)selfsys_cfgr   pathss       E/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceHetzner.pyr   zDataSourceHetzner.__init__"   s    ##D'65A(($$W|Y.GL!
 !%N ; $N ;{{y*={{y*=++//,F&}},,!    c                 |   t               \  }}|sy	 t        | j                  t        j                         dt
        dz   ig      5  t        j                  | j                  | j                  | j                  | j                        }t        j                  | j                  | j                  | j                  | j                        }d d d        t#        j$                        | _        | _        |d   | j*                  d<   |d   | j*                  d	<   |j-                  d
d       | j*                  d
<   |j-                  dd       | j*                  d<   |j-                  dd       | _        | j1                         |k7  rt3        d      y# 1 sw Y   xY w# t        $ r}t        j!                  d|        d }~ww xY w)NFurlz/metadata/instance-id)ifaceconnectivity_urls_data)r   sec_betweenr   zBailing, DHCP Exception: %szinstance-idhostnamezlocal-hostnamenetwork-configzpublic-keysvendor_dataz6SMBIOS serial does not match instance ID from metadataT)get_hcloud_datar   r   r   find_fallback_nicBASE_URL_V1	hc_helperread_metadatar   r   r   r   read_userdatar   r   LOGerrorr   maybe_b64decodeuserdata_rawr(   r   r    vendordata_rawget_instance_idRuntimeError)r)   
on_hetznerserialmdudes         r,   	_get_datazDataSourceHetzner._get_data5   s   .0V	 ++- {-DD(  ,,)) LL $ LL	 ,,)) LL $ LL	@ !004
 (*-'8m$*,Z.&'*,&&1A4*H&'')vvmT'Bm$ ff]D9 !V+H  e *   	II3Q7	s0   4F BF
	F 
FF 	F;F66F;c                 J    t        j                  | j                         d      S )Nsystem-serial-number)r   instance_id_matches_system_uuidrA   )r)   r*   s     r,   check_instance_idz#DataSourceHetzner.check_instance_idp   s$    66  "$:
 	
r-   c                 <   | j                   9t        j                  dt        j                         t        j                  | _         | j                   t        j                  k7  r| j                   S | j
                  d   }|st        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.
        z5Found None as cached _network_config. Resetting to %sr4   z'Unable to get meta-data from server....)r%   r<   warningr   r$   r   rB   )r)   _net_configs     r,   network_configz DataSourceHetzner.network_configu   s     'KKG $+==D 7==0'''mm$45HII*###r-   N)	__name__
__module____qualname__dsnamer   rH   rL   propertyrP    r-   r,   r   r      s+    F"&9v

 $ $r-   r   c                      t        j                  d      } | dk7  ryt        j                  d      }|rt        j                  d|       d|fS t	        d      )Nzsystem-manufacturerr   )FNrJ   z#Running on Hetzner Cloud: serial=%sz+Hetzner Cloud detected, but no serial foundT)r   read_dmi_datar<   debugrB   )vendor_namerD   s     r,   r6   r6      s[    ##$9:Ki56F		7@ &> HIIr-   c                 6    t        j                  | t              S )N)r   list_from_dependsdatasources)dependss    r,   get_datasource_listr_      s    $$Wk::r-   )__doc__logging!cloudinit.sources.helpers.hetznerr   helpershetznerr9   	cloudinitr   r   r   cloudinit.net.dhcpr   cloudinit.net.ephemeralr   	getLoggerrQ   r<   r8   r   r!   r"   r#   r   r   r6   DEP_FILESYSTEMr]   r_   rV   r-   r,   <module>rj      s     5 5 - - / 3g!1  +-+- 
 

n$** n$b  //12;r-   