refactor: drop config_count from merge_forwarding_rules return
Log config rules directly from config.forwarding before merging, keeping the merge API clean of logging concerns.
This commit is contained in:
@@ -56,19 +56,16 @@ impl ForwardingRuleConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Merge config-declared rules with auto-discovered rules. Config rules come
|
|
||||||
/// first so `match_forwarding_rule`'s first-match semantics gives them precedence.
|
|
||||||
pub fn merge_forwarding_rules(
|
pub fn merge_forwarding_rules(
|
||||||
config_rules: &[ForwardingRuleConfig],
|
config_rules: &[ForwardingRuleConfig],
|
||||||
discovered: Vec<crate::system_dns::ForwardingRule>,
|
discovered: Vec<crate::system_dns::ForwardingRule>,
|
||||||
) -> Result<(Vec<crate::system_dns::ForwardingRule>, usize)> {
|
) -> Result<Vec<crate::system_dns::ForwardingRule>> {
|
||||||
let mut merged: Vec<crate::system_dns::ForwardingRule> = Vec::new();
|
let mut merged: Vec<crate::system_dns::ForwardingRule> = Vec::new();
|
||||||
for rule in config_rules {
|
for rule in config_rules {
|
||||||
merged.extend(rule.to_runtime_rules()?);
|
merged.extend(rule.to_runtime_rules()?);
|
||||||
}
|
}
|
||||||
let config_count = merged.len();
|
|
||||||
merged.extend(discovered);
|
merged.extend(discovered);
|
||||||
Ok((merged, config_count))
|
Ok(merged)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
@@ -740,8 +737,7 @@ mod tests {
|
|||||||
"home.local".to_string(),
|
"home.local".to_string(),
|
||||||
"192.168.1.1:53".parse().unwrap(),
|
"192.168.1.1:53".parse().unwrap(),
|
||||||
)];
|
)];
|
||||||
let (merged, count) = merge_forwarding_rules(&config_rules, discovered).unwrap();
|
let merged = merge_forwarding_rules(&config_rules, discovered).unwrap();
|
||||||
assert_eq!(count, 1);
|
|
||||||
let picked = crate::system_dns::match_forwarding_rule("host.home.local", &merged)
|
let picked = crate::system_dns::match_forwarding_rule("host.home.local", &merged)
|
||||||
.expect("rule should match");
|
.expect("rule should match");
|
||||||
assert_eq!(picked.to_string(), "10.0.0.1:53");
|
assert_eq!(picked.to_string(), "10.0.0.1:53");
|
||||||
@@ -757,7 +753,7 @@ mod tests {
|
|||||||
"corp.example".to_string(),
|
"corp.example".to_string(),
|
||||||
"192.168.1.1:53".parse().unwrap(),
|
"192.168.1.1:53".parse().unwrap(),
|
||||||
)];
|
)];
|
||||||
let (merged, _) = merge_forwarding_rules(&config_rules, discovered).unwrap();
|
let merged = merge_forwarding_rules(&config_rules, discovered).unwrap();
|
||||||
assert_eq!(merged.len(), 2);
|
assert_eq!(merged.len(), 2);
|
||||||
let picked = crate::system_dns::match_forwarding_rule("host.corp.example", &merged)
|
let picked = crate::system_dns::match_forwarding_rule("host.corp.example", &merged)
|
||||||
.expect("discovered rule should still match");
|
.expect("discovered rule should still match");
|
||||||
@@ -765,13 +761,12 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn forwarding_merge_suffix_array_expands_config_count() {
|
fn forwarding_merge_suffix_array_expands_to_multiple_rules() {
|
||||||
let config_rules = vec![ForwardingRuleConfig {
|
let config_rules = vec![ForwardingRuleConfig {
|
||||||
suffix: vec!["a.local".to_string(), "b.local".to_string()],
|
suffix: vec!["a.local".to_string(), "b.local".to_string()],
|
||||||
upstream: "10.0.0.1:53".to_string(),
|
upstream: "10.0.0.1:53".to_string(),
|
||||||
}];
|
}];
|
||||||
let (merged, count) = merge_forwarding_rules(&config_rules, vec![]).unwrap();
|
let merged = merge_forwarding_rules(&config_rules, vec![]).unwrap();
|
||||||
assert_eq!(count, 2);
|
|
||||||
assert_eq!(merged.len(), 2);
|
assert_eq!(merged.len(), 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
13
src/main.rs
13
src/main.rs
@@ -210,14 +210,13 @@ async fn main() -> numa::Result<()> {
|
|||||||
}
|
}
|
||||||
service_store.load_persisted();
|
service_store.load_persisted();
|
||||||
|
|
||||||
let (forwarding_rules, config_count) =
|
for fwd in &config.forwarding {
|
||||||
numa::config::merge_forwarding_rules(&config.forwarding, system_dns.forwarding_rules)?;
|
for suffix in &fwd.suffix {
|
||||||
for rule in forwarding_rules.iter().take(config_count) {
|
info!("forwarding .{} to {} (config rule)", suffix, fwd.upstream);
|
||||||
info!(
|
}
|
||||||
"forwarding .{} to {} (config rule)",
|
|
||||||
rule.suffix, rule.upstream
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
let forwarding_rules =
|
||||||
|
numa::config::merge_forwarding_rules(&config.forwarding, system_dns.forwarding_rules)?;
|
||||||
|
|
||||||
// Resolve data_dir from config, falling back to the platform default.
|
// Resolve data_dir from config, falling back to the platform default.
|
||||||
// Used for TLS CA storage below and stored on ServerCtx for runtime use.
|
// Used for TLS CA storage below and stored on ServerCtx for runtime use.
|
||||||
|
|||||||
Reference in New Issue
Block a user