Skip to content

Commit

Permalink
🎨 fix after review
Browse files Browse the repository at this point in the history
  • Loading branch information
ndaWefox committed Apr 12, 2024
1 parent e8ecf6c commit 540570f
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 31 deletions.
16 changes: 8 additions & 8 deletions rustainers/src/runner/inner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,6 @@ pub(crate) trait InnerRunner: Display + Debug + Send + Sync {
Ok(result)
}

#[tracing::instrument(level = "debug", skip(self), fields(runner = %self))]
async fn list_networks(&self) -> Result<Vec<RunnerNetwork>, ContainerError> {
let mut cmd = self.command();
cmd.push_args(["network", "ls", "--no-trunc", "--format={{json .}}"]);
let result = cmd.json_stream::<RunnerNetwork>().await?;
Ok(result)
}

#[tracing::instrument(level = "debug", skip(self), fields(runner = %self))]
async fn create_network(&self, name: &str) -> Result<(), ContainerError> {
let mut cmd = self.command();
Expand All @@ -57,6 +49,14 @@ pub(crate) trait InnerRunner: Display + Debug + Send + Sync {
Ok(())
}

#[tracing::instrument(level = "debug", skip(self), fields(runner = %self))]
async fn list_networks(&self) -> Result<Vec<RunnerNetwork>, ContainerError> {
let mut cmd = self.command();
cmd.push_args(["network", "ls", "--no-trunc", "--format={{json .}}"]);
let result = cmd.json_stream::<RunnerNetwork>().await?;
Ok(result)
}

#[tracing::instrument(level = "debug", skip(self), fields(runner = %self))]
async fn create_volume(&self, name: &str) -> Result<(), ContainerError> {
let mut cmd = self.command();
Expand Down
27 changes: 9 additions & 18 deletions rustainers/src/runner/runner_network.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,16 @@ pub enum Driver {
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct RunnerNetwork {
#[serde(alias = "name")]
/// The network name
pub name: String,
#[serde(alias = "scope")]
/// The network scope
pub scope: String,
pub scope: Option<String>,
#[serde(alias = "driver")]
/// The network driver
pub driver: Driver,
}
impl RunnerNetwork {
#[allow(dead_code)]
#[must_use]
/// Check network is from the host
///
pub fn is_host_bridge_network(&self) -> bool {
self.scope == "local" && self.driver == Driver::Bridge && self.name != "bridge"
}
}

#[cfg(test)]
mod tests {
Expand All @@ -56,14 +50,11 @@ mod tests {
}

#[test]
fn should_filter_network() {
let json_stream = include_str!("../../tests/assets/docker_networks.jsonl");
fn should_serde_podman_network() {
let json_stream = include_str!("../../tests/assets/podman_networks.jsonl");
let stream = serde_json::Deserializer::from_str(json_stream).into_iter::<RunnerNetwork>();
let networks = stream.collect::<Result<Vec<_>, _>>().unwrap();
let host_network = networks
.into_iter()
.filter(RunnerNetwork::is_host_bridge_network)
.collect::<Vec<RunnerNetwork>>();
assert_eq!(host_network.len(), 1);
let networks = stream.collect::<Result<Vec<_>, _>>();
let_assert!(Ok(data) = networks);
insta::assert_debug_snapshot!(data);
}
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,35 @@
---
source: rustainers/src/runner/runner_network.rs
assertion_line: 54
assertion_line: 49
expression: data
---
[
RunnerNetwork {
name: "bridge",
scope: "local",
scope: Some(
"local",
),
driver: Bridge,
},
RunnerNetwork {
name: "dummy_network",
scope: "local",
scope: Some(
"local",
),
driver: Bridge,
},
RunnerNetwork {
name: "host",
scope: "local",
scope: Some(
"local",
),
driver: Host,
},
RunnerNetwork {
name: "none",
scope: "local",
scope: Some(
"local",
),
driver: Null,
},
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
source: rustainers/src/runner/runner_network.rs
assertion_line: 59
expression: data
---
[
RunnerNetwork {
name: "my_network_01HTY22KXBHP2MVFPFSSK9CQCG",
scope: None,
driver: Bridge,
},
RunnerNetwork {
name: "my_network_01HTY4NQF1GH56JNA8MXNN0ZMF",
scope: None,
driver: Bridge,
},
RunnerNetwork {
name: "my_network_01HTY4NQSHF5Y6Q572X1G748ZJ",
scope: None,
driver: Bridge,
},
RunnerNetwork {
name: "my_network_01HTY4T0FHGZF5ZYYXG9SJM69R",
scope: None,
driver: Bridge,
},
RunnerNetwork {
name: "my_network_01HTY4T1SWV848BEX4VXAR9FVE",
scope: None,
driver: Bridge,
},
RunnerNetwork {
name: "podman",
scope: None,
driver: Bridge,
},
RunnerNetwork {
name: "tc_redpanda-single_01hty22k12cw846sk95pafkxpz_redpanda_network",
scope: None,
driver: Bridge,
},
RunnerNetwork {
name: "tc_redpanda-single_01hty4npgg9c0x5d536qjc88tx_redpanda_network",
scope: None,
driver: Bridge,
},
RunnerNetwork {
name: "tc_redpanda-single_01hty4sweerk2zmv3exqj4xzte_redpanda_network",
scope: None,
driver: Bridge,
},
]
9 changes: 9 additions & 0 deletions rustainers/tests/assets/podman_networks.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{"name":"my_network_01HTY22KXBHP2MVFPFSSK9CQCG","id":"11a444f0e98861bf82d6c58cef9583ad39a468a778bacf1d401004b99999d47c","driver":"bridge","network_interface":"podman1","created":"2024-04-08T07:14:43.658508378+02:00","subnets":[{"subnet":"10.89.0.0/24","gateway":"10.89.0.1"}],"ipv6_enabled":false,"internal":false,"dns_enabled":true,"ipam_options":{"driver":"host-local"}}
{"name":"my_network_01HTY4NQF1GH56JNA8MXNN0ZMF","id":"f06861da391bf5987da4195270f9b7a0742c9948c107e90fdc4a7c075bec4d52","driver":"bridge","network_interface":"podman3","created":"2024-04-08T08:00:07.007654609+02:00","subnets":[{"subnet":"10.89.2.0/24","gateway":"10.89.2.1"}],"ipv6_enabled":false,"internal":false,"dns_enabled":true,"ipam_options":{"driver":"host-local"}}
{"name":"my_network_01HTY4NQSHF5Y6Q572X1G748ZJ","id":"fb8774638c5797653104cb117807d1605fd0e565f783717d263df9053fcfd7a0","driver":"bridge","network_interface":"podman5","created":"2024-04-08T08:00:07.372278026+02:00","subnets":[{"subnet":"10.89.4.0/24","gateway":"10.89.4.1"}],"ipv6_enabled":false,"internal":false,"dns_enabled":true,"ipam_options":{"driver":"host-local"}}
{"name":"my_network_01HTY4T0FHGZF5ZYYXG9SJM69R","id":"dcb0b272c10ada5fc4a37717799ea79c877b1325cfcec7874312390fee5d8b89","driver":"bridge","network_interface":"podman7","created":"2024-04-08T08:02:27.672925944+02:00","subnets":[{"subnet":"10.89.6.0/24","gateway":"10.89.6.1"}],"ipv6_enabled":false,"internal":false,"dns_enabled":true,"ipam_options":{"driver":"host-local"}}
{"name":"my_network_01HTY4T1SWV848BEX4VXAR9FVE","id":"f5708bf41b9deca0861c7d2f89dbbee3d0578712f834cdc74c970991c164dfea","driver":"bridge","network_interface":"podman8","created":"2024-04-08T08:02:28.698748018+02:00","subnets":[{"subnet":"10.89.7.0/24","gateway":"10.89.7.1"}],"ipv6_enabled":false,"internal":false,"dns_enabled":true,"ipam_options":{"driver":"host-local"}}
{"name":"podman","id":"2f259bab93aaaaa2542ba43ef33eb990d0999ee1b9924b557b7be53c0b7a1bb9","driver":"bridge","network_interface":"podman0","created":"2024-04-08T08:02:55.570741081+02:00","subnets":[{"subnet":"10.88.0.0/16","gateway":"10.88.0.1"}],"ipv6_enabled":false,"internal":false,"dns_enabled":false,"ipam_options":{"driver":"host-local"}}
{"name":"tc_redpanda-single_01hty22k12cw846sk95pafkxpz_redpanda_network","id":"3852824d1fe0b54cb562c8a61d9e1f8c322e15581c5cf896b65a3bcaed38003e","driver":"bridge","network_interface":"podman2","created":"2024-04-08T07:14:43.896262214+02:00","subnets":[{"subnet":"10.89.1.0/24","gateway":"10.89.1.1"}],"ipv6_enabled":false,"internal":false,"dns_enabled":true,"labels":{"com.docker.compose.project":"tc_redpanda-single_01hty22k12cw846sk95pafkxpz","io.podman.compose.project":"tc_redpanda-single_01hty22k12cw846sk95pafkxpz"},"ipam_options":{"driver":"host-local"}}
{"name":"tc_redpanda-single_01hty4npgg9c0x5d536qjc88tx_redpanda_network","id":"1ac44fabbc45480f6589260026ca13d3b1c6a11d49d428fa87f966e3cd905062","driver":"bridge","network_interface":"podman4","created":"2024-04-08T08:00:07.335695949+02:00","subnets":[{"subnet":"10.89.3.0/24","gateway":"10.89.3.1"}],"ipv6_enabled":false,"internal":false,"dns_enabled":true,"labels":{"com.docker.compose.project":"tc_redpanda-single_01hty4npgg9c0x5d536qjc88tx","io.podman.compose.project":"tc_redpanda-single_01hty4npgg9c0x5d536qjc88tx"},"ipam_options":{"driver":"host-local"}}
{"name":"tc_redpanda-single_01hty4sweerk2zmv3exqj4xzte_redpanda_network","id":"afca1d8e59e32a874f2e6f16946e84f36ff233b6ad28f499782c4bf0041d5e33","driver":"bridge","network_interface":"podman6","created":"2024-04-08T08:02:23.869210731+02:00","subnets":[{"subnet":"10.89.5.0/24","gateway":"10.89.5.1"}],"ipv6_enabled":false,"internal":false,"dns_enabled":true,"labels":{"com.docker.compose.project":"tc_redpanda-single_01hty4sweerk2zmv3exqj4xzte","io.podman.compose.project":"tc_redpanda-single_01hty4sweerk2zmv3exqj4xzte"},"ipam_options":{"driver":"host-local"}}

0 comments on commit 540570f

Please sign in to comment.