Ë
    ƒtÖhx$  ã                   ó  — 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
mZ ddlmZmZ ddlmZ ddlmZ  ej&                  e«      Zddd	d
œZdZdZdZdZdZdZd„ Z G d„ dej<                  «      Zd„ Z eejB                  ffgZ"d„ Z#y)z;Hetzner Cloud API Documentation
https://docs.hetzner.cloud/é    N)ÚdmiÚnetÚsourcesÚ
url_helperÚutil)Ú
EventScopeÚ	EventType)ÚNoDHCPLeaseError)ÚEphemeralIPNetworkÚmetadatazmetadata/private-networksÚuserdata)Úmetadata_pathÚmetadata_private_networks_pathÚuserdata_pathé<   é   éx   zU
SUBSYSTEM=="net", ATTR{address}=="86:*", GOTO="cloudinit_hook"
GOTO="cloudinit_end"
c                  ó6   — dt        j                  «       › ddfS )Nzhttp://[fe80::a9fe:a9fe%25z]/hetzner/v1/z"http://169.254.169.254/hetzner/v1/)r   Úfind_fallback_nic© ó    úE/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceHetzner.pyÚbase_urls_v1r   '   s%   € à
$¤S×%:Ñ%:Ó%<Ð$=¸]ÐKØ,ðð r   c                   ó¬   ‡ — e Zd ZdZej
                  ej                  ej                  ej                  hiZ
d„ Zdeddfˆ fd„Zd„ Zd„ Zed	„ «       Zˆ xZS )
ÚDataSourceHetznerÚHetznerc                 ó4  — t         j                  j                  | |||«       || _        i | _        t        j                  t        j                  |ddgi «      t        g«      | _	        | j                  d   | _
        | j                  d   | _        | j                  d   | _        | j                  j                  dt        «      | _        | j                  j                  dt         «      | _        | j                  j                  dt$        «      | _        | j                  j                  d	t(        «      | _        | j                  j                  d
t,        «      | _        t         j0                  | _        t         j4                  | _        d | _        t:        | _        y )NÚ
datasourcer   r   r   r   ÚretriesÚtimeoutÚ
wait_retryÚmax_waitÚ
sleep_time)r   Ú
DataSourceÚ__init__Údistror   r   ÚmergemanydictÚget_cfg_by_pathÚBUILTIN_DS_CONFIGÚds_cfgr   r   r   ÚgetÚ
MD_RETRIESr   Ú
MD_TIMEOUTr    ÚMD_WAIT_RETRYr!   ÚMD_MAX_WAITr"   ÚMD_SLEEP_TIMEr#   ÚUNSETÚ_network_configÚDSMODE_NETWORKÚdsmodeÚmetadata_fullÚEXTRA_HOTPLUG_UDEV_RULESÚextra_hotplug_udev_rules)ÚselfÚsys_cfgr&   Úpathss       r   r%   zDataSourceHetzner.__init__9   s,  € Ü×Ñ×#Ñ# D¨'°6¸5ÔAØˆŒØˆŒÜ×(Ñ(ä×$Ñ$ W¨|¸YÐ.GÈÓLÜ!ðó
ˆŒð "Ÿ[™[¨Ñ9ˆÔØ.2¯k©kØ,ñ/
ˆÔ+ð "Ÿ[™[¨Ñ9ˆÔØ—{‘{—‘ y´*Ó=ˆŒØ—{‘{—‘ y´*Ó=ˆŒØŸ+™+Ÿ/™/¨,¼ÓFˆŒØŸ™Ÿ™¨
´KÓ@ˆŒØŸ+™+Ÿ/™/¨,¼ÓFˆŒÜ&Ÿ}™}ˆÔÜ×,Ñ,ˆŒØ!ˆÔä(@ˆÕ%r   Úci_pkl_versionÚreturnNc                 ó  •— t         ‰|   |«       t        | _        | j                  j                  dt        «      | _        | j                  j                  dt        «      | _	        | j                  j                  dt        «      | _        | j                  d   | _        | j                  d   | _        | j                  d   | _        y )Nr!   r"   r#   r   r   r   )ÚsuperÚ	_unpickler6   r7   r*   r+   r.   r!   r/   r"   r0   r#   r   r   r   )r8   r;   Ú	__class__s     €r   r?   zDataSourceHetzner._unpickleS   s’   ø€ Ü‰Ñ˜.Ô)Ü(@ˆÔ%ØŸ+™+Ÿ/™/¨,¼ÓFˆŒØŸ™Ÿ™¨
´KÓ@ˆŒØŸ+™+Ÿ/™/¨,¼ÓFˆŒØ!Ÿ[™[¨Ñ9ˆÔØ.2¯k©kØ,ñ/
ˆÔ+ð "Ÿ[™[¨Ñ9ˆÕr   c                 ó  — t        «       \  }}|syt        «       }	 t        | j                  t	        j
                  «       dd|D cg c]'  }dt        j                  || j                  › d«      i‘Œ) c}¬«      5  t        j                  |D cg c]"  }t        j                  || j                  «      ‘Œ$ c}| j                  | j                  | j                  ¬«      \  }}t        j                  d|«       t!        j"                  |j%                  «       t&        t(        f¬«      }t        j                  |D cg c]"  }t        j                  || j*                  «      ‘Œ$ c}| j                  | j                  | j                  ¬«      \  }}t        j                  d	|«       t!        j"                  |j%                  «       t&        t(        f¬«      |d
<   t        j                  |D cg c]"  }t        j                  || j,                  «      ‘Œ$ c}| j                  | j                  | j                  ¬«      \  }}t        j                  d|«       |st        j                  d«       d d d «       t!        j2                  «      | _        | _        |d   | j8                  d<   |d   | j8                  d<   |j;                  dd «      | j8                  d<   |j;                  dd «      | j8                  d<   |j;                  d
g «      | j8                  d
<   |j;                  dd «      | _        | j?                  «       |k7  rtA        d«      ‚yc c}w c c}w c c}w c c}w # 1 sw Y   ŒõxY w# t.        $ r}t        j1                  d|«       ‚ d }~ww xY w)NFTÚurlz/instance-id)Ú	interfaceÚipv4Úipv6Úconnectivity_urls_data)r"   r    r#   zUsing metadata source: '%s')Úallowedz#Using private_networks source: '%s'úprivate-networkszUsing userdata source: '%s'zGot empty userdatazBailing, DHCP Exception: %szinstance-idÚhostnamezlocal-hostnameúnetwork-configzpublic-keysÚvendor_dataz6SMBIOS serial does not match instance ID from metadata)!Úget_hcloud_datar   r   r&   r   r   r   Úcombine_urlr   Ú	hc_helperÚget_metadatar"   r    r#   ÚLOGÚdebugr   Ú	load_yamlÚdecodeÚdictÚlistr   r   r
   ÚerrorÚmaybe_b64decodeÚuserdata_rawr5   r   r+   Úvendordata_rawÚget_instance_idÚRuntimeError)	r8   Ú
on_hetznerÚserialÚ	base_urlsrB   ÚcontentsÚmdÚudÚes	            r   Ú	_get_datazDataSourceHetzner._get_data_   s.  € Ü.Ó0ÑˆVáØä “Nˆ	ð7	Ü#Ø—‘Ü×/Ñ/Ó1ØØð  )ö(ð ð	 œz×5Ñ5Ø D×$6Ñ$6Ð#7°|Ð!Dó òò(ôñ 34ô !*× 6Ñ 6ð $-öàô #×.Ñ.¨s°D×4FÑ4FÕGòð "Ÿ]™]Ø ŸL™LØ#Ÿ™ô!‘Xô —	‘	Ð7¸Ô=Ü—^‘^ H§O¡OÓ$5ÄÄd¸|ÔLÜ )× 6Ñ 6ð
 $-ö	ð  ô #×.Ñ.Ø ×!DÑ!Dõòð "Ÿ]™]Ø ŸL™LØ#Ÿ™ô
!‘Xô —	‘	Ð?ÀÔEÜ)-¯©Ø—O‘OÓ%´´d¨|ô*Ð%Ñ&ô $×0Ñ0ð $-öàô #×.Ñ.¨s°D×4FÑ4FÕGòð "Ÿ]™]Ø ŸL™LØ#Ÿ™ô‘Rô —	‘	Ð7¸Ô=ÙÜ—I‘IÐ2Ô3÷g34ô~ !×0Ñ0°Ó4ˆÔØˆÔð
 (*¨-Ñ'8ˆ‰mÑ$Ø*,¨Z©.ˆ‰Ð&Ñ'Ø*,¯&©&Ð1AÀ4Ó*Hˆ‰Ð&Ñ'Ø')§v¡v¨m¸TÓ'Bˆ‰mÑ$Ø,.¯F©FÐ3EÀrÓ,Jˆ‰Ð(Ñ)Ø Ÿf™f ]°DÓ9ˆÔð ×ÑÓ! VÒ+ÜØHóð ð ùò[(ùòùòùò÷S34ð 34ûôh  ò 	ÜI‰IÐ3°QÔ7Øûð	úsn   œ)M& Á,MÁ1M& Á9MÂ'M
Â4BMÄ8'M
ÅBMÇ&'M
ÈAMÉ&M& ÍM& ÍMÍM#ÍM& Í&	NÍ/NÎNc                 óJ   — t        j                  | j                  «       d«      S )Núsystem-serial-number)r   Úinstance_id_matches_system_uuidrZ   )r8   r9   s     r   Úcheck_instance_idz#DataSourceHetzner.check_instance_id»   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
                  j                  dg «      }g }|D ]5  }|j                  d|d   t        j                  |d   «      ddd	œgd
œ«       Œ7 |d   j                  |«       || _         | 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 %srJ   z'Unable to get meta-data from server....rH   ÚphysicalÚmac_addressTÚdhcp)rD   Útype)rl   rj   ÚnameÚsubnetsÚconfig)r2   rP   Úwarningr   r1   r   r[   r+   ÚappendrN   Úget_interface_name_from_macÚextend)r8   Ú
net_configÚprivate_networksÚprivate_networks_configÚprivate_networks        r   Únetwork_configz DataSourceHetzner.network_configÀ   s  € ð ×ÑÐ'ÜK‰KØGÜ—‘ôô $+§=¡=ˆDÔ à×Ñ¤7§=¡=Ò0Ø×'Ñ'Ð'à—]‘]Ð#3Ñ4ˆ
ÙÜÐHÓIÐIàŸ=™=×,Ñ,Ð-?ÀÓDÐØ"$ÐØ/ò 	ˆOØ#×*Ñ*à&Ø#2°=Ñ#AÜ%×AÑAØ'¨Ñ6óð
 %)Ø$*ñð ñõð	ð  	8Ñ×#Ñ#Ð$;Ô<Ø)ˆÔØ×#Ñ#Ð#r   )Ú__name__Ú
__module__Ú__qualname__Údsnamer   ÚNETWORKr	   ÚBOOT_NEW_INSTANCEÚBOOTÚHOTPLUGÚdefault_update_eventsr%   Úintr?   rc   rg   Úpropertyrx   Ú__classcell__)r@   s   @r   r   r   .   sr   ø„ Ø€Fð 	×ÑØ×'Ñ'ØN‰NØ×Ñð
ðÐòAð4
:¨ð 
:°õ 
:òZòx
ð
 ñ($ó ô($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   )FNre   z#Running on Hetzner Cloud: serial=%sz+Hetzner Cloud detected, but no serial foundT)r   Úread_dmi_datarP   rQ   r[   )Úvendor_namer]   s     r   rL   rL   ì   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ÚhetznerrN   Ú	cloudinitr   r   r   r   Úcloudinit.eventr   r	   Úcloudinit.net.dhcpr
   Úcloudinit.net.ephemeralr   Ú	getLoggerry   rP   r)   r,   r-   r.   r/   r0   r6   r   r$   r   rL   ÚDEP_FILESYSTEMrŠ   rŒ   r   r   r   ú<module>r˜      sª   ðñó ç 5Ó 5ß 9Õ 9ß 1Ý /Ý 6à€g×Ñ˜Ó!€ð  Ø&AØñÐ ð €
Ø€
Ø€Ø€Ø€ðÐ òô{$˜×*Ñ*ô {$ò|ð  ˜×/Ñ/Ð1Ð2ð€ó;r   