crossplane

package
v0.8.1 Latest Latest
Warning

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

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

Documentation

Overview

Package crossplane contains interfaces and implementations for clients that talk to Kubernetes about Crossplane primitives, often by consuming clients from the kubernetes package.

Index

Constants

View Source
const (
	// CrossplaneAPIExtGroup is the Crossplane API extensions group.
	CrossplaneAPIExtGroup = "apiextensions.crossplane.io"
	// CrossplaneAPIExtGroupV1 is the v1 group/version for Crossplane API extensions.
	CrossplaneAPIExtGroupV1 = "apiextensions.crossplane.io/v1"
	// CrossplaneAPIExtGroupV2 is the v2 group/version for Crossplane API extensions.
	CrossplaneAPIExtGroupV2 = "apiextensions.crossplane.io/v2"
	// CrossplanePkgGroup is the Crossplane packages group.
	CrossplanePkgGroup = "pkg.crossplane.io"
	// CompositionKind is the kind for Compositions.
	CompositionKind = "Composition"
	// CompositionRevisionKind is the kind for CompositionRevisions.
	CompositionRevisionKind = "CompositionRevision"
	// FunctionKind is the kind for Crossplane Functions.
	FunctionKind = "Function"
)

Crossplane API group and kind constants used across the client package.

View Source
const CompositeResourceDefinitionKind = "CompositeResourceDefinition"

CompositeResourceDefinitionKind is the kind for Composite Resource Definitions.

View Source
const (
	// LabelCompositionName is the label key for the composition name on CompositionRevisions.
	LabelCompositionName = "crossplane.io/composition-name"
)

Variables

This section is empty.

Functions

func SchemaFromXRD added in v0.8.0

func SchemaFromXRD(xrd *un.Unstructured) ucomposite.Schema

SchemaFromXRD picks the composite.Schema (Legacy or Modern) for the given XRD by reading its spec.scope. Use this when you've already fetched the XRD for another reason (e.g. forwarding it to the render binary) and want to avoid the redundant cache lookup GetCompositeSchema would do.

The rule mirrors the render binary's own selectSchema (see crossplane/crossplane internal/render/composite/render.go): use spec.scope rather than the XRD's apiVersion. The apiserver round-trips XRDs through v1↔v2 conversion (a v1 XRD POSTed by the user can come back from a v2 list as kind v2), so apiVersion is unreliable. spec.scope is preserved verbatim: v1 XRDs default to "LegacyCluster" and stay there; v2 XRDs declare "Cluster" or "Namespaced" explicitly.

Types

type Clients

type Clients struct {
	Composition  CompositionClient
	Credential   CredentialClient
	Definition   DefinitionClient
	Environment  EnvironmentClient
	Function     FunctionClient
	ResourceTree ResourceTreeClient
}

Clients is an aggregation of all of our Crossplane clients, used to pass them as a bundle, typically for initialization where the consumer can select which ones they need.

func (*Clients) Initialize

func (c *Clients) Initialize(ctx context.Context, logger logging.Logger) error

Initialize initializes all the clients in this bundle.

type CompositionClient

type CompositionClient interface {
	core.Initializable

	// FindMatchingComposition finds a composition that matches the given XR or claim
	FindMatchingComposition(ctx context.Context, res *un.Unstructured) (*apiextensionsv1.Composition, error)

	// ListCompositions lists all compositions in the cluster
	ListCompositions(ctx context.Context) ([]*apiextensionsv1.Composition, error)

	// GetComposition gets a composition by name
	GetComposition(ctx context.Context, name string) (*apiextensionsv1.Composition, error)

	// FindComposites locates composites (XRs and Claims) that reference a composition.
	// `comp` is taken as the user-supplied unstructured Composition (typically loaded from a YAML
	// file); the client converts to a typed *apiextensionsv1.Composition internally only when
	// needed (i.e. in refs-mode, which reads spec.compositeTypeRef). Default-discovery only needs
	// comp.GetName() and avoids the conversion entirely so it isn't tripped by version skew or
	// unknown fields in the input file.
	//
	// When opts.Refs is non-empty, it performs ref-based lookup: each ref is resolved against the
	// composition's XR GVK (then claim GVK on 404 if the XRD defines a claim type). A ref is included
	// in the result only when (a) the cluster lookup succeeds AND (b) the resource references this
	// composition by name. Refs that don't satisfy both are silently omitted; callers derive
	// "unmatched" from the diff between input refs and returned objects. NotFound on per-ref XR/Claim
	// lookups is tolerated; non-NotFound transport errors propagate.
	//
	// When opts.Refs is empty, it performs default discovery scoped to opts.Namespace, listing all
	// XRs (and Claims, if the XRD defines them) of the appropriate GVK and filtering by composition.
	// XR/Claim list errors are tolerated (each list is best-effort and produces an empty bucket on
	// failure). However, the composition itself must be in the cluster cache: when GetComposition
	// returns NotFound (a net-new composition not yet applied), FindComposites returns that error to
	// the caller. Callers handle that case by treating it as "no affected XRs" — see
	// DiffComposition's default-discovery branch.
	FindComposites(ctx context.Context, comp *un.Unstructured, opts dtypes.FindCompositesOptions) ([]*un.Unstructured, error)
}

CompositionClient handles operations related to Compositions.

func NewCompositionClient

func NewCompositionClient(resourceClient kubernetes.ResourceClient, definitionClient DefinitionClient, logger logging.Logger) CompositionClient

NewCompositionClient creates a new DefaultCompositionClient.

type CompositionRevisionClient added in v0.3.0

type CompositionRevisionClient interface {
	core.Initializable

	// GetCompositionRevision gets a composition revision by name
	GetCompositionRevision(ctx context.Context, name string) (*apiextensionsv1.CompositionRevision, error)

	// ListCompositionRevisions lists all composition revisions in the cluster
	ListCompositionRevisions(ctx context.Context) ([]*apiextensionsv1.CompositionRevision, error)

	// GetLatestRevisionForComposition finds the latest revision for a given composition
	GetLatestRevisionForComposition(ctx context.Context, compositionName string) (*apiextensionsv1.CompositionRevision, error)

	// GetCompositionFromRevision extracts a Composition from a CompositionRevision
	GetCompositionFromRevision(revision *apiextensionsv1.CompositionRevision) *apiextensionsv1.Composition
}

CompositionRevisionClient handles operations related to CompositionRevisions.

func NewCompositionRevisionClient added in v0.3.0

func NewCompositionRevisionClient(resourceClient kubernetes.ResourceClient, logger logging.Logger) CompositionRevisionClient

NewCompositionRevisionClient creates a new DefaultCompositionRevisionClient.

type CredentialClient added in v0.6.0

type CredentialClient interface {
	// FetchCompositionCredentials extracts credential refs from a composition's pipeline steps
	// and fetches the referenced secrets from the cluster. Secrets that cannot be fetched
	// are silently skipped (they may be injected at runtime, e.g., workload identity).
	FetchCompositionCredentials(ctx context.Context, comp *apiextensionsv1.Composition) []corev1.Secret
}

CredentialClient handles fetching credentials referenced by composition pipelines.

func NewCredentialClient added in v0.6.0

func NewCredentialClient(resourceClient kubernetes.ResourceClient, logger logging.Logger) CredentialClient

NewCredentialClient creates a new DefaultCredentialClient.

type DefaultCompositionClient

type DefaultCompositionClient struct {
	// contains filtered or unexported fields
}

DefaultCompositionClient implements CompositionClient.

func (*DefaultCompositionClient) FindComposites added in v0.8.0

FindComposites dispatches to ref-based or listing-based discovery based on opts.Refs.

func (*DefaultCompositionClient) FindMatchingComposition

func (c *DefaultCompositionClient) FindMatchingComposition(ctx context.Context, res *un.Unstructured) (*apiextensionsv1.Composition, error)

FindMatchingComposition finds a composition matching the given resource.

func (*DefaultCompositionClient) GetComposition

GetComposition gets a composition by name.

func (*DefaultCompositionClient) Initialize

func (c *DefaultCompositionClient) Initialize(ctx context.Context) error

Initialize loads compositions into the cache.

func (*DefaultCompositionClient) ListCompositions

ListCompositions lists all compositions in the cluster.

type DefaultCompositionRevisionClient added in v0.3.0

type DefaultCompositionRevisionClient struct {
	// contains filtered or unexported fields
}

DefaultCompositionRevisionClient implements CompositionRevisionClient.

func (*DefaultCompositionRevisionClient) GetCompositionFromRevision added in v0.3.0

GetCompositionFromRevision extracts a Composition from a CompositionRevision. CompositionRevision contains the full Composition spec, so we construct a Composition object.

