render

package
v0.6.1 Latest Latest
Warning

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

Go to latest
Published: Apr 20, 2026 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Overview

Package render contains OPM render orchestration boundaries.

Index

Constants

View Source
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

View Source
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

func LoadReleaseFromPath(packageDir string) (cue.Value, string, error)

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.

func (PackageReleaseRenderer) Render

func (PackageReleaseRenderer) Render(
	ctx context.Context,
	packageDir string,
	prov *provider.Provider,
) (string, *RenderResult, error)

Render loads, detects kind, and renders a release package.

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:

  1. Synthesize a temporary CUE module with module.cue + release.cue.
  2. Load the package (CUE resolves dependencies from OCI registry).
  3. Extract module metadata and config schema from the loaded release.
  4. Inject values.
  5. Build release via ParseModuleRelease → ProcessModuleRelease. The controller's runtime identity is injected into each transformer's #context.#runtimeName via ProcessModuleRelease.
  6. Build inventory entries from rendered resources.

Jump to

Keyboard shortcuts

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