use serde::Deserialize;
use super::empty_string_is_no_values;
#[derive(Debug, Clone, Deserialize)]
#[serde(default)]
pub struct IpamConfig {
pub backend: String,
pub timeout_ms: u64,
pub netbox: NetboxConfig,
pub phpipam: PhpIpamConfig,
pub custom: CustomIpamConfig,
}
impl Default for IpamConfig {
fn default() -> Self {
Self {
backend: String::new(),
timeout_ms: 5000,
netbox: NetboxConfig::default(),
phpipam: PhpIpamConfig::default(),
custom: CustomIpamConfig::default(),
}
}
}
fn default_sources() -> Vec<String> {
vec![
"dns_name".to_string(),
"custom_field".to_string(),
"device".to_string(),
]
}
#[derive(Debug, Clone, Deserialize)]
#[serde(default)]
pub struct NetboxConfig {
pub url: String,
pub token: String,
pub custom_field: String,
#[serde(deserialize_with = "empty_string_is_no_values")]
pub sources: Vec<String>,
#[serde(deserialize_with = "empty_string_is_no_values")]
pub vip_roles: Vec<String>,
pub ca_cert_path: String,
pub insecure_skip_verify: bool,
}
impl Default for NetboxConfig {
fn default() -> Self {
Self {
url: String::new(),
token: String::new(),
custom_field: "acme_domains".to_string(),
sources: default_sources(),
vip_roles: vec![
"vip".to_string(),
"vrrp".to_string(),
"hsrp".to_string(),
"glbp".to_string(),
"carp".to_string(),
"anycast".to_string(),
],
ca_cert_path: String::new(),
insecure_skip_verify: false,
}
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(default)]
pub struct PhpIpamConfig {
pub url: String,
pub app_id: String,
pub token: String,
pub custom_field: String,
#[serde(deserialize_with = "empty_string_is_no_values")]
pub sources: Vec<String>,
pub ca_cert_path: String,
pub insecure_skip_verify: bool,
}
impl Default for PhpIpamConfig {
fn default() -> Self {
Self {
url: String::new(),
app_id: "acme".to_string(),
token: String::new(),
custom_field: "custom_acme_domains".to_string(),
sources: default_sources(),
ca_cert_path: String::new(),
insecure_skip_verify: false,
}
}
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(default)]
pub struct CustomIpamConfig {
pub script_path: String,
#[serde(deserialize_with = "empty_string_is_no_values")]
pub args: Vec<String>,
}