Documentation
¶
Overview ¶
Package render contains OPM render orchestration boundaries.
Index ¶
Constants ¶
const ( KindModuleRelease = "ModuleRelease" KindBundleRelease = "BundleRelease" )
Kind constants surface the CUE `kind` field so the reconciler can dispatch to the appropriate pipeline without re-evaluating the value.
Variables ¶
var ErrUnsupportedKind = errors.New("unsupported release kind")
ErrUnsupportedKind indicates the loaded CUE value has a `kind` field that this controller cannot render (e.g., BundleRelease, which is not yet implemented).
Functions ¶
func LoadReleaseFromPath ¶
LoadReleaseFromPath evaluates the CUE package at packageDir and returns the raw CUE value along with the detected `kind` field. CUE module dependencies are resolved from the registry set via CUE_REGISTRY.
Types ¶
type BundleRenderer ¶
type BundleRenderer any
BundleRenderer derives child module releases from bundle input.
type ModuleRenderer ¶
type ModuleRenderer interface {
RenderModule(
ctx context.Context,
name, namespace, modulePath, moduleVersion string,
values *releasesv1alpha1.RawValues,
prov *provider.Provider,
) (*RenderResult, error)
}
ModuleRenderer is the injection boundary for module rendering in the reconcile loop. Production wires RegistryRenderer; tests wire a stub that returns a pre-built RenderResult without requiring an OCI registry.
type PackageReleaseRenderer ¶
type PackageReleaseRenderer struct{}
PackageReleaseRenderer is the production ReleaseRenderer. It evaluates the CUE package, detects kind, and dispatches to the ModuleRelease pipeline. BundleRelease returns ErrUnsupportedKind.
type RegistryRenderer ¶
type RegistryRenderer struct{}
RegistryRenderer is the production implementation that resolves and renders modules from an OCI registry via RenderModuleFromRegistry.
func (*RegistryRenderer) RenderModule ¶
func (r *RegistryRenderer) RenderModule( ctx context.Context, name, namespace, modulePath, moduleVersion string, values *releasesv1alpha1.RawValues, prov *provider.Provider, ) (*RenderResult, error)
RenderModule delegates to RenderModuleFromRegistry.
type ReleaseRenderer ¶
type ReleaseRenderer interface {
Render(ctx context.Context, packageDir string, prov *provider.Provider) (kind string, result *RenderResult, err error)
}
ReleaseRenderer loads a CUE release package from a local directory (already extracted from a Flux artifact) and returns its kind plus render output. Production wires PackageReleaseRenderer; tests inject a stub.
type RenderResult ¶
type RenderResult struct {
// Resources is the ordered list of rendered Kubernetes resources.
Resources []*core.Resource
// InventoryEntries are the CRD-typed inventory entries built from Resources.
InventoryEntries []releasesv1alpha1.InventoryEntry
// Warnings are non-fatal render warnings (e.g., unhandled traits).
Warnings []string
}
RenderResult holds the output of a successful RenderModule call. Contains both the rendered resources and their inventory entries, giving the caller everything needed for apply + inventory in one call.
func RenderLoadedModuleRelease ¶
func RenderLoadedModuleRelease( ctx context.Context, raw cue.Value, packageDir string, prov *provider.Provider, ) (*RenderResult, error)
RenderLoadedModuleRelease runs the ModuleRelease render pipeline on a pre-loaded CUE value (evaluated via LoadReleaseFromPath). The value must have kind == "ModuleRelease". Used by the Release reconciler where the CUE package is delivered via a Flux artifact.
func RenderModuleFromRegistry ¶
func RenderModuleFromRegistry( ctx context.Context, name, namespace, modulePath, moduleVersion string, values *releasesv1alpha1.RawValues, prov *provider.Provider, ) (*RenderResult, error)
RenderModuleFromRegistry synthesizes a #ModuleRelease CUE package that imports the target module from an OCI registry via CUE's native module system. This is the primary render path for the controller.
The flow:
- Synthesize a temporary CUE module with module.cue + release.cue.
- Load the package (CUE resolves dependencies from OCI registry).
- Extract module metadata and config schema from the loaded release.
- Inject values.
- Build release via ParseModuleRelease → ProcessModuleRelease. The controller's runtime identity is injected into each transformer's #context.#runtimeName via ProcessModuleRelease.
- Build inventory entries from rendered resources.