Help us shape the future of Go! Take the 2026 Go Developer Survey

solo-operator

module
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 5, 2026 License: Apache-2.0

README

solo-operator

GitHub Release GitHub License Go Version Build Application

The opinionated Kubernetes operator powering the Solo toolkit.

Table of Contents

Overview

Solo Operator automates the deployment and lifecycle management of Hedera consensus networks on Kubernetes. Built with Go using controller-runtime, it provides Custom Resource Definitions (CRDs) for managing all components of a Hedera network.

Custom Resources

Resource Scope Description
Orbit Cluster Network configuration and settings
ConsensusCapsule Namespace Hedera consensus node deployments
NetworkOperation Namespace Genesis, upgrade, and maintenance operations
HAProxyCapsule Namespace HAProxy load balancer for gRPC traffic
EnvoyProxy Namespace Envoy proxy for HTTP/gRPC routing

See the API Reference for detailed documentation.

Operator Installation

The Solo Operator provides several different methods for installation into a Kubernetes cluster.

Helm Chart

The Solo Operator Helm chart is published to two OCI registries on each release:

Registry URL
GitHub Container Registry (GHCR) oci://ghcr.io/hashgraph/charts
JFrog Artifactory oci://artifacts.hashgraph.io/solo-operator-helm-release
Helm Install (Latest Version)
# From GHCR (public)
helm install solo-operator oci://ghcr.io/hashgraph/charts/solo-operator --namespace solo-operator --create-namespace

# From JFrog Artifactory
helm install solo-operator oci://artifacts.hashgraph.io/solo-operator-helm-release/solo-operator --namespace solo-operator --create-namespace
Helm Install (Specific Version)
# From GHCR (public)
helm install solo-operator oci://ghcr.io/hashgraph/charts/solo-operator --version 0.2.0 --namespace solo-operator --create-namespace

# From JFrog Artifactory
helm install solo-operator oci://artifacts.hashgraph.io/solo-operator-helm-release/solo-operator --version 0.2.0 --namespace solo-operator --create-namespace
Helm Uninstall
helm uninstall solo-operator --namespace solo-operator
Kubernetes Manifest
KubeCtl Install (Latest Version)
kubectl apply -f https://github.com/hashgraph/solo-operator/releases/latest/download/deployment.yml
KubeCtl Install (Specific Version)
kubectl apply -f https://github.com/hashgraph/solo-operator/releases/download/v1.0.0/deployment.yml
KubeCtl Uninstall
kubectl delete -f https://github.com/hashgraph/solo-operator/releases/latest/download/deployment.yml

Application Development

Prerequisites
  • Go 1.25+
  • Kubernetes 1.28+
  • Task (optional, for build automation)
  • kubectl
  • Helm (for chart development)
Project Structure
.
├── api/v1alpha1/           # CRD type definitions
├── cmd/                    # Main entry point
├── config/
│   ├── crd/bases/          # Generated CRD manifests
│   ├── rbac/               # RBAC manifests
│   └── manager/            # Manager deployment
├── internal/
│   ├── controller/         # Reconciler implementations
│   ├── processor/          # Step-based task framework
│   ├── sequencer/          # Operation queue management
│   ├── subreconciler/      # Dependent resource pattern
│   ├── resources/          # Resource builders
│   └── operations/         # NetworkOperation processors
├── charts/solo-operator/   # Helm chart
├── docs/                   # Documentation
└── test/                   # Integration and E2E tests
Building
# Build with Task
task build

# Or with Go directly
go build -o bin/manager cmd/main.go

# Build Docker image
task docker:build
# Or: docker build -t solo-operator:latest .
Testing
# Run unit tests
task test
# Or: go test ./...

# Run with coverage
go test ./... -coverprofile=cover.out

# Run integration tests (requires envtest)
task test:integration

# Run E2E tests (requires kind cluster)
task test:e2e

# Run benchmarks
go test -bench=. ./test/benchmark/...
Code Generation
# Generate all (CRDs + DeepCopy)
task generate

# Generate CRD manifests only
task generate:manifests

# Generate DeepCopy methods only
task generate:deepcopy
Running Locally
# Install CRDs
kubectl apply -f config/crd/bases/

# Run the operator (uses current kubeconfig)
go run cmd/main.go

# With specific flags
go run cmd/main.go --leader-elect --metrics-bind-address=:8080
Linting
task lint
# Or: golangci-lint run

Configuration

The operator accepts the following flags:

Flag Description Default
--leader-elect Enable leader election for HA false
--metrics-bind-address Metrics endpoint address :8080
--health-probe-bind-address Health probe endpoint :8081
--zap-log-level Log level (debug, info, error) info
--zap-encoder Log encoder (json, console) console

Release Management

This project uses the semantic-release tool to automate the versioning and release processes. Version increments are determined by the conventional commits present in the commit history.

Creating a Release
  1. Ensure main branch contains conventional commit messages (e.g., fix:, feat:, BREAKING CHANGE:).
  2. Execute the Release: Deploy Artifact workflow.
  3. The workflow will:
    • Determine the next version using semantic-release
    • Create a release tag and GitHub release
    • Build and publish container images to ghcr.io/hashgraph/solo-operator and artifacts.hashgraph.io/solo-operator-docker-release/solo-operator
    • Publish Helm chart to oci://ghcr.io/hashgraph/charts/solo-operator and oci://artifacts.hashgraph.io/solo-operator-helm-release/solo-operator

Support

If you have a question on how to use the product, please see our support guide.

Contributing

Contributions are welcome. Please see the contributing guide to see how you can get involved.

Code of Conduct

This project is governed by the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code of conduct.

License

Apache License 2.0

Directories

Path Synopsis
api
v1alpha1
Package v1alpha1 contains API Schema definitions for the operator v1alpha1 API group +kubebuilder:object:generate=true +groupName=operator.solo.hedera.com
Package v1alpha1 contains API Schema definitions for the operator v1alpha1 API group +kubebuilder:object:generate=true +groupName=operator.solo.hedera.com
internal
resources/helmtest
Package helmtest provides a mock helm.Client for use in tests.
Package helmtest provides a mock helm.Client for use in tests.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL