Skip to main content

Ostrich SDK

Deploy like an Ostrich! 🦩

Ostrich SDK is a powerful, template-driven application deployment engine and orchestration platform. It provides a unified interface for DevOps workflows, including template management, local containerized execution, remote SSH/Kubernetes orchestration, registry management, and plugin execution.

By leveraging parameterized template packages called osplates, developers can easily package, configure, and deploy application architectures across diverse environments without managing low-level orchestration configurations directly.


🚀 Key Features

  • Template-driven (Osplates): Build once, deploy anywhere using customizable parameters and templates.
  • Jinja2 Templating Engine: Parameterize configurations safely using custom Jinja2 delimiters ([[ and ]]) to avoid conflicts with Helm or Kubernetes syntax.
  • Docker/Podman Sandbox: Execute deployment tasks locally within isolated containers without cluttering host machines with toolchains (Helm, Kubernetes CLI, jq, yq, etc.).
  • Remote K8s/SSH Orchestration: Deploy and manage workloads on remote Kubernetes endpoints over secure SSH tunnel connections using ostr.
  • Registry & OCI Management: Built-in commands to authenticate, list, pull, and push OCI registry images and packages.
  • Plugin Architecture: Define modular application lifecycles with declarative task definitions in ostrich.yaml.

🏗️ System Architecture Overview

The Ostrich SDK is composed of three primary components:

  1. ost-core (The Engine): A Python 3 execution engine (ost) that processes templates, resolves configuration parameters, and executes deployment tasks using flexible runners (inprocess, shell, container).
  2. ostd (Local Container CLI): A compiled Go utility that launches the ost engine inside a local Docker/Podman container, mounting workspace files and host credential configs (e.g., .kube/config, .docker/config.json) seamlessly.
  3. ostr (Remote K8s CLI): A compiled Go utility that connects to an SSH-enabled agent pod running inside a remote Kubernetes cluster to sync files and execute ost deployment tasks remotely.

🚀 Quickstart

1. Build and Install CLIs

To build the CLI binaries (ostd and ostr), run the build script:

./scripts/build.sh

The compiled binaries for Linux, macOS, and Windows will be placed in the bin/ directory. Copy the appropriate binaries to your system PATH (e.g. /usr/local/bin/).

2. Installing Python Engine via pip

To install the ost Python CLI and engine directly from PyPI:

pip install ostrich-sdk

Or install from local repository source:

# Install locally in editable mode
pip install -e .

# Or install standard package from local source
pip install .

Verify the installation:

ost --version
ost help

📘 Developer Guide: For instructions on setting up PyPI publishing credentials and automated GitHub Action releases, see PYPI.md.

3. Running Tasks Locally with ostd

Using ostd allows you to execute deployment tasks locally without setting up the core Python environment on your host machine.

# Check version
ostd --version

# Show current default Docker image
ostd image show

# Set custom default Docker image & tag
ostd image ghcr.io/rockops/ostrich-sdk:0.2.1

# Remove custom image setting (revert to default)
ostd image --rm

# List available templates
ostd template list

# Inspect template details
ostd template describe <template-name>

# Generate a sample configuration file
ostd template config <template-name>

# Dry run deployment task
ostd -dr run deploy

# Execute deployment task
ostd run deploy

3. Running Tasks Remotely with ostr

ostr lets you orchestrate deployments on a remote Kubernetes cluster containing an Ostrich SDK agent.

# Initialize connection to remote endpoint
ostr init <endpoint_name> <ip_address>

# Manage and select active endpoints
ostr endpoint list
ostr endpoint select <endpoint-name>

# Synchronize local files and execute task remotely
ostr run deploy

# Open interactive remote shell
ostr ssh

🛠️ Plugin & Osplate Development

Plugin Structure (ostrich.yaml)

Applications managed by Ostrich SDK define their lifecycle using an ostrich.yaml descriptor in the root directory:

  • Metadata: Name, version, description, and dependencies.
  • Template / Osplate Kind: Specifies the osplate blueprint to extend.
  • Tasks: Pre-defined operations (e.g., deploy, package, test) consisting of execution steps.
  • Configuration: Custom template variables and default parameter overrides.

Example ostrich.yaml

name: my-plugin
version: 1.0.0
description: Custom application plugin

tasks:
  deploy:
    description: Deploy application to Kubernetes
    steps:
      - name: Build Docker image
        run: docker build -t my-image .
      - name: Push to registry
        run: docker push my-image
      - name: Deploy to Kubernetes
        run: kubectl apply -f k8s/

📦 Registry & Operations Reference

Standard Commands

Command Description
init Setup connection to a remote endpoint
endpoint Manage endpoints (list, select, set)
ssh Open interactive shell on remote endpoint
put Upload files to remote endpoint
docker Run docker commands remotely
kubectl Run kubectl commands remotely
run Execute a task defined in a plugin/osplate
cert install Install a trusted certificate remotely
host Add a host entry remotely
version Display version information

Template Operations

Command Description
template list List available plugin templates (osplates)
template describe <name> Get detailed information about a template
template config <name> Generate sample configuration file

Registry Operations

Command Description
registry login <url> Authenticate with an OCI registry
registry ls <url> List images in a registry
registry pull <image> Pull an image from registry
registry push <image> Push an image to registry

⚙️ Configuration & Environment

Global Configuration

# Display current configuration
ost config get

# Set configuration key-value
ost config set <key> <value>

Environment Variables

Variable Description
PRIVATE_DOCKER_REGISTRY Default private Docker registry URL
PRIVATE_HELM_REGISTRY Default private Helm registry URL
KUBECONFIG Path to host Kubernetes configuration file

📚 Documentation & Reference

For additional technical specifications, architectural details, and guides:


🤝 Contributing & Support

Contributions are welcome! Please refer to CLAUDE.md for development rules and guidelines.

For issues and support, please open an issue on the GitHub repository.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ostrich_sdk-0.2.3.tar.gz (56.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ostrich_sdk-0.2.3-py3-none-any.whl (71.3 kB view details)

Uploaded Python 3

File details

Details for the file ostrich_sdk-0.2.3.tar.gz.

File metadata

  • Download URL: ostrich_sdk-0.2.3.tar.gz
  • Upload date:
  • Size: 56.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ostrich_sdk-0.2.3.tar.gz
Algorithm Hash digest
SHA256 24a2d894f951381d492172e3149f15afa7bb72c5ef19724e2e4651512677d2f6
MD5 e8653eeebbc7aaf7bde0e19aca933af0
BLAKE2b-256 dc9b5f7e4b06765dff8c5eaaaa2ef3970234ef7dc4d4db0f60c7a251f1aac32f

See more details on using hashes here.

Provenance

The following attestation bundles were made for ostrich_sdk-0.2.3.tar.gz:

Publisher: pypi-publish.yml on rockops/ostrich-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ostrich_sdk-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: ostrich_sdk-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 71.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ostrich_sdk-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 74aed6d45e541d66c6e2c9186f3635c31ff14e423b4a000e276b2fafe0695aaa
MD5 887ae2a37a21225b95c16f04497dd83a
BLAKE2b-256 33eb81d70e017e45a3611aa91dc29d808d243305a08c8cb089f98d47a636d102

See more details on using hashes here.

Provenance

The following attestation bundles were made for ostrich_sdk-0.2.3-py3-none-any.whl:

Publisher: pypi-publish.yml on rockops/ostrich-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.2.8

2 files

0.2.7

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

This release

0.2.3 This release

2 files

0.2.1

2 files

0.2.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page