resource_tracker/collector/clouds/
hetzner.rs1use crate::metrics::CloudInfo;
2
3use super::{imds_get, new_imds_agent};
4
5pub fn probe() -> Option<CloudInfo> {
6 let agent = new_imds_agent();
7 let text = imds_get(&agent, "http://169.254.169.254/hetzner/v1/metadata")?;
8
9 let mut instance_type: Option<String> = None;
10 let mut region: Option<String> = None;
11 for line in text.lines() {
12 let line = line.trim();
13 if line.is_empty() {
14 continue;
15 }
16 let Some((key, value)) = line.split_once(':') else {
17 continue;
18 };
19 match key.trim() {
20 "instance-id" => instance_type = Some(value.trim().to_string()),
21 "region" => region = Some(value.trim().to_string()),
22 _ => {}
23 }
24 }
25
26 Some(CloudInfo {
27 cloud_vendor_id: Some("hcloud".to_string()),
28 cloud_account_id: None,
29 cloud_region_id: region.filter(|s| !s.is_empty() && s != "unknown"),
30 cloud_zone_id: None,
31 cloud_instance_type: instance_type.filter(|s| !s.is_empty() && s != "unknown"),
32 })
33}