3 \meB@sdZddlZddljjjZddlmZm Z mZm Z ddl m Z ddl mZejeZdZededd 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) DataSourceHetznerHetznercCstjj||||||_t|_tjtj|ddgit g|_ |j d|_ |j d|_ |j j dt|_|j j dt|_|j j dt|_tj|_tj|_dS)NZ datasourcer rr retriestimeout wait_retry)r DataSource__init__distrodictmetadatarZ mergemanydictZget_cfg_by_pathBUILTIN_DS_CONFIGZds_cfgmetadata_addressuserdata_addressget MD_RETRIESr MD_TIMEOUTr MD_WAIT_RETRYrUNSET_network_configZDSMODE_NETWORKZdsmode)selfsys_cfgrpathsr"'/usr/lib/python3.6/DataSourceHetzner.pyr"s   zDataSourceHetzner.__init__cCst\}}|sdSy`t|jtjdtdid:tj|j|j |j |j d}tj |j |j |j |j d}WdQRXWn0tk r}ztjd|WYdd}~XnXtj||_||_|d|jd<|d|jd <|jd d|jd <|jd d|jd <|jd d|_|j|krtd dS)NFZurlz/metadata/instance-id)ZifaceZconnectivity_url_data)rZ sec_betweenrzBailing, DHCP Exception: %sz instance-idZhostnamezlocal-hostnameznetwork-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_userdatarrLOGerrorrZmaybe_b64decodeZ userdata_rawZ metadata_fullrrZvendordata_rawget_instance_id RuntimeError)rZ on_hetznerserialZmdZuder"r"r# _get_data4s@    zDataSourceHetzner._get_datacCstj|jdS)Nzsystem-serial-number)rZinstance_id_matches_system_uuidr))rr r"r"r#check_instance_idmsz#DataSourceHetzner.check_instance_idcCsT|jdkr tjdtjtj|_|jtjkr2|jS|jd}|sHtd||_|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 %sznetwork-configz'Unable to get meta-data from server....)rr'Zwarningrrrr*)rZ _net_configr"r"r#network_configrs   z DataSourceHetzner.network_configN) __name__ __module__ __qualname__Zdsnamerr-r.propertyr/r"r"r"r#r s 9r cCsBtjd}|dkrdStjd}|r2tjd|ntdd|fS) Nzsystem-manufacturerr Fzsystem-serial-numberz#Running on Hetzner Cloud: serial=%sz+Hetzner Cloud detected, but no serial foundT)FN)rZ read_dmi_datar'debugr*)Z vendor_namer+r"r"r#r$s  r$cCs tj|tS)N)rZlist_from_depends datasources)Zdependsr"r"r#get_datasource_listsr6)__doc__ZloggingZ!cloudinit.sources.helpers.hetznerrZhelpersZhetznerr&Z cloudinitrrrZcloudinit.net.dhcprZcloudinit.net.ephemeralrZ getLoggerr0r'r%rrrrrr r$ZDEP_FILESYSTEMr5r6r"r"r"r#s     n