func (*DefaultCompositionRevisionClient) GetCompositionRevision added in v0.3.0

GetCompositionRevision gets a composition revision by name.

func (*DefaultCompositionRevisionClient) GetLatestRevisionForComposition added in v0.3.0

func (c *DefaultCompositionRevisionClient) GetLatestRevisionForComposition(ctx context.Context, compositionName string) (*apiextensionsv1.CompositionRevision, error)

GetLatestRevisionForComposition finds the latest revision for a given composition.

func (*DefaultCompositionRevisionClient) Initialize added in v0.3.0

Initialize prepares the composition revision client for use.

func (*DefaultCompositionRevisionClient) ListCompositionRevisions added in v0.3.0

ListCompositionRevisions lists all composition revisions in the cluster.

type DefaultCredentialClient added in v0.6.0

type DefaultCredentialClient struct {
	// contains filtered or unexported fields
}

DefaultCredentialClient implements CredentialClient.

func (*DefaultCredentialClient) FetchCompositionCredentials added in v0.6.0

func (c *DefaultCredentialClient) FetchCompositionCredentials(ctx context.Context, comp *apiextensionsv1.Composition) []corev1.Secret

FetchCompositionCredentials extracts credential references from a composition's pipeline steps and fetches the referenced secrets from the cluster. This enables functions to receive credentials for authentication (e.g., Azure Workload Identity for function-msgraph).

Secrets that cannot be fetched are silently skipped since they may be: - Injected at runtime by the cluster (e.g., workload identity) - Provided via CLI --function-credentials flag.

type DefaultDefinitionClient

type DefaultDefinitionClient struct {
	// contains filtered or unexported fields
}

DefaultDefinitionClient implements DefinitionClient.

func (*DefaultDefinitionClient) GetCompositeSchema added in v0.8.0

GetCompositeSchema returns the composite.Schema (Legacy or Modern) for the given XR or claim GVK by looking up the XRD and reading its spec.scope. LegacyCluster → SchemaLegacy (canonical fields under spec.*); Cluster or Namespaced → SchemaModern (canonical fields under spec.crossplane.*). Tries the XR path first; falls back to the claim path so the helper works for both. See the interface doc for why scope, not apiVersion, drives the decision.

func (*DefaultDefinitionClient) GetXRDForClaim

GetXRDForClaim finds the XRD that defines the given claim type.

func (*DefaultDefinitionClient) GetXRDForXR

GetXRDForXR finds the XRD that defines the given XR type.

func (*DefaultDefinitionClient) GetXRDs

GetXRDs gets all XRDs in the cluster.

func (*DefaultDefinitionClient) Initialize

func (c *DefaultDefinitionClient) Initialize(ctx context.Context) error

Initialize loads XRDs into the cache.

func (*DefaultDefinitionClient) IsClaimResource added in v0.2.0

func (c *DefaultDefinitionClient) IsClaimResource(ctx context.Context, resource *un.Unstructured) bool

IsClaimResource checks if the given resource is a claim type by attempting to find an XRD that defines it as a claim.

type DefaultEnvironmentClient

type DefaultEnvironmentClient struct {
	// contains filtered or unexported fields
}

DefaultEnvironmentClient implements EnvironmentClient.

func (*DefaultEnvironmentClient) GetEnvironmentConfig

func (c *DefaultEnvironmentClient) GetEnvironmentConfig(ctx context.Context, name string) (*un.Unstructured, error)

GetEnvironmentConfig gets a specific environment config by name.

func (*DefaultEnvironmentClient) GetEnvironmentConfigs

func (c *DefaultEnvironmentClient) GetEnvironmentConfigs(ctx context.Context) ([]*un.Unstructured, error)

GetEnvironmentConfigs gets all environment configurations.

func (*DefaultEnvironmentClient) Initialize

func (c *DefaultEnvironmentClient) Initialize(ctx context.Context) error

Initialize loads environment configs into the cache.

type DefaultFunctionClient

type DefaultFunctionClient struct {
	// contains filtered or unexported fields
}

DefaultFunctionClient implements FunctionClient.

func (*DefaultFunctionClient) GetFunctionsFromPipeline

func (c *DefaultFunctionClient) GetFunctionsFromPipeline(comp *apiextensionsv1.Composition) ([]pkgv1.Function, error)

GetFunctionsFromPipeline gets functions used in a composition pipeline.

