feat: dynamic execution mode — Undecided tasks, two-phase dispatch, assign API
- ExecutionMode enum adds Undecided variant (default for new tasks)
- Webhook creates tasks as Undecided instead of hardcoded SshCli
- Dispatch loop: Phase 1 matches ssh_cli hosts, Phase 2 marks remaining as HttpPull
- Dequeue now returns http_pull AND undecided tasks (atomic claim)
- New endpoint: POST /api/v1/tasks/{id}/assign for coordinator explicit assignment
- Backward compatible: existing SshCli/HttpPull tasks unaffected
- 37 tests passing (6 new)
This commit is contained in:
parent
a18cb2824e
commit
48c93e2ce9
13 changed files with 639 additions and 13 deletions
|
|
@ -78,6 +78,7 @@ async fn main() {
|
|||
.route("/api/v1/tasks", axum::routing::get(api::list_tasks))
|
||||
.route("/api/v1/tasks/dequeue", axum::routing::post(api::dequeue_task))
|
||||
.route("/api/v1/tasks/{task_id}", axum::routing::get(api::get_task))
|
||||
.route("/api/v1/tasks/{task_id}/assign", axum::routing::post(api::assign_task))
|
||||
.route("/api/v1/tasks/{task_id}/status", axum::routing::post(api::update_task_status))
|
||||
.route("/api/v1/tasks/{task_id}/complete", axum::routing::post(api::complete_task))
|
||||
.route("/api/v1/tasks/{task_id}/retry", axum::routing::post(api::retry_task))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue