Skip to main content

sal_virt/nerdctl/
cmd.rs

1// File: /root/code/git.threefold.info/herocode/sal/src/virt/nerdctl/cmd.rs
2
3// Basic nerdctl operations for container management
4use super::NerdctlError;
5use sal_process::CommandResult;
6use std::process::Command;
7
8/// Execute a nerdctl command and return the result
9pub fn execute_nerdctl_command(args: &[&str]) -> Result<CommandResult, NerdctlError> {
10    let output = Command::new("nerdctl").args(args).output();
11
12    match output {
13        Ok(output) => {
14            let stdout = String::from_utf8_lossy(&output.stdout).to_string();
15            let stderr = String::from_utf8_lossy(&output.stderr).to_string();
16
17            let result = CommandResult {
18                stdout,
19                stderr,
20                success: output.status.success(),
21                code: output.status.code().unwrap_or(-1),
22            };
23
24            if result.success {
25                Ok(result)
26            } else {
27                Err(NerdctlError::CommandFailed(format!(
28                    "Command failed with code {}: {}",
29                    result.code,
30                    result.stderr.trim()
31                )))
32            }
33        }
34        Err(e) => Err(NerdctlError::CommandExecutionFailed(e)),
35    }
36}