Purpose: Reusable, working examples of the four‑stage pipeline and how to chain stages via stdin/stdout.
Stages: [ Acquisition (Ingest) ] → [ Processing ] → [ Visualization ] → [ Decimation (Egress) ]
CLI Groups: acquire
, process
, visualize
, decimate
Runner: zyra run pipeline.yaml
executes the stages in order, strea
ming bytes between them.
Overview
Chaining: Use
-
to read from stdin or write to stdout so stages can be c hained without temp files.Self‑Registration: Each stage registers its own CLI; the runner resolves s tage aliases:
acquisition/ingest →
acquire
processing →
process
visualization →
visualize
decimation/egress →
decimate
Location: Sample YAMLs live under
samples/pipelines/
in the repo.
Sample Pipelines
nc_passthrough.yaml: Reads NetCDF from stdin, writes NetCDF to stdout.
Command:
cat tests/testdata/demo.nc | zyra run samples/pipelines/nc_p assthrough.yaml > out.nc
Stages:
process convert-format - netcdf --stdout
nc_to_file.yaml: Reads NetCDF from stdin, writes a local file.
Command:
cat tests/testdata/demo.nc | zyra run samples/pipelines/nc_t o_file.yaml
Stages:
process convert-format - netcdf --stdout → decimate local - out.nc
extract_variable_to_file.yaml: Extracts a variable (e.g., TMP), converts t o NetCDF, saves locally.
Command:
cat tests/testdata/demo.nc | zyra run samples/pipelines/extr act_variable_to_file.yaml
Stages:
process extract-variable - "TMP" → process convert-format - netcdf --stdout → decimate local - temperature.nc
compose_video_to_local.yaml: Composes frames to MP4 and writes the result locally.
Command:
zyra run samples/pipelines/compose_video_to_local.yaml
Note: Needs a
frames/
directory containingframe_*.png
. FFmpeg should be installed or the compose step gracefully skips.
ftp_to_s3.yaml (template): FTP → compose video → upload to S3.
Command: Not CI‑safe; requires network access and credentials (edit placehol ders first).
Stages:
acquire ftp → visualize compose-video → decimate s3
Overrides
Global: Apply when the key exists in a stage’s
args
.Example:
--set var=TMP
Per‑stage (1‑based index): Targets a single stage by index.
Example:
--set 2.var=TMP
(setsvar=TMP
on stage 2 only)
Stage‑name: Robust to reordering; uses aliases listed in Overview.
Examples:
--set processing.var=TMP
--set decimation.backend=local
Combining: Index‑ and name‑based overrides can be used together; name‑base d is preferred for maintainability.
Dry Run & Debugging
Preview execution (text):
zyra run pipeline.yaml --dry-run
Structured argv (JSON):
zyra run pipeline.yaml --dry-run --print-ar gv-format=json
Output structure:
[ {“stage”: 1, “name”: “acquire”, “argv”: [“zyra”, “acquire”, “http”, “https://…”]}, {“stage”: 2, “name”: “process”, “argv”: [“zyra”, “process”, “convert -format”, “-”, “netcdf”]} ]
Continue on error:
--continue-on-error
runs remaining stages even if one fails (returns the first non‑zero code at end).
Best Practices
Small fixtures: Use tiny test assets (
tests/testdata/demo.nc
) or stdin t o keep pipelines fast and CI‑friendly.Explicit streams: Use
"-"
in configs to chain stages via stdin/stdout ra ther than intermediate files.Backends: Favor
--output -
/--input -
for connectors; for S3/FTP, prefe r using full URLs when possible (e.g.,s3://bucket/key
).Optional deps: Heavy visualization (Cartopy/tiles) may require opt‑in and a writable cache (e.g., Natural Earth data). Guard such pipelines in CI.
Credentials: Never hard‑code secrets; rely on env/role‑based credentials f or S3/FTP/Vimeo.
Quick Reference
Run pipelines:
zyra run pipeline.yaml
Override examples:
Global:
--set var=TMP
Stage name:
--set processing.var=TMP
Debugging:
Dry run (text):
--dry-run
Dry run (JSON):
--dry-run --print-argv-format=json
Continue on error:
--continue-on-error