diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-01-30 21:27:34 +0100 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-01-30 21:27:34 +0100 |
commit | 6eb0851420b358132dd8a72312b25a1f7efd02de (patch) | |
tree | 6cae08b9d96c6d38969e7025b400c6a21459ba63 /src | |
parent | b55edb96ae0f45d9dce64d6f2e78a9b8d3ff4ef9 (diff) | |
download | rebel-6eb0851420b358132dd8a72312b25a1f7efd02de.tar rebel-6eb0851420b358132dd8a72312b25a1f7efd02de.zip |
runner: run commands in buildah containers
Diffstat (limited to 'src')
-rw-r--r-- | src/executor.rs | 2 | ||||
-rw-r--r-- | src/runner/buildah.rs | 50 |
2 files changed, 46 insertions, 6 deletions
diff --git a/src/executor.rs b/src/executor.rs index e07b4e3..2523162 100644 --- a/src/executor.rs +++ b/src/executor.rs @@ -70,7 +70,7 @@ impl<'a> Executor<'a> { } pub fn run(&mut self) -> runner::Result<()> { - let runner = runner::buildah::RunnerBuildah::new(self.tasks); + let runner = runner::buildah::BuildahRunner::new(self.tasks); while !self.tasks_runnable.is_empty() { self.run_one(&runner)?; } diff --git a/src/runner/buildah.rs b/src/runner/buildah.rs index a4f0d3b..72a2e5f 100644 --- a/src/runner/buildah.rs +++ b/src/runner/buildah.rs @@ -1,21 +1,61 @@ +use scopeguard::defer; +use std::{ + io::{Error, ErrorKind}, + process::{Command, Stdio}, +}; + use super::*; use crate::types::*; -pub struct RunnerBuildah<'a> { +static IMAGE: &str = "rebel:latest"; + +pub struct BuildahRunner<'a> { tasks: &'a TaskMap, } -impl<'a> RunnerBuildah<'a> { +impl<'a> BuildahRunner<'a> { pub fn new(tasks: &'a TaskMap) -> Self { - RunnerBuildah { tasks } + BuildahRunner { tasks } } } -impl<'a> Runner for RunnerBuildah<'a> { +fn check_status(output: &std::process::Output, message: &str) -> Result<()> { + if output.status.success() { + Ok(()) + } else { + Err(Error::new(ErrorKind::Other, message)) + } +} + +impl<'a> Runner for BuildahRunner<'a> { fn run(&self, task: &TaskRef) -> Result<()> { let task_def = self.tasks.get(task).expect("Invalid TaskRef"); - println!("{}: {:?}", task, task_def.run); + let buildah_from = Command::new("buildah") + .arg("from") + .arg("--name") + .arg(task) + .arg(IMAGE) + .output()?; + check_status(&buildah_from, "unable to create container")?; + + defer! { + let _ = Command::new("buildah") + .arg("rm") + .arg(task) + .stdout(Stdio::null()) + .output(); + } + + let buildah_run = Command::new("buildah") + .arg("run") + .arg(task) + .arg("sh") + .arg("-c") + .arg(&task_def.run) + .output()?; + + println!("{}:\n\t{:?}\n\t{:?}", task, task_def, buildah_run); Ok(()) } |