- Go 96.4%
- Makefile 3.2%
- Dockerfile 0.4%
| .forgejo/workflows | ||
| api/v1alpha1 | ||
| cmd/worker | ||
| config/crd/bases | ||
| db | ||
| docs | ||
| internal | ||
| wire | ||
| .gitignore | ||
| .goreleaser.yaml | ||
| docker-compose.yaml | ||
| Dockerfile | ||
| Dockerfile.goreleaser | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| main.go | ||
| Makefile | ||
| README.md | ||
| renovate.json | ||
kcp-opg-ewbi-provider
Direct E/WBI provider for the operator-federation.edge-portal.eu/v1alpha1 APIExport.
Translates tenant federation intent directly into GSMA OPG.04 E/WBI HTTP toward
peer operators, bypassing the opg.ewbi.nby.one Katalis CR-mirror layer.
This is the projection variant of the three-layer federation model described in ADR-0037: customer CRDs remain the canonical state; an internal domain model + Temporal workflow engine drive the E/WBI protocol outward; CRs are never used as the wire representation.
Sibling of kcp-katalis-provider. Both providers reconcile the same APIExport
and are distinguished per CR via spec.providerRef.kind=EwbiDirectProvider
(immutable post-creation, guarded by the managed-by annotation — invariants
BP-3 / BP-7).
Status
M1 \u2014 OpenAPI codegen pipeline + ACL enforcement. wire/ is a
separate Go module with pinned OPG.04 v1.3.0 types generated via
oapi-codegen. The main module requires wire/ only via a local
replace directive; only internal/mapper/ imports it; make verify-acl (wired into CI) fails the build if any other package
imports a wire type. Subsequent milestones land per the plan.
References
- Plan:
edge-connect-architecture/plans/14-kcp-opg-ewbi-provider.md - Invariants:
edge-connect-architecture/invariants/FB-04b.md - ADR:
edge-connect-architecture/adr/0037-direct-ewbi-provider.md - Perplexity feedback (v1 \u2192 v2):
edge-connect-architecture/plans/_perplexity-feedback-2026-05/14-kcp-opg-ewbi-provider.md
Layout
.
├── main.go entry point
├── api/v1alpha1/ EwbiDirectProvider CRD types
├── config/crd/bases/ authored CRD manifests
├── internal/
│ ├── controller/ reconcilers (M1+)
│ ├── domain/ internal model (M1+) \u2014 MUST NOT import wire/
│ └── mapper/ domain \u2194 wire translation (M1+)
├── wire/ OpenAPI-generated types (separate Go module per D7)
├── Dockerfile local dev build
├── Dockerfile.goreleaser distroless runtime image for releases
└── .goreleaser.yaml release pipeline
The wire/ directory is a separate Go module with its own go.mod. The main
module deliberately does not declare it as a dependency \u2014 only the internal/mapper/
package will (introduced in M1). This is the compile-time enforcement of the
anti-corruption layer (CP-2).
Build
make build # → bin/kcp-opg-ewbi-provider
make test
make vet
License
Apache 2.0. See LICENSE.