Upstream: eclipse-iofog/iofog-operator · Datasance mirror: Datasance/iofog-operator
Kubernetes operator for Eclipse ioFog and Datasance PoT control planes. It reconciles ControlPlane custom resources to deploy Controller, Router, NATS, and related cluster resources. Application workloads are deployed via potctl, iofogctl, or the ioFog Go SDK - not through this operator.
Identical git tree; registry, CRD API group, and Helm index URL differ by mirror CI variables only.
| Mirror | Operator image | OLM bundle image |
|---|---|---|
| Eclipse ioFog (upstream) | ghcr.io/eclipse-iofog/operator |
ghcr.io/eclipse-iofog/operator-bundle |
| Datasance (PoT-facing) | ghcr.io/datasance/operator |
ghcr.io/datasance/operator-bundle |
Release tags use the semver without a v prefix (e.g. :3.8.0). Images, manifest tarballs, OLM bundles, and Helm charts publish on v* tags from each mirror's release.yml.
- Develop on
Datasance/iofog-operatorbranchdevelop(or feature branchesoperator/<plan>-<topic>). - Open PR to
eclipse-iofog/iofog-operatordevelop. - CI runs on
developand PRs - no GHCR push on branch builds. - After merge, tag identical
v*releases on both remotes;release.ymlpublishes images, manifest tarballs, OLM bundle, and Helm chart.
See CONTRIBUTING for CI repository variables and contributor workflow.
| Tool | Version |
|---|---|
| Kubernetes | 1.22+ |
| Go | 1.26.4 (see go.mod) |
| Helm | 3.x (for Helm install) |
v3.8.0 is a greenfield release. There is no in-place upgrade path from v3.7. Uninstall the legacy operator and CRDs before installing v3.8. The v3.8 operator manages ControlPlane resources only; the Application CRD and legacy auth fields are removed.
Choose the channel that matches your fleet - Eclipse (iofog.org/v3) or Datasance (datasance.com/v3). Artifacts are published to GitHub Releases and mirror-specific registries on v* tags.
Helm charts are published to each mirror's gh-pages index. The legacy standalone repo Datasance/helm (datasance.github.io/helm, chart pot) is deprecated - use the URLs below instead.
| Mirror | helm repo add URL |
|---|---|
| Eclipse ioFog | https://eclipse-iofog.github.io/iofog-operator |
| Datasance | https://datasance.github.io/iofog-operator |
# Eclipse example - use datasance.github.io URL for the Datasance mirror
helm repo add iofog-operator https://eclipse-iofog.github.io/iofog-operator
helm repo update
helm install iofog-operator iofog-operator/iofog-operator \
--namespace iofog-system --create-namespace \
--version 3.8.0GitHub Releases attach flavor-specific tarballs: manifests-iofog-<version>.tar.gz and manifests-datasance-<version>.tar.gz.
VERSION=3.8.0
FLAVOR=iofog # or datasance
curl -fsSL -o manifests.tar.gz \
"https://github.com/eclipse-iofog/iofog-operator/releases/download/v${VERSION}/manifests-${FLAVOR}-${VERSION}.tar.gz"
tar xzf manifests.tar.gz
kubectl apply -f "manifests-${FLAVOR}-${VERSION}/crds/"
kubectl apply -f "manifests-${FLAVOR}-${VERSION}/operator/install.yaml"Adapt and apply manifests-*/samples/controlplane.yaml for your cluster.
OLM bundles are published as container images (operator-bundle:<version>). Package iofog-operator, channel stable.
# Cluster must have OLM installed (Operator Lifecycle Manager)
VERSION=3.8.0
REGISTRY=ghcr.io/eclipse-iofog # or ghcr.io/datasance
operator-sdk run bundle "${REGISTRY}/operator-bundle:${VERSION}" \
--namespace iofog-system --timeout 5mFor catalog-based installs, index the bundle image from your mirror registry into an OperatorGroup-scoped catalog source.
make quality # lint + gosec + govulncheck
make build
make test
make run # off-cluster; uses KUBECONFIG and WATCH_NAMESPACELocal E2E (reconcile hot-path): see hack/local/README.md for the OrbStack/k3s checklist (make local-e2e-setup, make run, make local-scenarios).
Run make help for all targets (manifest generation, bundle, release tarballs).