client

package
v1.25.3 Latest Latest
Warning

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

Go to latest
Published: Jul 25, 2025 License: Apache-2.0 Imports: 30 Imported by: 0

Documentation

Overview

Package client contains a set of helper structures for CNPG to use the plugins exposing the CNPI interface

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrPluginNotLoaded is raised when the plugin that should manage the backup
	// have not been loaded inside the cluster
	ErrPluginNotLoaded = errors.New("plugin not loaded")

	// ErrPluginNotSupportBackup is raised when the plugin that should manage the backup
	// doesn't support the Backup service
	ErrPluginNotSupportBackup = errors.New("plugin does not support Backup service")

	// ErrPluginNotSupportBackupEndpoint is raised when the plugin that should manage the backup
	// doesn't support the Backup RPC endpoint
	ErrPluginNotSupportBackupEndpoint = errors.New("plugin does not support the Backup RPC call")
)
View Source
var ErrNoPluginSupportsRestoreJobHooksCapability = errors.New("no plugin supports the restore job hooks capability")

ErrNoPluginSupportsRestoreJobHooksCapability is raised when no plugin supports the restore job hooks capability

Functions

func SetPluginClientInContext added in v1.25.2

func SetPluginClientInContext(ctx context.Context, client Client) context.Context

SetPluginClientInContext records the plugin client in the given context

Types

type BackupCapabilities

type BackupCapabilities interface {
	// Backup takes a backup via a cnpg-i plugin
	Backup(
		ctx context.Context,
		cluster client.Object,
		backupObject client.Object,
		pluginName string,
		parameters map[string]string,
	) (*BackupResponse, error)
}

BackupCapabilities describes a set of behaviour needed to backup a PostgreSQL cluster

type BackupResponse

type BackupResponse struct {
	// This field contains a machine-readable ID of the
	// backup that is being taken
	BackupID string

	// This field contains a human-readable name of the
	// backup that is being taken
	BackupName string

	// This field contains the timestamp of the start
	// time of the backup
	StartedAt time.Time

	// This field contains the Unix timestamp of the end
	// time of the backup
	StoppedAt time.Time

	// This field contains the current WAL when the backup was started
	BeginWal string

	// This field contains the current WAL at the end of the backup
	EndWal string

	// This field contains the current LSN record when the backup was started
	BeginLsn string

	// This field contains the current LSN record when the backup has finished
	EndLsn string

	// This field contains the backup label of the backup that have been taken
	BackupLabelFile []byte

	// This field contains the tablespace map of the backup that have been taken
	TablespaceMapFile []byte

	// This field contains the ID of the instance that have been backed up
	InstanceID string

	// This field is set to true for online/hot backups and to false otherwise.
	Online bool

	// This field contains the metadata to be associated with this backup
	Metadata map[string]string
}

BackupResponse is the status of a newly created backup. This is used as a return type for the Backup RPC Call

type Client

Client describes a set of behaviour needed to properly handle all the plugin client expected features

func GetPluginClientFromContext added in v1.25.2

func GetPluginClientFromContext(ctx context.Context) Client

GetPluginClientFromContext gets the current plugin client from the context

func NewClient added in v1.25.2

func NewClient(ctx context.Context, enabledPlugin *stringset.Data) (Client, error)

NewClient creates a new CNPI client

func WithPlugins added in v1.24.0

func WithPlugins(ctx context.Context, repository repository.Interface, names ...string) (Client, error)

WithPlugins creates a new CNPG-I client for plugins in a certain repository, loading the plugins with the specified name

type ClusterCapabilities

type ClusterCapabilities interface {
	// MutateCluster calls the loaded plugisn to help to enhance
	// a cluster definition
	MutateCluster(
		ctx context.Context,
		object client.Object,
		mutatedObject client.Object,
	) error

	// ValidateClusterCreate calls all the loaded plugin to check if a cluster definition
	// is correct
	ValidateClusterCreate(
		ctx context.Context,
		object client.Object,
	) (field.ErrorList, error)

	// ValidateClusterUpdate calls all the loaded plugin to check if a cluster can
	// be changed from a value to another
	ValidateClusterUpdate(
		ctx context.Context,
		cluster client.Object,
		mutatedCluster client.Object,
	) (field.ErrorList, error)

	// SetStatusInCluster returns a map of [pluginName]: statuses to be assigned to the cluster
	SetStatusInCluster(ctx context.Context, cluster client.Object) (map[string]string, error)
}

ClusterCapabilities describes a set of behaviour needed to implement the Cluster capabilities

type ClusterReconcilerHooks

type ClusterReconcilerHooks interface {
	// PreReconcile is executed after we get the resources and update the status
	PreReconcile(
		ctx context.Context,
		cluster client.Object,
		object client.Object,
	) ReconcilerHookResult

	// PostReconcile is executed at the end of the reconciliation loop
	PostReconcile(
		ctx context.Context,
		cluster client.Object,
		object client.Object,
	) ReconcilerHookResult
}

ClusterReconcilerHooks decsribes a set of behavior needed to enhance the login of the Cluster reconcicliation loop

type Connection

type Connection interface {
	// Close closes the connection to every loaded plugin
	Close(ctx context.Context)

	// MetadataList exposes the metadata of the loaded plugins
	MetadataList() []connection.Metadata

	HasPlugin(pluginName string) bool
}

Connection describes a set of behaviour needed to properly handle the plugin connections

type LifecycleCapabilities

type LifecycleCapabilities interface {
	// LifecycleHook notifies the registered plugins of a given event for a given object
	LifecycleHook(
		ctx context.Context,
		operationVerb plugin.OperationVerb,
		cluster client.Object,
		object client.Object,
	) (client.Object, error)
}

LifecycleCapabilities describes a set of behaviour needed to implement the Lifecycle capabilities

type ReconcilerHookResult

type ReconcilerHookResult struct {
	Result             ctrl.Result `json:"result"`
	Err                error       `json:"err"`
	StopReconciliation bool        `json:"stopReconciliation"`
	Identifier         string      `json:"identifier"`
}

ReconcilerHookResult is the result of a reconciliation loop

type RestoreJobHooksCapabilities added in v1.25.0

type RestoreJobHooksCapabilities interface {
	Restore(ctx context.Context, cluster gvkEnsurer) (*restore.RestoreResponse, error)
}

RestoreJobHooksCapabilities describes a set of behaviour needed to run the Restore

type WalCapabilities

type WalCapabilities interface {
	// ArchiveWAL calls the loaded plugins to archive a WAL file.
	// This call is a no-op if there's no plugin implementing WAL archiving
	ArchiveWAL(
		ctx context.Context,
		cluster client.Object,
		sourceFileName string,
	) error

	// RestoreWAL calls the loaded plugins to archive a WAL file.
	// This call returns a boolean indicating if the WAL was restored
	// by a plugin and the occurred error.
	RestoreWAL(
		ctx context.Context,
		cluster client.Object,
		sourceWALName string,
		destinationFileName string,
	) (bool, error)
}

WalCapabilities describes a set of behavior needed to archive and recover WALs

Jump to

Keyboard shortcuts

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