use super::{ActionMechanism, ActionSpec};
use sysknife_types::RiskLevel;
pub fn specs() -> Vec<ActionSpec> {
vec![
list_toolboxes("testuser"),
create_toolbox("testuser", "sysknife-dev", Some("41"), None),
remove_toolbox("testuser", "sysknife-dev"),
]
}
fn toolbox_as(username: &str, parameters: &[&str]) -> ActionMechanism {
let mut args = vec![
"/usr/lib/sysknife/action-steps".to_string(),
"toolbox".to_string(),
username.to_string(),
];
args.extend(parameters.iter().map(|value| value.to_string()));
ActionMechanism::Command {
program: "sudo",
args,
}
}
pub fn list_toolboxes(username: &str) -> ActionSpec {
ActionSpec {
action_name: "ListToolboxes",
mechanism: toolbox_as(username, &["list"]),
risk_level: RiskLevel::Low,
reboot_required: false,
rollback_available: false,
}
}
pub fn create_toolbox(
username: &str,
name: &str,
release: Option<&str>,
image: Option<&str>,
) -> ActionSpec {
let mut args = vec!["create", "--container", name];
if let Some(release) = release {
args.extend(["--release", release]);
}
if let Some(image) = image {
args.extend(["--image", image]);
}
ActionSpec {
action_name: "CreateToolbox",
mechanism: toolbox_as(username, &args),
risk_level: RiskLevel::Medium,
reboot_required: false,
rollback_available: false,
}
}
pub fn remove_toolbox(username: &str, name: &str) -> ActionSpec {
ActionSpec {
action_name: "RemoveToolbox",
mechanism: toolbox_as(username, &["rm", name]),
risk_level: RiskLevel::Medium,
reboot_required: false,
rollback_available: false,
}
}