Files
horus/docs/runner/sal.md
2025-11-14 11:00:26 +01:00

2.6 KiB

SAL Runner

System Abstraction Layer runner for system-level operations.

Overview

The SAL runner executes Rhai scripts with access to system abstraction modules for OS operations, infrastructure management, and cloud provider interactions.

Features

  • Rhai Scripting: Execute Rhai scripts with SAL modules
  • System Operations: File, process, and network management
  • Infrastructure: Kubernetes, VM, and container operations
  • Cloud Providers: Hetzner and other cloud integrations
  • Database Access: Redis and Postgres client operations
  • Networking: Mycelium and network configuration

Available SAL Modules

Core Modules

  • sal-os: Operating system operations
  • sal-process: Process management
  • sal-text: Text processing utilities
  • sal-net: Network operations

Infrastructure

  • sal-virt: Virtualization management
  • sal-kubernetes: Kubernetes cluster operations
  • sal-zinit-client: Zinit process manager

Storage & Data

  • sal-redisclient: Redis operations
  • sal-postgresclient: PostgreSQL operations
  • sal-vault: Secret management

Networking

  • sal-mycelium: Mycelium network integration

Cloud Providers

  • sal-hetzner: Hetzner cloud operations

Version Control

  • sal-git: Git repository operations

Usage

# Start the runner
runner_sal my-sal-runner

# With custom Redis
runner_sal my-sal-runner --redis-url redis://custom:6379

Job Payload

The payload should contain a Rhai script using SAL modules:

// Example: List files
let files = os.list_dir("/tmp");
print(files);

// Example: Process management
let pid = process.spawn("ls", ["-la"]);
let output = process.wait(pid);
print(output);

Examples

File Operations

// Read file
let content = os.read_file("/path/to/file");
print(content);

// Write file
os.write_file("/path/to/output", "Hello World");

Kubernetes Operations

// List pods
let pods = k8s.list_pods("default");
for pod in pods {
    print(pod.name);
}

Redis Operations

// Set value
redis.set("key", "value");

// Get value
let val = redis.get("key");
print(val);

Git Operations

// Clone repository
git.clone("https://github.com/user/repo", "/tmp/repo");

// Get status
let status = git.status("/tmp/repo");
print(status);

Requirements

  • Redis server accessible
  • System permissions for requested operations
  • Valid job signatures
  • SAL modules available in runtime

Security Considerations

  • SAL operations have system-level access
  • Jobs must be from trusted sources
  • Signature verification is mandatory
  • Limit runner permissions in production