
    x[h                         S r SSKrSSKJs  Js  Jr  SSKJrJ	r	JrJ
r
  SSKJr  SSKJr  \R                  " \5      rSr\S-   \S-   S	.rS
rSrSr " S S\R.                  5      rS r\\R4                  44/rS rg)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                   :    \ rS rSrSrS rS rS r\S 5       r	Sr
g)	DataSourceHetzner   Hetznerc                 p   [         R                  R                  XX#5        X l        [	        5       U l        [        R                  " [        R                  " USS/0 5      [        /5      U l
        U R                  S   U l        U R                  S   U l        U R                  R                  S[        5      U l        U R                  R                  S[         5      U l        U R                  R                  S[$        5      U l        [         R(                  U l        [         R,                  U l        S U l        g )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   DataSourceHetzner.__init__"   s    ##D6A(($$W|Y.GL!
 !%N ; $N ;{{y*={{y*=++//,F&}},,!    c                    [        5       u  pU(       d  g [        U R                  [        R                  " 5       S[
        S-   0/S9   [        R                  " U R                  U R                  U R                  U R                  S9n[        R                  " U R                  U R                  U R                  U R                  S9nS S S 5        ["        R$                  " W5      U l        WU l        US   U R*                  S'   US   U R*                  S	'   UR-                  S
S 5      U R*                  S
'   UR-                  SS 5      U R*                  S'   UR-                  SS 5      U l        U R1                  5       U:w  a  [3        S5      eg! , (       d  f       N= f! [         a  n[        R!                  SU5        e S nAff = f)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_dataDataSourceHetzner._get_data5   s   .0	 ++- {-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	s6   2F A?F
F 

FF F 
G%F<<Gc                 L    [         R                  " U R                  5       S5      $ )Nsystem-serial-number)r   instance_id_matches_system_uuidrC   )r*   r+   s     r-   check_instance_id#DataSourceHetzner.check_instance_idp   s$    66  "$:
 	
r/   c                 H   U R                   c9  [        R                  S[        R                  5        [        R                  U l         U R                   [        R                  :w  a  U R                   $ U R
                  S   nU(       d  [        S5      eXl         U R                   $ )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 %sr6   z'Unable to get meta-data from server....)r&   r>   warningr   r%   r   rD   )r*   _net_configs     r-   network_config DataSourceHetzner.network_configu   s     'KKG $+==D 7==0'''mm$45HII*###r/   )r&   r   r   r(   r   r   r)   r   r   r    rA   rB   r   N)__name__
__module____qualname____firstlineno__dsnamer   rJ   rO   propertyrT   __static_attributes__ r/   r-   r   r      s+    F"&9v

 $ $r/   r   c                      [         R                  " S5      n U S:w  a  g[         R                  " S5      nU(       a  [        R                  SU5        SU4$ [	        S5      e)Nzsystem-manufacturerr   )FNrM   z#Running on Hetzner Cloud: serial=%sz+Hetzner Cloud detected, but no serial foundT)r   read_dmi_datar>   debugrD   )vendor_namerF   s     r-   r8   r8      s[    ##$9:Ki56F		7@ &> HIIr/   c                 8    [         R                  " U [        5      $ )N)r   list_from_dependsdatasources)dependss    r-   get_datasource_listrf      s    $$Wk::r/   )__doc__logging!cloudinit.sources.helpers.hetznerr   helpershetznerr;   	cloudinitr   r   r   cloudinit.net.dhcpr   cloudinit.net.ephemeralr   	getLoggerrV   r>   r:   r   r"   r#   r$   r   r   r8   DEP_FILESYSTEMrd   rf   r]   r/   r-   <module>rq      s     5 5 - - / 3!1  +-+- 
 

n$** n$b  //12;r/   