mod host;
mod hybrid;
mod jobs;
mod project_files;
pub use host::HostSize;
pub use hybrid::{HybridContainers, docker_net};
pub use jobs::{as_arguments, init_names, leaf_jobs, start_commands};
pub use project_files::{copied_from_project, host_environment, project_variables, variable};
use isoloom_plan::Health;
use isoloom_spec::model::Machine;
pub const CHECK_IMAGE: &str = "curlimages/curl:8.11.1";
pub const PROBE_IMAGE: &str = "busybox:1.37.0-musl";
pub const PROBE_DIR: &str = "/.isoloom-probe";
pub const UTILITY_IMAGE: &str = "alpine:3.20";
#[must_use]
pub fn probe(m: &Machine) -> String {
m.ready_ports()
.iter()
.map(|port| format!("{PROBE_DIR}/busybox nc -z -w 2 127.0.0.1 {port}"))
.collect::<Vec<_>>()
.join(" && ")
}
#[must_use]
pub fn ready_test(m: &Machine, health: Option<&Health>) -> String {
let own = health.map(|h| format!("( {} )", h.shell_test(&format!("{PROBE_DIR}/busybox wget"))));
[probe(m)].into_iter().filter(|t| !t.is_empty()).chain(own).collect::<Vec<_>>().join(" && ")
}
#[must_use]
pub fn exec_runner(machine: &str) -> String {
format!("exec-{machine}.sh")
}
#[cfg(test)]
mod tests;