blocknode

package
v0.12.0 Latest Latest
Warning

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

Go to latest
Published: Mar 17, 2026 License: Apache-2.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// Kubernetes resources
	ResourceNameSuffix = "-block-node-server"
	PodLabelSelector   = "app.kubernetes.io/name=block-node-server"

	// Template paths
	NamespacePath       = "files/block-node/namespace.yaml"
	StorageConfigPath   = "files/block-node/storage-config.yaml"
	OptionalStoragePath = "files/block-node/optional-storage.yaml"
	ValuesPath          = "files/block-node/full-values.yaml"
	NanoValuesPath      = "files/block-node/nano-values.yaml"

	// Timeouts
	PodReadyTimeoutSeconds = 300
)
View Source
const ComponentBlockNode = "block-node"

ComponentBlockNode is the component name for block node migrations.

Variables

This section is empty.

Functions

func BuildMigrationWorkflow added in v0.7.0

func BuildMigrationWorkflow(manager *Manager, profile, valuesFile string) (*automa.WorkflowBuilder, error)

BuildMigrationWorkflow returns an automa workflow for executing applicable migrations. Returns nil if no migrations are needed (installed version is empty or no applicable migrations).

The workflow structure is:

[migration-start] → [migration-<id>] → ... → [migration-upgrade-chart]

Each migration step creates its PV/PVC. The final upgrade step performs a single StatefulSet delete + Helm upgrade to the target version with all new storages included.

func InitMigrations added in v0.7.0

func InitMigrations()

InitMigrations registers all block node migrations. Called once at startup from root.go.

Types

type Manager

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

Manager handles block node setup and management operations

func NewManager

func NewManager(blockConfig models.BlockNodeInputs) (*Manager, error)

NewManager creates a new block node manager

func (*Manager) AnnotateService

func (m *Manager) AnnotateService(ctx context.Context) error

AnnotateService annotates the block node service with MetalLB address pool

func (*Manager) ClearStorageDirectory added in v0.8.0

func (m *Manager) ClearStorageDirectory(dirPath string) error

ClearStorageDirectory removes all files and subdirectories from a storage directory while preserving the directory itself

func (*Manager) ComputeValuesFile

func (m *Manager) ComputeValuesFile(profile string, valuesFile string) (string, error)

ComputeValuesFile generates the values file for helm installation based on profile and version. It provides the path to the generated values file.

The method renders the appropriate values template with conditional sections based on which optional storages the target Block Node version requires.

When a custom values file is provided, this method injects/overrides the persistence settings to ensure create: false and existingClaim are set for each storage type. This is critical because weaver manages PVs/PVCs outside of Helm, so the chart must always reference the pre-created PVCs rather than attempting to create its own.

NOTE: This method implements defense-in-depth validation. Even though the CLI layer validates paths using sanity.ValidateInputFile(), this method also validates to ensure safety regardless of the caller.

func (*Manager) CreateNamespace

func (m *Manager) CreateNamespace(ctx context.Context, tempDir string) error

CreateNamespace creates the block-node namespace if it doesn't exist

func (*Manager) CreateOptionalStorage added in v0.10.0

func (m *Manager) CreateOptionalStorage(ctx context.Context, tempDir string, optStor OptionalStorage) error

CreateOptionalStorage creates a single optional PV/PVC using the unified template. Used during migration when other PVs already exist.

func (*Manager) CreatePersistentVolumes

func (m *Manager) CreatePersistentVolumes(ctx context.Context, tempDir string) error

CreatePersistentVolumes creates PVs and PVCs from the storage config

func (*Manager) DeleteNamespace

func (m *Manager) DeleteNamespace(ctx context.Context, tempDir string) error

DeleteNamespace deletes the block-node namespace

func (*Manager) DeletePersistentVolumes

func (m *Manager) DeletePersistentVolumes(ctx context.Context, tempDir string) error

DeletePersistentVolumes deletes PVs and PVCs

func (*Manager) DeleteStatefulSetForUpgrade added in v0.10.0

func (m *Manager) DeleteStatefulSetForUpgrade(ctx context.Context) error

DeleteStatefulSetForUpgrade deletes the block node StatefulSet using orphan cascading and waits for it to be fully removed from the API server. Orphan cascading removes the controller object but keeps pods running. This is required before any Helm upgrade that changes volumeClaimTemplates, since Kubernetes forbids in-place updates to those fields. Returns nil if the StatefulSet doesn't exist.

func (*Manager) GetInstalledVersion added in v0.7.0

func (m *Manager) GetInstalledVersion() (string, error)

GetInstalledVersion returns the currently installed Block Node chart version. Returns empty string if not installed.

func (*Manager) GetReleaseValues added in v0.7.0

func (m *Manager) GetReleaseValues() (map[string]interface{}, error)

GetReleaseValues returns the user-supplied values from the currently installed release. Returns nil if not installed or if no user values were supplied.

func (*Manager) GetStoragePaths added in v0.6.0

func (m *Manager) GetStoragePaths() (archivePath, livePath, logPath string, optionalPaths []string, err error)

