Running simulate

3 min read

ork simulate has three invocation forms: direct flags, a simulate.yaml file, and discovery mode.


Direct flags

Point at a katalog and a CR explicitly:

# katalog.yaml and cr.yaml in current directory (default filenames)
ork simulate

# Non-standard paths
ork simulate -f my-operator.yaml --cr my-cr.yaml

# Simulate one CRD from a multi-CRD Katalog
ork simulate --crd database

# Run exactly 5 cycles instead of the default 10
ork simulate --cycles 5

# Start the dev server at localhost:9999 before running
ork simulate --dev-server

From a simulate.yaml

Point simulate at a simulate.yaml directly:

ork simulate -f simulate.yaml

A simulate.yaml carries its own spec.katalog and spec.cr — you do not need to pass them separately. Aggregator files (imports: but no spec:) expand their imports automatically. See Aggregator mode.

Multi-document CR files are supported — separate multiple CRs with ---. Simulate matches each CRD to the CR whose kind matches and seeds the remaining CRs as peers in the fake cluster, enabling cross: observation between them. CRDs with no matching CR in the file are skipped with a note:

  note: no CR found for DatabaseBackedApp — skipped

Simulating managed-database/my-app-db
  ✓ Steady state at cycle 3 in 199ms

When --skip-external is passed, external: blocks produce a note instead of hitting the real network:

Simulating gated-app/my-gated-app
  note: external: calls stubbed — result fields will be empty

  Cycle 1:
    ~ status/my-gated-app
  ✓ Steady state at cycle 2 in 188ms

Discovery mode

Run simulate over every simulate.yaml under the current directory:

ork simulate ./...

# Skip specific files or directories
ork simulate ./... --skip vendor,testdata

Output:

Simulating 6 simulate file(s) under .

  01-hello-website/simulate.yaml ......... ✓ steady at cycle 2 (180ms)
  02-external-gate/simulate.yaml ......... ✓ steady at cycle 1 (120ms)  [external: inactive]
  03-cross-crd/simulate.yaml ............. ✓ steady at cycle 3 (210ms)
  04-secret-copy/simulate.yaml ........... ✓ steady at cycle 2 (19ms)  [cycle errors]
  05-hooks/simulate.yaml ................. ✓ steady at cycle 2 (85ms)
  06-constructor/simulate.yaml ........... ✓ steady at cycle 1 (42ms)

  6 file(s) — 6 simulated
  Slowest: 03-cross-crd (cycle 3, 210ms)

  Files with cycle errors — run directly for full output:
    ork simulate -f 04-secret-copy/simulate.yaml

Pure aggregators (no spec:) are expanded — their imports run in place. Files tagged [cycle errors] reached steady state but had reconcile errors on some cycle — run them directly to see the full output.


Flag reference

FlagDefaultDescription
-fsimulate.yamlPath to a simulate.yaml or katalog.yaml
--crcr.yamlPath to the CR YAML to simulate
--crdallCRD name to simulate (default: all CRDs in the Katalog)
--cycles10Maximum number of reconcile cycles
--dev-serverfalseStart the Orkestra dev server at localhost:9999 before running
--skipComma-separated path patterns to exclude during ./... discovery
--skip-externalfalseStub external: HTTP calls with empty 200 responses