Help us shape the future of Go! Take the 2026 Go Developer Survey

requirements

package
v0.33.27 Latest Latest
Warning

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

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

Documentation

Overview

Package requirements answers one question: does THIS cluster satisfy a plugin's cluster-side requirements (Kubernetes, Deckhouse and module versions)?

It has two halves:

  • ClusterState / LoadClusterState - a one-shot snapshot of the cluster facts the checks need;
  • Checker.Checks - the ordered, named validators that enforce a plugin contract against a snapshot.

A check failure is either a genuinely unmet requirement (IsUnmet reports true; version selection may then try an older version) or an operational error (malformed constraint, unreadable cluster fact) that must propagate.

The Manager-side concerns stay in internal/plugins: building the Kubernetes clients from flags, caching the snapshot per command run, the --skip-cluster-checks escape hatch and its error wording.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func HasClusterRequirements

func HasClusterRequirements(plugin *internal.Plugin) bool

HasClusterRequirements reports whether the plugin declares any requirement that needs cluster state to verify (Kubernetes / Deckhouse / modules).

func IsGenuinePrerelease

func IsGenuinePrerelease(pre string) bool

IsGenuinePrerelease reports whether a pre-release segment denotes a real pre-release (rc/alpha/beta/preview/snapshot) rather than a CI/build marker. Version selection uses the same notion to keep pre-releases out of the default pick.

func IsUnmet

func IsUnmet(err error) bool

IsUnmet reports whether err marks a genuinely unmet requirement (as opposed to an operational failure that must not be masked).

func NormalizedForConstraint added in v0.33.8

func NormalizedForConstraint(v *semver.Version) *semver.Version

NormalizedForConstraint prepares a version for constraint matching. Build metadata is always dropped. The pre-release segment depends on its kind:

  • genuine RC (rc/alpha/beta/etc.): kept, so boundary constraints treat an RC as below its GA;
  • CI/build markers ("v1.77.0-main+abc", "v1.28.3-eks-1-30"): stripped, so a plain floor like ">= 1.0" matches them.

Trade-off: for genuine RCs, ">= 1.30" excludes 1.30.0-rc.1.

Types

type Check

type Check struct {
	Name string
	Run  func(*internal.Plugin, *ClusterState) error
}

Check is one named cluster-side validator. The ordered list returned by Checker.Checks is the single source of truth shared by enforcement (install/run gating) and version selection in internal/plugins, so a new check is added in one place and cannot drift between the two.

type Checker

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

Checker runs the cluster-side requirement checks. It carries only the logger used by the skip-with-a-warning paths (unknown Deckhouse version, module without a version).

func NewChecker

func NewChecker(logger *dkplog.Logger) *Checker

func (*Checker) Checks

func (c *Checker) Checks() []Check

type ClusterState

type ClusterState struct {
	// Kubernetes is the API server version, or nil if the cluster returned a version
	// string that is not parseable as semver (a declared k8s requirement then fails).
	Kubernetes *semver.Version
	// Deckhouse is the platform version, or nil for a non-release build (e.g. "dev")
	// or an absent annotation: Deckhouse version requirements are then skipped with
	// a warning. A failure to READ the deployment is a hard error, not nil.
	Deckhouse *semver.Version
	// Modules maps module name -> its state; absence from the map means "not in cluster".
	Modules map[string]ModuleState
}

ClusterState is a one-shot snapshot of the cluster facts needed to enforce a plugin's requirements. The caller decides when to (re)build it - typically lazily and once per command run, only when a plugin actually declares a cluster-side requirement.

func LoadClusterState

func LoadClusterState(ctx context.Context, kubeCl kubernetes.Interface, dynamicCl dynamic.Interface, logger *dkplog.Logger) (*ClusterState, error)

LoadClusterState builds the snapshot from the cluster. A failure is fatal for the caller: if a plugin declares a requirement we cannot verify, it must not be installed blindly.

type ModuleState

type ModuleState struct {
	Enabled bool
	// Version is the installed module version, or nil when the module reports none
	// or a non-parseable value (some modules omit it).
	Version *semver.Version
}

ModuleState is the cluster-side fact about a single Deckhouse module.

Jump to

Keyboard shortcuts

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