a '¡Dgã@s´dZddlZddlmmmZddlmZm Z mZm Z ddl m Z ddl mZe e¡ZdZededd œZd Zd Zd ZGd d „d ejƒZdd„ZeejffgZdd„ZdS)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@s4eZdZdZdd„Zdd„Zdd„Zedd „ƒZd S) ÚDataSourceHetznerÚHetznercCs tj ||||¡||_tƒ|_t t |ddgi¡t g¡|_ |j d|_ |j d|_ |j   dt¡|_|j   dt¡|_|j   dt¡|_tj|_tj|_d|_dS)NZ datasourcer rr ÚretriesÚtimeoutÚ wait_retry)rÚ DataSourceÚ__init__ÚdistroÚdictÚmetadatarZ mergemanydictZget_cfg_by_pathÚBUILTIN_DS_CONFIGZds_cfgÚmetadata_addressÚuserdata_addressÚgetÚ MD_RETRIESrÚ MD_TIMEOUTrÚ MD_WAIT_RETRYrÚUNSETÚ_network_configZDSMODE_NETWORKZdsmodeÚ metadata_full)ÚselfÚsys_cfgrÚpaths©r#úG/usr/lib/python3.9/site-packages/cloudinit/sources/DataSourceHetzner.pyr"s þÿ  zDataSourceHetzner.__init__c Cs6tƒ\}}|sdSzvt|jt ¡dtdigdDtj|j|j |j |j d}tj |j |j |j |j d}Wdƒn1s|0YWn2tyº}zt d|¡‚WYd}~n d}~00t |¡|_||_|d|jd<|d|jd <| d d¡|jd <| d d¡|jd <| d d¡|_| ¡|kr2td ƒ‚dS)NFÚurlz/metadata/instance-id)ZifaceZconnectivity_urls_data)rZ sec_betweenrzBailing, DHCP Exception: %sz instance-idÚhostnamezlocal-hostnameúnetwork-configz public-keysZ vendor_dataz6SMBIOS serial does not match instance ID from metadataT)Úget_hcloud_datarrrZfind_fallback_nicÚ BASE_URL_V1Ú hc_helperZ read_metadatarrrrZ read_userdatarrÚLOGÚerrorrZmaybe_b64decodeZ userdata_rawrrrZvendordata_rawÚget_instance_idÚ RuntimeError)r Z on_hetznerÚserialZmdZudÚer#r#r$Ú _get_data5sL ÿÿý üü(  ÿzDataSourceHetzner._get_datacCst | ¡d¡S)Núsystem-serial-number)rZinstance_id_matches_system_uuidr-)r r!r#r#r$Úcheck_instance_idpsÿz#DataSourceHetzner.check_instance_idcCsT|jdur t dtj¡tj|_|jtjkr2|jS|jd}|sHtdƒ‚||_|jS)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 %sr'z'Unable to get meta-data from server....)rr+Zwarningrrrr.)r Z _net_configr#r#r$Únetwork_configus þ  z DataSourceHetzner.network_configN) Ú__name__Ú __module__Ú __qualname__Zdsnamerr1r3Úpropertyr4r#r#r#r$r s ;r cCsBt d¡}|dkrdSt d¡}|r2t d|¡ntdƒ‚d|fS)Nzsystem-manufacturerr )FNr2z#Running on Hetzner Cloud: serial=%sz+Hetzner Cloud detected, but no serial foundT)rZ read_dmi_datar+Údebugr.)Z vendor_namer/r#r#r$r(s  r(cCs t |t¡S)N)rZlist_from_dependsÚ datasources)Zdependsr#r#r$Úget_datasource_list¤sr;)Ú__doc__ZloggingZ!cloudinit.sources.helpers.hetznerrZhelpersZhetznerr*Z cloudinitrrrZcloudinit.net.dhcprZcloudinit.net.ephemeralrZ getLoggerr5r+r)rrrrrr r(ZDEP_FILESYSTEMr:r;r#r#r#r$Ús$   þq ÿ