mod dispatch;
pub use dispatch::*;
#[cfg(test)]
mod test_fixtures;
#[cfg(test)]
mod tests_check_verdict;
#[cfg(test)]
mod tests_completeness;
#[cfg(test)]
mod tests_coverage;
#[cfg(test)]
mod tests_dispatch;
#[cfg(test)]
mod tests_sudo;
pub fn emit_for_cli(file: &std::path::Path, resource: &str, phase: &str) -> Result<(), String> {
let cfg = crate::core::parser::parse_and_validate(file)?;
let resolved = crate::core::resolver::resolve_all(
&cfg.resources,
&cfg.params,
&cfg.machines,
&cfg.secrets,
);
let r = resolved
.get(resource)
.ok_or_else(|| format!("no such resource: {resource}"))?;
let script = match phase {
"apply" => apply_script(r)?,
"check" => check_script(r)?,
"state-query" => state_query_script(r)?,
"reaper" => reaper_phase(r)?,
other => return Err(format!("unknown phase: {other}")),
};
print!("{script}");
Ok(())
}
fn reaper_phase(r: &crate::core::types::Resource) -> Result<String, String> {
if r.resource_type != crate::core::types::ResourceType::DiskBudget {
return Err(format!(
"phase `reaper` is only defined for disk_budget resources, not {}",
r.resource_type
));
}
crate::resources::disk_budget::reaper_script(r)
}