pleme-fleet 0.1.3

NixOS fleet lifecycle CLI with DAG workflow orchestration
use anyhow::Result;

use crate::config::FleetConfig;
use crate::targeting::ResolvedTargets;
use super::utils::*;

pub fn run(targets: &ResolvedTargets, config: &FleetConfig) -> Result<()> {
    let names: Vec<&str> = targets.names();
    if !confirm(&format!("Rollback {}? (y/N)", names.join(", ")))? {
        log_info("Aborted");
        return Ok(());
    }

    for (name, node) in &targets.nodes {
        log_info(&format!("{} Rolling back...", node_label(name)));
        let ssh = config.resolve_ssh(name);
        match ssh_run_with_config(
            &node.ssh_user,
            &node.hostname,
            &ssh,
            "nixos-rebuild switch --rollback",
        ) {
            Ok(_) => log_success(&format!("{} Rolled back", node_label(name))),
            Err(e) => log_error(&format!("{} Rollback failed: {}", node_label(name), e)),
        }
    }

    Ok(())
}