467 lines
12 KiB
Markdown
Raw Permalink Normal View History

# Orchestrator Plugin Usage Examples
This document provides comprehensive examples for using the `nu_plugin_orchestrator` plugin.
## Installation
First, register the plugin with Nushell:
```bash
# Build the plugin
cd provisioning/core/plugins/nushell-plugins/nu_plugin_orchestrator
cargo build --release
# Register with Nushell
plugin add target/release/nu_plugin_orchestrator
```
## Commands Overview
The plugin provides three main commands:
1. **`orch status`** - Get orchestrator status from local state
2. **`orch validate`** - Validate workflow KCL files
3. **`orch tasks`** - List orchestrator tasks from local queue
---
## 1. Checking Orchestrator Status
### Basic Status Check
```nushell
orch status
```
**Output:**
```
╭─────────────────┬────────────────────────────────────────────────────────╮
│ running │ false │
│ tasks_pending │ 5 │
│ tasks_running │ 2 │
│ tasks_completed │ 10 │
│ last_check │ 2025-10-09T12:00:00Z │
│ data_dir │ provisioning/platform/orchestrator/data │
╰─────────────────┴────────────────────────────────────────────────────────╯
```
### Custom Data Directory
```nushell
orch status --data-dir /custom/path/to/orchestrator/data
```
### Format as JSON
```nushell
orch status | to json
```
**Output:**
```json
{
"running": false,
"tasks_pending": 5,
"tasks_running": 2,
"tasks_completed": 10,
"last_check": "2025-10-09T12:00:00Z",
"data_dir": "provisioning/platform/orchestrator/data"
}
```
### Check if Orchestrator is Running
```nushell
if (orch status | get running) {
print "Orchestrator is running"
} else {
print "Orchestrator is not running"
}
```
---
## 2. Validating Workflow Files
### Basic Validation
```nushell
orch validate test-workflow.k
```
**Output (Valid):**
```
╭──────────┬──────╮
│ valid │ true │
│ errors │ [] │
│ warnings │ [] │
╰──────────┴──────╯
```
**Output (Invalid):**
```
╭──────────┬─────────────────────────────────────────────────────────────╮
│ valid │ false │
│ errors │ ["File not found: nonexistent.k"] │
│ warnings │ [] │
╰──────────┴─────────────────────────────────────────────────────────────╯
```
### Strict Validation
Strict mode performs additional checks for required fields:
```nushell
orch validate workflow.k --strict
```
**Output:**
```
╭──────────┬──────────────────────────────────────────────────────────╮
│ valid │ false │
│ errors │ ["Missing 'operations' field (required)"] │
│ warnings │ ["Missing 'name' field", "Missing 'version' field"] │
╰──────────┴──────────────────────────────────────────────────────────╯
```
### Validation Pipeline
```nushell
# Validate and check if valid
orch validate workflow.k | if $in.valid {
print "✓ Workflow is valid"
} else {
print "✗ Workflow has errors"
}
# Validate multiple files
ls workflows/*.k | each { |file|
let result = (orch validate $file.name)
{
file: $file.name,
valid: $result.valid,
error_count: ($result.errors | length)
}
}
```
### Extract Validation Errors
```nushell
# Show only errors
orch validate workflow.k | get errors
# Show errors and warnings
let result = (orch validate workflow.k --strict)
print $"Errors: ($result.errors)"
print $"Warnings: ($result.warnings)"
```
---
## 3. Listing Tasks
### List All Tasks
```nushell
orch tasks
```
**Output:**
```
╭───┬──────────┬──────────┬──────────┬──────────────────────┬──────────────╮
│ # │ id │ status │ priority │ created_at │ workflow_id │
├───┼──────────┼──────────┼──────────┼──────────────────────┼──────────────┤
│ 0 │ task-001 │ pending │ 10 │ 2025-10-09T10:00:00Z │ workflow-123 │
│ 1 │ task-002 │ running │ 8 │ 2025-10-09T10:30:00Z │ workflow-123 │
│ 2 │ task-003 │ pending │ 5 │ 2025-10-09T11:00:00Z │ │
╰───┴──────────┴──────────┴──────────┴──────────────────────┴──────────────╯
```
### Filter by Status
```nushell
# Show only pending tasks
orch tasks --status pending
# Show only running tasks
orch tasks --status running
# Show only completed tasks
orch tasks --status completed
```
### Limit Results
```nushell
# Show only first 10 tasks
orch tasks --limit 10
# Show top 5 pending tasks
orch tasks --status pending --limit 5
```
### Combine Filters
```nushell
# Top 3 pending tasks
orch tasks --status pending --limit 3
```
### Task Analysis
```nushell
# Count tasks by status
orch tasks | group-by status | each { |key, items|
{status: $key, count: ($items | length)}
}
# Find high-priority tasks
orch tasks | where priority > 7
# Tasks without workflow
orch tasks | where workflow_id == null
# Tasks created in last hour
orch tasks | where created_at > ((date now) - 1hr)
```
### Export to JSON
```nushell
# Export all tasks
orch tasks | to json > tasks.json
# Export pending tasks
orch tasks --status pending | to json > pending-tasks.json
```
---
## Advanced Usage Examples
### Monitoring Dashboard
```nushell
def orch-dashboard [] {
let status = (orch status)
let tasks = (orch tasks)
print $"╭─────────────────────────────────────╮"
print $"│ Orchestrator Dashboard │"
print $"╰─────────────────────────────────────╯"
print ""
print $"Status: ($status.running | if $in { '🟢 Running' } else { '🔴 Stopped' })"
print $"Pending: ($status.tasks_pending)"
print $"Running: ($status.tasks_running)"
print $"Completed: ($status.tasks_completed)"
print ""
let by_status = ($tasks | group-by status | each { |key, items|
{status: $key, count: ($items | length)}
})
print "Tasks by Status:"
$by_status | table
}
orch-dashboard
```
### Validation Report
```nushell
def validate-all-workflows [] {
ls workflows/*.k | each { |file|
let result = (orch validate $file.name --strict)
{
file: ($file.name | path basename),
valid: $result.valid,
errors: ($result.errors | length),
warnings: ($result.warnings | length)
}
} | table
}
validate-all-workflows
```
### Task Queue Monitor
```nushell
def monitor-queue [interval: duration = 5sec] {
loop {
clear
print $"Last updated: (date now)"
print ""
orch tasks | table
sleep $interval
}
}
monitor-queue
```
### Automatic Workflow Validation
```nushell
def submit-workflow [workflow: string] {
let validation = (orch validate $workflow --strict)
if $validation.valid {
print $"✓ Workflow ($workflow) is valid"
# Submit to orchestrator
# http post http://localhost:8080/workflows/batch/submit ...
} else {
print $"✗ Workflow ($workflow) has errors:"
$validation.errors | each { |err| print $" - ($err)" }
error make {msg: "Workflow validation failed"}
}
}
submit-workflow test-workflow.k
```
---
## Environment Variables
The plugin respects the following environment variables:
- **`ORCHESTRATOR_DATA_DIR`**: Override default data directory
```bash
export ORCHESTRATOR_DATA_DIR=/custom/orchestrator/data
orch status
```
---
## Data Directory Structure
The plugin expects the following directory structure:
```
provisioning/platform/orchestrator/data/
├── status.json # Orchestrator status
└── tasks/ # Task queue
├── task-001.json
├── task-002.json
└── task-003.json
```
### Status File Format (`status.json`)
```json
{
"running": true,
"tasks_pending": 5,
"tasks_running": 2,
"tasks_completed": 10,
"last_check": "2025-10-09T12:00:00Z"
}
```
### Task File Format (`task-XXX.json`)
```json
{
"id": "task-001",
"status": "pending",
"created_at": "2025-10-09T10:00:00Z",
"priority": 10,
"workflow_id": "workflow-123"
}
```
---
## Troubleshooting
### Plugin Not Found
If you get "command not found", ensure the plugin is registered:
```bash
plugin list | where name == nu_plugin_orchestrator
```
If not listed, register it:
```bash
plugin add target/release/nu_plugin_orchestrator
```
### Data Directory Not Found
If status.json or tasks directory doesn't exist, the plugin returns default values:
```nushell
orch status # Returns default status with 0 tasks
orch tasks # Returns empty list
```
Create the directory structure:
```bash
mkdir -p provisioning/platform/orchestrator/data/tasks
```
### KCL Validation Fails
Ensure `kcl` is in your PATH:
```bash
which kcl
kcl --version
```
---
## Integration Examples
### With CI/CD
```yaml
# .gitlab-ci.yml
validate-workflows:
script:
- nu -c "ls workflows/*.k | each { |f| orch validate $f.name --strict }"
```
### With Nushell Scripts
```nushell
# deploy.nu
use std assert
def main [workflow: string] {
# Validate workflow
let validation = (orch validate $workflow --strict)
assert ($validation.valid) "Workflow validation failed"
# Check orchestrator is running
let status = (orch status)
assert ($status.running) "Orchestrator is not running"
# Submit workflow
print "Submitting workflow..."
# ... submit logic ...
}
```
---
## Performance Notes
- **`orch status`**: Reads single JSON file (~1ms)
- **`orch tasks`**: Walks task directory, O(n) for n tasks (~10ms for 1000 tasks)
- **`orch validate`**: Spawns `kcl` process (~50-100ms depending on workflow size)
---
## See Also
- [Orchestrator Architecture](/.claude/features/orchestrator-architecture.md)
- [Batch Workflow System](/.claude/features/batch-workflow-system.md)
- [KCL Idiomatic Patterns](/.claude/kcl_idiomatic_patterns.md)