Skip to content

Kind Val Runners

Kadyapam edited this page Jun 10, 2026 · 1 revision

Kind-Val Runners

Standalone end-to-end validation scripts under scripts/ that drive a fixture through the live runtime on a local kind cluster and assert on the resulting event log / metrics. They are the cheap regression gate before a GKE rollout (deployment-validation).

Each runner is self-contained bash: preflight → register → exec → wait for terminal status → assert. They talk to the NoETL server over localhost:8082 (port-forward) and to the cluster over kubectl --context kind-noetl.

The runners

Script Proves
kind_validate_fanout_reduce.sh The orchestrator's fan-in / reduce barrier gates dispatch until both upstream branches finish — exactly one step.enter for reduce_customer, and its command.completed lands after both upstreams.
kind_validate_container_callback.sh The noetl-k8s-watcher observes a Tool::Container Job's terminal state and POSTs the container-callback, bumping the server's noetl_container_callback_total{state=…} counter.

CLI-surface contract

The runners drive the current noetl CLI command surface, stable from CLI v2.17.0 through the v4.x line (the repos/cli submodule). Each runner preflights this surface and fails fast with a clear message if the installed binary doesn't expose it.

Operation Verb
Register a playbook noetl register playbook --file <F>
Execute (distributed) noetl exec <catalog-path> --runtime distributed --json
Terminal status noetl status <ID> --json
Event log noetl query "SELECT … FROM noetl.event WHERE execution_id = <ID> ORDER BY event_id" --format json

Notes that bite:

  • Exec by the catalog path (metadata.path, e.g. tests/fixtures/fanout_reduce_phase6), not the bare playbook name — distributed runtime resolves the path against the catalog.
  • There is no CLI events verb today. Pull the event log over the Postgres query API; rows are wrapped under .result. Order by event_id (monotonic, commit-ordered) — noetl.event has no timestamp column; the time field is event_time.

The pre-v2.17.0 verbs (noetl playbook register/execute, noetl execution status/events) were removed. Runners pinned to them abort on error: unrecognized subcommand 'playbook'.

Running

# Port-forward the server first (or have it on :8082 already):
kubectl --context kind-noetl -n noetl port-forward svc/noetl-server-rust 8082:8082 &

./scripts/kind_validate_fanout_reduce.sh
./scripts/kind_validate_container_callback.sh --context kind-noetl

Both exit 0 on PASS, non-zero on any failed assertion (dumping server / worker / watcher logs on the unhappy path). Knobs are env vars / flags: --context, --namespace, --server-url, --timeout, and the NOETL_*_DEPLOY overrides (default server deploy is noetl-server-rust).

Cross-references

Clone this wiki locally