NoETL CLI (Rust) - Command-line interface for NoETL workflow automation
Project description
NoETL CLI
NoETL workflow automation CLI - Execute playbooks locally or orchestrate distributed server-worker pipelines.
Installation
Via Cargo
cargo install noetl
Via Homebrew (macOS)
brew tap noetl/tap
brew install noetl
Via APT (Ubuntu/Debian)
echo 'deb [trusted=yes] https://noetl.github.io/apt jammy main' | sudo tee /etc/apt/sources.list.d/noetl.list
sudo apt-get update
sudo apt-get install noetl
Quick Start
Create a simple playbook:
# hello.yaml
apiVersion: noetl.io/v2
kind: Playbook
metadata:
name: hello_world
workflow:
- step: start
tool:
kind: shell
cmds:
- "echo 'Hello from NoETL!'"
next:
- step: end
- step: end
Run it:
noetl run hello.yaml
Features
- Local Playbook Execution - Run workflows without server infrastructure
- HTTP Actions - Make REST API calls with automatic pagination
- Conditional Flow - Dynamic routing with case/when/then/else
- Playbook Composition - Call sub-playbooks for modularity
- Server/Worker Management - Start/stop distributed services
- Kubernetes Operations - Deploy to K8s clusters
- Database Management - Initialize and validate schemas
Usage
Check version:
noetl --version
Local Execution
# Run playbook locally
noetl run playbook.yaml
# Pass variables
noetl run playbook.yaml --set env=prod --set version=v2.5.5
# Verbose output
noetl run playbook.yaml --verbose
Server Management
Start NoETL server:
noetl server start
noetl server start --init-db # Initialize database on startup
Stop NoETL server:
noetl server stop
noetl server stop --force # Force stop without confirmation
Worker Management
Start NoETL worker:
noetl worker start
noetl worker start --max-workers 4
Stop NoETL worker:
noetl worker stop # Interactive selection if multiple workers
noetl worker stop --name my-worker
noetl worker stop --name my-worker --force
Database Management
Initialize database schema:
noetl db init
Validate database schema:
noetl db validate
Build Management
Build NoETL Docker image:
noetl build
noetl build --no-cache # Build without using cache
The build command:
- Builds the Docker image with a timestamp-based tag
- Saves the tag to
.noetl_last_build_tag.txtfor deployment use - Streams build output to console
- Replaces
task docker-build-noetl
Kubernetes Management
Deploy NoETL to kind cluster:
noetl k8s deploy
Remove NoETL from cluster:
noetl k8s remove
Rebuild and redeploy:
noetl k8s redeploy
noetl k8s redeploy --no-cache # Rebuild without cache
Full reset (schema reset + redeploy + test setup):
noetl k8s reset
noetl k8s reset --no-cache # Reset with clean build
The k8s commands:
deploy: Applies Kubernetes manifests to kind clusterremove: Deletes NoETL resources from clusterredeploy: Builds image, loads to kind, and deploys (replacestask noetl:k8s:redeploy)reset: Full workflow - resets database schema, redeploys, runs test setup (replacestask noetl:k8s:reset)
Configuration and Contexts
noetl supports multiple contexts to manage different server environments.
Add a Context
noetl context add local --server-url http://localhost:8082 --set-current
noetl context add prod --server-url http://noetl-server:8082
List Contexts
noetl context list
Switch Context
noetl context use prod
Show Current Context
noetl context current
CLI Mode
Catalog Management
Register a resource (auto-detects kind: Credential or Playbook):
noetl catalog register tests/fixtures/playbooks/data_transfer/http_to_postgres_transfer/http_to_postgres_transfer.yaml
Get resource details:
noetl catalog get tests/fixtures/playbooks/data_transfer/http_iterator_save_postgres
List resources:
noetl catalog list Playbook --json
Execution
Execute a playbook:
noetl execute playbook tests/fixtures/playbooks/regression_test/master_regression_test --json
Get execution status:
noetl execute status 522107710393811426 --json
Credentials
Get credential details:
noetl get credential gcs_service_account --include-data
SQL Query Execution
Execute SQL queries via NoETL Postgres API:
# Query with table format (default)
noetl query "SELECT * FROM noetl.keychain LIMIT 5"
# Query with specific schema
noetl query "SELECT execution_id, credential_name FROM noetl.keychain WHERE execution_id = 12345" --schema noetl
# Query with JSON output
noetl query "SELECT * FROM noetl.event ORDER BY created_at DESC LIMIT 10" --format json
# Query public schema tables
noetl query "SELECT * FROM users LIMIT 5" --schema public --format table
Output Formats:
table(default): Formatted ASCII table with bordersjson: Pretty-printed JSON output
Example Output (table format):
┌────────────────────┬────────────────┬──────────────┐
│ execution_id │ credential_name│ access_count │
├────────────────────┼────────────────┼──────────────┤
│ 507861119290048685 │ openai-api-key │ 0 │
│ 507861119290048686 │ postgres-creds │ 2 │
└────────────────────┴────────────────┴──────────────┘
(2 rows)
Registering (Legacy/Explicit)
Register a Credential:
noetl register credential -f tests/fixtures/credentials/pg_k8s.json
Register a Playbook:
noetl register playbook -f tests/fixtures/playbooks/api_integration/auth0/provision_auth_schema.yaml
Direct Execution/Status/List
Execute a Playbook:
noetl run playbook api_integration/auth0/provision_auth_schema
Get Execution Status:
noetl status <execution_id>
List Resources:
noetl list Playbook
Interactive TUI Mode
Run noetl with the -i or --interactive flag:
noetl --interactive
- Navigation: Use Up/Down arrows or
j/kto navigate lists. - Refresh: Press
rto refresh the data. - Quit: Press
qto exit.
Docker Integration
The noetl binary is built into the Docker image using a multi-stage build:
# Rust builder stage compiles the CLI
FROM rust:1.75-slim as rust-builder
WORKDIR /build
COPY noetlctl/ ./
RUN cargo build --release
# Production stage includes the binary
COPY --from=rust-builder /build/target/release/noetl /usr/local/bin/noetl
The Kubernetes manifests use the Rust CLI for server and worker management:
Server deployment:
command: ["noetl"]
args: ["server", "start"]
Worker deployment:
command: ["noetl"]
args: ["worker", "start"]
This provides a unified binary for both local development and containerized deployments.
Command Mapping
The Rust CLI replaces several task commands:
| Task Command | noetl Command |
|---|---|
task docker-build-noetl |
noetl build |
task noetl:k8s:deploy |
noetl k8s deploy |
task noetl:k8s:redeploy |
noetl k8s redeploy |
task noetl:k8s:reset |
noetl k8s reset |
task noetl:server:start |
noetl server start |
task noetl:worker:start |
noetl worker start |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file noetlctl-2.5.10.tar.gz.
File metadata
- Download URL: noetlctl-2.5.10.tar.gz
- Upload date:
- Size: 65.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8b7635bfebc708c9efff7e3c6cdafe110d9c83c6569f8a331d8f331f4f67d40
|
|
| MD5 |
cd5a5a0aa3a001cb561c6db1309ad3bd
|
|
| BLAKE2b-256 |
8328d1d06862292ecc7483e8476a438c86cd01319afe4a42b756a80c89a698d9
|
File details
Details for the file noetlctl-2.5.10-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: noetlctl-2.5.10-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 13.7 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40be3579fe455a62b19ad6d90602f62286641ecd86cca1022a5d4944874379f8
|
|
| MD5 |
b423bb16427e2c398b45cb312d684a59
|
|
| BLAKE2b-256 |
84d8ad56e5ef4ba4c2737ed54cd6253d1fe343599f252d7592dcb04a6f1ce89f
|