o x[h@sdZddlZddlmmmZddlmZm Z mZm Z ddl m Z ddl mZeeZdZededd Zd Zd Zd ZGd d d ejZddZeejffgZddZdS)z;Hetzner Cloud API Documentation https://docs.hetzner.cloud/N)dminetsourcesutil)NoDHCPLeaseError)EphemeralDHCPv4z!http://169.254.169.254/hetzner/v1z /metadataz /userdata) metadata_url userdata_url<c@s4eZdZdZddZddZddZedd Zd S) DataSourceHetznerHetznercCstj||||||_t|_tt|ddgit g|_ |j d|_ |j d|_ |j dt|_|j dt|_|j dt|_tj|_tj|_d|_dS)N datasourcer rr retriestimeout wait_retry)r DataSource__init__distrodictmetadatar mergemanydictget_cfg_by_pathBUILTIN_DS_CONFIGds_cfgmetadata_addressuserdata_addressget MD_RETRIESr MD_TIMEOUTr MD_WAIT_RETRYrUNSET_network_configDSMODE_NETWORKdsmode metadata_full)selfsys_cfgrpathsr)E/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceHetzner.pyr"s    zDataSourceHetzner.__init__c Cs(t\}}|s dSz;t|jtdtdigd"tj|j|j |j |j d}tj |j |j |j |j d}Wdn1s>wYWntyW}ztd|d}~wwt||_||_|d|jd<|d|jd <|d d|jd <|d d|jd <|d d|_||krtd dS)NFurlz/metadata/instance-id)ifaceconnectivity_urls_data)r sec_betweenrzBailing, DHCP Exception: %sz instance-idhostnamezlocal-hostnamenetwork-configz public-keys vendor_dataz6SMBIOS serial does not match instance ID from metadataT)get_hcloud_datarrrfind_fallback_nic BASE_URL_V1 hc_helper read_metadatarrrr read_userdatarrLOGerrorrmaybe_b64decode userdata_rawr%rrvendordata_rawget_instance_id RuntimeError)r& on_hetznerserialmduder)r)r* _get_data5sT     zDataSourceHetzner._get_datacCst|dS)Nsystem-serial-number)rinstance_id_matches_system_uuidr=)r&r'r)r)r*check_instance_idpsz#DataSourceHetzner.check_instance_idcCsT|jdurtdtjtj|_|jtjkr|jS|jd}|s$td||_|jS)zConfigure 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 %sr0z'Unable to get meta-data from server....)r"r8warningrr!rr>)r& _net_configr)r)r*network_configus   z DataSourceHetzner.network_configN) __name__ __module__ __qualname__dsnamerrDrGpropertyrJr)r)r)r*r s;r cCs@td}|dkr dStd}|rtd|d|fStd)Nzsystem-manufacturerr )FNrEz#Running on Hetzner Cloud: serial=%sz+Hetzner Cloud detected, but no serial foundT)r read_dmi_datar8debugr>) vendor_namer@r)r)r*r2s   r2cCs t|tS)N)rlist_from_depends datasources)dependsr)r)r*get_datasource_lists rV)__doc__logging!cloudinit.sources.helpers.hetznerrhelpershetznerr5 cloudinitrrrcloudinit.net.dhcprcloudinit.net.ephemeralr getLoggerrKr8r4rrrr rr r2DEP_FILESYSTEMrTrVr)r)r)r*s&   q