func (*DefaultFunctionClient) Initialize

func (c *DefaultFunctionClient) Initialize(ctx context.Context) error

Initialize loads functions into the cache.

func (*DefaultFunctionClient) ListFunctions

func (c *DefaultFunctionClient) ListFunctions(ctx context.Context) ([]pkgv1.Function, error)

ListFunctions lists all functions in the cluster.

type DefaultResourceTreeClient

type DefaultResourceTreeClient struct {
	// contains filtered or unexported fields
}

DefaultResourceTreeClient implements ResourceTreeClient.

func (*DefaultResourceTreeClient) GetResourceTree

func (c *DefaultResourceTreeClient) GetResourceTree(ctx context.Context, root *un.Unstructured) (*resource.Resource, error)

GetResourceTree gets the resource tree for a root resource.

func (*DefaultResourceTreeClient) Initialize

Initialize initializes the resource tree client.

type DefinitionClient

type DefinitionClient interface {
	core.Initializable

	// GetXRDs gets all XRDs in the cluster
	GetXRDs(ctx context.Context) ([]*un.Unstructured, error)

	// GetXRDForClaim finds the XRD that defines the given claim type
	GetXRDForClaim(ctx context.Context, gvk schema.GroupVersionKind) (*un.Unstructured, error)

	// GetXRDForXR finds the XRD that defines the given XR type
	GetXRDForXR(ctx context.Context, gvk schema.GroupVersionKind) (*un.Unstructured, error)

	// IsClaimResource checks if the given resource is a claim type
	IsClaimResource(ctx context.Context, resource *un.Unstructured) bool

	// GetCompositeSchema returns the composite.Schema (Legacy or Modern) that
	// applies to the given XR or claim GVK. The scope is read from the XRD's
	// spec.scope field (NOT the XRD's own apiVersion, which the apiserver may
	// rewrite during v1↔v2 conversion). spec.scope == "LegacyCluster" maps to
	// SchemaLegacy (canonical fields under spec.*); "Cluster"/"Namespaced" map
	// to SchemaModern (canonical fields under spec.crossplane.*). Mirrors the
	// rule the render binary uses (selectSchema in crossplane's
	// internal/render/composite/render.go).
	GetCompositeSchema(ctx context.Context, gvk schema.GroupVersionKind) (ucomposite.Schema, error)
}

DefinitionClient handles Crossplane definitions (XRDs).

func NewDefinitionClient

func NewDefinitionClient(resourceClient kubernetes.ResourceClient, logger logging.Logger) DefinitionClient

NewDefinitionClient creates a new DefaultDefinitionClient.

type EnvironmentClient

type EnvironmentClient interface {
	core.Initializable

	// GetEnvironmentConfigs gets all environment configurations
	GetEnvironmentConfigs(ctx context.Context) ([]*un.Unstructured, error)

	// GetEnvironmentConfig gets a specific environment config by name
	GetEnvironmentConfig(ctx context.Context, name string) (*un.Unstructured, error)
}

EnvironmentClient handles environment configurations.

func NewEnvironmentClient

func NewEnvironmentClient(resourceClient kubernetes.ResourceClient, logger logging.Logger) EnvironmentClient

NewEnvironmentClient creates a new DefaultEnvironmentClient.

type FunctionClient

type FunctionClient interface {
	core.Initializable

	// GetFunctionsFromPipeline gets functions used in a composition pipeline
	GetFunctionsFromPipeline(comp *apiextensionsv1.Composition) ([]pkgv1.Function, error)

	// ListFunctions lists all functions in the cluster
	ListFunctions(ctx context.Context) ([]pkgv1.Function, error)
}

FunctionClient handles operations related to Functions.

func NewFunctionClient

func NewFunctionClient(resourceClient kubernetes.ResourceClient, logger logging.Logger) FunctionClient

NewFunctionClient creates a new DefaultFunctionClient.

type ResourceTreeClient

type ResourceTreeClient interface {
	core.Initializable

	// GetResourceTree gets the resource tree for a root resource
	GetResourceTree(ctx context.Context, root *un.Unstructured) (*resource.Resource, error)
}

ResourceTreeClient handles resource tree operations.

func NewResourceTreeClient

func NewResourceTreeClient(treeClient *xrm.Client, logger logging.Logger) ResourceTreeClient

NewResourceTreeClient creates a new DefaultResourceTreeClient.

Jump to

Keyboard shortcuts

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