GetStoragePaths returns the computed storage paths based on configuration. If individual paths are specified, they are used; otherwise, paths are derived from basePath. All paths are validated using sanity checks. optionalPaths contains the paths for applicable optional storages (in registry order).

func (*Manager) GetTargetVersion added in v0.10.0

func (m *Manager) GetTargetVersion() string

GetTargetVersion returns the configured target version for block node.

func (*Manager) InstallChart

func (m *Manager) InstallChart(ctx context.Context, valuesFile string) (bool, error)

InstallChart installs the block node helm chart

func (*Manager) ResetStorage added in v0.8.0

func (m *Manager) ResetStorage(ctx context.Context) error

ResetStorage clears all block node storage directories

func (*Manager) ScaleStatefulSet added in v0.8.0

func (m *Manager) ScaleStatefulSet(ctx context.Context, replicas int32) error

ScaleStatefulSet scales the block node statefulset to the specified number of replicas

func (*Manager) SetupStorage

func (m *Manager) SetupStorage(ctx context.Context) error

SetupStorage creates the required directories for block node storage

func (*Manager) UninstallChart

func (m *Manager) UninstallChart(ctx context.Context) error

UninstallChart uninstalls the block node helm chart

func (*Manager) UpgradeChart added in v0.5.0

func (m *Manager) UpgradeChart(ctx context.Context, valuesFile string, reuseValues bool) error

UpgradeChart upgrades the block node helm chart

func (*Manager) WaitForPodReady

func (m *Manager) WaitForPodReady(ctx context.Context) error

WaitForPodReady waits for the block node pod to be ready

func (*Manager) WaitForPodsTerminated added in v0.8.0

func (m *Manager) WaitForPodsTerminated(ctx context.Context) error

WaitForPodsTerminated waits until all pods matching the block node label selector are terminated

type OptionalStorage added in v0.10.0

type OptionalStorage struct {
	// Name is the human-readable name used in logs and template field names
	// (e.g., "verification", "plugins"). Must match the Helm persistence key.
	Name string

	// MinVersion is the minimum Block Node version that requires this storage.
	MinVersion string

	// PVName is the PersistentVolume resource name (e.g., "verification-storage-pv").
	PVName string

	// PVCName is the PersistentVolumeClaim resource name (e.g., "verification-storage-pvc").
	PVCName string

	// DirName is the subdirectory name under basePath (e.g., "verification").
	DirName string

	// GetPath returns the models.red path from the storage models.
	GetPath func(s *models.BlockNodeStorage) string

	// SetPath sets the path in the storage models.
	SetPath func(s *models.BlockNodeStorage, p string)

	// GetSize returns the models.red size from the storage models.
	GetSize func(s *models.BlockNodeStorage) string
}

OptionalStorage describes an optional storage volume that is conditionally required based on the target Block Node chart version.

func GetApplicableOptionalStorages added in v0.10.0

func GetApplicableOptionalStorages(targetVersion string) []OptionalStorage

GetApplicableOptionalStorages returns the subset of optional storages that are required by the given target version.

func GetOptionalStorages added in v0.10.0

func GetOptionalStorages() []OptionalStorage

GetOptionalStorages returns the full list of registered optional storages.

func (*OptionalStorage) RequiredByVersion added in v0.10.0

func (o *OptionalStorage) RequiredByVersion(targetVersion string) bool

RequiredByVersion returns true if the given target version requires this optional storage.

type StorageMigration added in v0.10.0

type StorageMigration struct {
	migration.VersionMigration
	// contains filtered or unexported fields
}

StorageMigration handles the breaking change pattern where a new storage PV/PVC is added to the Block Node StatefulSet. It is parameterized by the OptionalStorage descriptor, allowing a single implementation to serve all storage migrations.

Execute only creates the storage directory and PV/PVC — no Helm upgrade is performed. The single upgrade is appended as a final workflow step by BuildMigrationWorkflow.

func NewPluginsStorageMigration added in v0.10.0

func NewPluginsStorageMigration() *StorageMigration

NewPluginsStorageMigration creates the plugins storage migration.

func NewStorageMigration added in v0.10.0

func NewStorageMigration(optStorage OptionalStorage) *StorageMigration

NewStorageMigration creates a new storage migration for the given optional storage entry.

func NewVerificationStorageMigration added in v0.7.0

func NewVerificationStorageMigration() *StorageMigration

NewVerificationStorageMigration creates the verification storage migration.

func (*StorageMigration) Execute added in v0.10.0

func (m *StorageMigration) Execute(ctx context.Context, mctx *migration.Context) error

Execute creates the storage directory on the host and the PV/PVC in Kubernetes. It does NOT perform a Helm upgrade — that is handled once after all migrations complete, by the upgrade step appended in BuildMigrationWorkflow.

func (*StorageMigration) Rollback added in v0.10.0

func (m *StorageMigration) Rollback(ctx context.Context, mctx *migration.Context) error

Rollback cleans up the PV/PVC created by this migration. Best-effort. No Helm downgrade is needed because the chart was never upgraded during Execute.

Jump to

Keyboard shortcuts

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