Skip to content

feat: ReaperDaemonJob CRD for node configuration tasks#58

Merged
miguelgila merged 7 commits intomainfrom
fix/reaper-daemon-job-crd
Mar 22, 2026
Merged

feat: ReaperDaemonJob CRD for node configuration tasks#58
miguelgila merged 7 commits intomainfrom
fix/reaper-daemon-job-crd

Conversation

@miguelgila
Copy link
Owner

Summary

  • New ReaperDaemonJob CRD that runs commands to completion on every matching node
  • Controller layering: ReaperDaemonJob → ReaperPod → Pod (no changes to existing runtime)
  • Per-node status tracking with retry support (retryLimit)
  • Dependency ordering via after field for composable vServices
  • Shared overlay support via overlayName (e.g., one job mounts FS, next installs packages)
  • Node selector filtering with Ready-node validation
  • Concurrency policy (Skip/Replace) and spec-change re-trigger

Files added/changed

  • src/crds/reaper_daemon_job.rs — CRD types (spec, status, per-node status)
  • src/bin/reaper-controller/daemon_job_reconciler.rs — Reconciler (node listing, ReaperPod creation, status tracking)
  • src/bin/reaper-controller/main.rs — Wire in third controller + CRD generation
  • src/crds/mod.rs — Export new module
  • deploy/helm/reaper/templates/controller-rbac.yaml — RBAC for nodes + reaperdaemonjobs
  • examples/12-daemon-job/ — Simple and composable vService examples

Closes #54

Test plan

  • cargo clippy --workspace --all-targets -- -D warnings passes (macOS)
  • cargo clippy --target x86_64-unknown-linux-gnu --all-targets -- -D warnings passes (Linux cross-compile)
  • cargo test --workspace passes (222 tests, including new CRD serde + reconciler unit tests)
  • Manual verification with Kind cluster: apply examples, verify ReaperPods created per node

🤖 Generated with Claude Code

miguelgila and others added 3 commits March 21, 2026 22:51
Adds a new CRD that runs commands to completion on every matching node,
with support for dependency ordering, retry policies, and shared overlays.

Controller layering: ReaperDaemonJob → ReaperPod → Pod (no changes to
existing runtime or reaper-controller reconcilers).

Key features:
- Per-node status tracking with retry support
- Dependency ordering via `after` field
- Shared overlay support via `overlayName` for composable vServices
- Node selector filtering with Ready-node validation
- Concurrency policy (Skip/Replace)
- Spec-change detection triggers re-execution

Closes #54

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Phase 4d in the integration test suite with 7 tests:
- CRD installation and establishment
- Simple DaemonJob creates ReaperPods per node
- Status tracking (phase, readyNodes, totalNodes)
- Per-node status entries with Succeeded phase
- kubectl get columns (PHASE, READY, TOTAL)
- Dependency ordering via `after` field
- GC of ReaperPods on DaemonJob deletion

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@codecov
Copy link

codecov bot commented Mar 21, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 85.06%. Comparing base (0353a09) to head (2807ce0).
⚠️ Report is 2 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main      #58      +/-   ##
==========================================
+ Coverage   84.78%   85.06%   +0.27%     
==========================================
  Files           6        6              
  Lines         309      308       -1     
==========================================
  Hits          262      262              
+ Misses         47       46       -1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

CI cross-compilation for Linux resolves these types from k8s_openapi,
not kube::api. Also removes unused ReaperPodStatus import.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
miguelgila and others added 3 commits March 22, 2026 15:03
Generated via scripts/generate-crds.sh, deployed to both
deploy/kubernetes/crds/ and deploy/helm/reaper/crds/.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The generated Helm CRD copy was truncated (missing status schema,
served/storage/subresources fields). Re-copied from the complete
kubernetes/crds version.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The controller needs:
- reaperdaemonjobs + reaperdaemonjobs/status access
- nodes get/list/watch for node targeting
- reaperpods create/delete (DaemonJob reconciler creates ReaperPods)

Updated both deploy/kubernetes/reaper-controller.yaml (used by CI)
and deploy/helm/reaper/templates/controller-rbac.yaml.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@miguelgila miguelgila merged commit b9abb82 into main Mar 22, 2026
18 checks passed
@miguelgila miguelgila deleted the fix/reaper-daemon-job-crd branch March 22, 2026 16:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: ReaperDaemonJob CRD for node configuration tasks

1 participant