Ë
    }°„fa  ã                   óø   — 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¨'°6¸5ÔAØˆŒÜ›ˆŒÜ×(Ñ(ä×$Ñ$ W¨|¸YÐ.GÈÓLÜ!ðó
ˆŒð !%§¡¨NÑ ;ˆÔØ $§¡¨NÑ ;ˆÔØ—{‘{—‘ y´*Ó=ˆŒØ—{‘{—‘ y´*Ó=ˆŒØŸ+™+Ÿ/™/¨,¼ÓFˆŒÜ&Ÿ}™}ˆÔÜ×,Ñ,ˆŒØ!ˆÕó    c                 óz  — t        «       \  }}|sy	 t        | j                  t        j                  «       dt
        dz   i¬«      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_url_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áØð	Ü Ø—‘Ü×+Ñ+Ó-àœ;Ð)@Ñ@ð'ôñ ô ×,Ñ,Ø×)Ñ)Ø ŸL™LØ $§¡Ø ŸL™Lô	ô ×,Ñ,Ø×)Ñ)Ø ŸL™LØ $§¡Ø ŸL™Lô	÷ô< !×0Ñ0°Ó4ˆÔØˆÔð
 (*¨-Ñ'8ˆ‰mÑ$Ø*,¨Z©.ˆ‰Ð&Ñ'Ø*,¯&©&Ð1AÀ4Ó*Hˆ‰Ð&Ñ'Ø')§v¡v¨m¸TÓ'Bˆ‰mÑ$Ø Ÿf™f ]°DÓ9ˆÔð ×ÑÓ! VÒ+ÜØHóð ð ÷að ûô& !ò 	ÜI‰IÐ3°QÔ7Øûð	ús0   ’3F ÁBF	ÃF Æ	FÆF Æ	F:ÆF5Æ5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_idn   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 )zŸConfigure 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_configs   s„   € ð ×ÑÐ'ÜK‰KØGÜ—‘ôô $+§=¡=ˆDÔ à×Ñ¤7§=¡=Ò0Ø×'Ñ'Ð'à—m‘mÐ$4Ñ5ˆÙÜÐHÓIÐIà*ˆÔà×#Ñ#Ð#r-   N)	Ú__name__Ú
__module__Ú__qualname__Údsnamer   rH   rL   ÚpropertyrP   © r-   r,   r   r      s+   „ à€Fò"ò&7òr
ð
 ñ$ó ñ$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Ó6€FÙÜ	‰	Ð7¸Ô@ð &ˆ>Ðô ÐHÓIÐIr-   c                 ó6   — t        j                  | t        «      S )N)r   Úlist_from_dependsÚdatasources)Údependss    r,   Úget_datasource_listr_   ¢   s   € Ü×$Ñ$ W¬kÓ:Ð: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€ð   +Ñ-Ø +Ñ-ñÐ ð
 €
Ø€
Ø€ôl$˜×*Ñ*ô l$ò^ð  ˜×/Ñ/Ð1Ð2ð€ó;r-   