feat(P05): drain + daemon drain-and-stop (REQ-061) + job migrate (REQ-116)

orca node drain <host>: marks draining, stops allocs via SSH, marks
drained. orca daemon drain-and-stop: stops v0.8 daemons on peers.
orca job migrate <name> --to <node>: drain+reschedule composite
(C3=a, not live-migrate). Node states: draining, drained.

---ci---
project: orca
phase: 05
milestone: v0.11
status: execute
---/ci---
This commit is contained in:
Jon Chery
2026-08-07 05:17:01 +00:00
parent f61ef2aa9e
commit 41bcf0a6bf
7 changed files with 1269 additions and 3 deletions
+17
View File
@@ -6,8 +6,11 @@ import (
"os"
"path/filepath"
"testing"
"time"
"git.cloudinit.dev/coreci/orca/internal/certpaths"
"github.com/spf13/cobra"
)
func resetRootFlags(t *testing.T) {
@@ -32,11 +35,25 @@ func resetCommandFlags() {
joinHost, joinSSHUser, joinPassword, proxmoxUser, proxmoxRole = "", "root", "", "orca", "OrcaOperator"
joinSSHPort, leaveID, nodeWatch = 22, "", false
stopID, runTarget, runIDKey, jobWatch = "", "", "", false
migrateTarget = ""
drainTimeout = 30 * time.Second
capSetCPU, capSetMem, capSetDisk, capNodeID = 0, 0, 0, ""
auditLimit = 50
backupOutPath, restoreInPath, restoreTargetDir = "", "", ""
restoreForce = false
resetNSFlags()
// Reset per-command output writers so tests that polluted them
// (e.g. daemon tests calling cmd.SetOut(&buf)) don't leak into
// other tests. nil → cobra walks to rootCmd's writer.
for _, c := range []*cobra.Command{
nodeDrainCmd, daemonCmd, daemonDrainAndStopCmd,
jobCmd, jobMigrateCmd, jobRunCmd, jobListCmd, jobStopCmd, jobLogsCmd,
} {
if c != nil {
c.SetOut(nil)
c.SetErr(nil)
}
}
}
func TestNamespaceDefaultsToUserHome(t *testing.T) {