Fix21: прод-фиксы swap/firewall/wg без легаси

- Swap: допуск небольшой дельты usable size при verify/compare

- Firewall: поддержка Debian 13 dynamic set/add @set вместо только literal meter

- WG: приоритет docker exec для peer/runtime discovery с безопасным fallback
This commit is contained in:
2026-05-12 13:37:37 +05:00
parent c463e64205
commit ff2ae98d30
3 changed files with 83 additions and 19 deletions
+35 -14
View File
@@ -21,15 +21,25 @@ pub struct PeerRuntime {
}
pub fn discover_peers(pid: u32, container: &str, peer_cidr: &str) -> anyhow::Result<Vec<Peer>> {
let boxed: Box<dyn NsTransport> = if nsenter_available() {
Box::new(NsenterTransport { pid })
} else {
Box::new(DockerExecTransport {
container: container.to_string(),
})
let docker = DockerExecTransport {
container: container.to_string(),
};
let docker_result = discover_peers_with_transport(&docker, peer_cidr);
if let Ok(peers) = &docker_result
&& (!peers.is_empty() || !nsenter_available())
{
return docker_result;
}
discover_peers_with_transport(boxed.as_ref(), peer_cidr)
if nsenter_available() {
let nsenter = NsenterTransport { pid };
match discover_peers_with_transport(&nsenter, peer_cidr) {
Ok(peers) if !peers.is_empty() => Ok(peers),
_ => docker_result,
}
} else {
docker_result
}
}
pub fn discover_peers_with_transport(
@@ -57,14 +67,25 @@ pub fn discover_peer_runtime(
container: &str,
peer_cidr: &str,
) -> anyhow::Result<Vec<PeerRuntime>> {
let boxed: Box<dyn NsTransport> = if nsenter_available() {
Box::new(NsenterTransport { pid })
} else {
Box::new(DockerExecTransport {
container: container.to_string(),
})
let docker = DockerExecTransport {
container: container.to_string(),
};
discover_peer_runtime_with_transport(boxed.as_ref(), peer_cidr)
let docker_result = discover_peer_runtime_with_transport(&docker, peer_cidr);
if let Ok(peers) = &docker_result
&& (!peers.is_empty() || !nsenter_available())
{
return docker_result;
}
if nsenter_available() {
let nsenter = NsenterTransport { pid };
match discover_peer_runtime_with_transport(&nsenter, peer_cidr) {
Ok(peers) if !peers.is_empty() => Ok(peers),
_ => docker_result,
}
} else {
docker_result
}
}
pub fn discover_peer_runtime_with_transport(