destroy verb: CLI + admin socket + dashboard button; purges state + approvals
This commit is contained in:
parent
c7b50aa5b7
commit
b711296460
8 changed files with 92 additions and 4 deletions
|
|
@ -3,11 +3,11 @@
|
|||
//! `&Coordinator` and the request parameters; callers stitch the response
|
||||
//! shape they want (HTTP redirect vs JSON).
|
||||
|
||||
use anyhow::Result;
|
||||
use anyhow::{Result, bail};
|
||||
use hive_sh4re::{ApprovalStatus, HelperEvent, MANAGER_AGENT, Message, SYSTEM_SENDER};
|
||||
|
||||
use crate::coordinator::Coordinator;
|
||||
use crate::lifecycle;
|
||||
use crate::lifecycle::{self, MANAGER_NAME};
|
||||
|
||||
/// Approve a pending request: read the agent.nix at the approval's commit from
|
||||
/// the proposed repo, copy into the applied repo, commit there, and rebuild
|
||||
|
|
@ -64,6 +64,33 @@ pub async fn approve(coord: &Coordinator, id: i64) -> Result<()> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Fully tear down a sub-agent. Refuses the manager (declarative; would fight
|
||||
/// with the host's nixos config).
|
||||
pub async fn destroy(coord: &Coordinator, name: &str) -> Result<()> {
|
||||
if name == MANAGER_NAME || name == MANAGER_AGENT {
|
||||
bail!("refusing to destroy the manager ({name})");
|
||||
}
|
||||
tracing::info!(%name, "destroy");
|
||||
lifecycle::destroy(name).await?;
|
||||
coord.unregister_agent(name);
|
||||
let runtime = Coordinator::agent_dir(name);
|
||||
if runtime.exists() {
|
||||
let _ = std::fs::remove_dir_all(&runtime);
|
||||
}
|
||||
let state = Coordinator::agent_state_root(name);
|
||||
if state.exists() {
|
||||
let _ = std::fs::remove_dir_all(&state);
|
||||
}
|
||||
let applied = Coordinator::agent_applied_dir(name);
|
||||
if applied.exists() {
|
||||
let _ = std::fs::remove_dir_all(&applied);
|
||||
}
|
||||
let _ = coord
|
||||
.approvals
|
||||
.fail_pending_for_agent(name, "agent destroyed");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn deny(coord: &Coordinator, id: i64) -> Result<()> {
|
||||
let approval = coord.approvals.get(id)?;
|
||||
coord.approvals.mark_denied(id)?;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue