Ctrl K
ComunidadGuías…

api/backups/v1alpha1/backupclass_types.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
// SPDX-License-Identifier: Apache-2.0
// Package v1alpha1 defines backups.cozystack.io API types.
//
// Group: backups.cozystack.io
// Version: v1alpha1
package v1alpha1

import (
	corev1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/runtime"
)

func init() {
	SchemeBuilder.Register(func(s *runtime.Scheme) error {
		s.AddKnownTypes(GroupVersion,
			&BackupClass{},
			&BackupClassList{},
		)
		return nil
	})
}

// +kubebuilder:object:root=true
// +kubebuilder:resource:scope=Cluster
// +kubebuilder:subresource:status

// BackupClass defines a class of backup configurations that can be referenced
// by BackupJob and Plan resources. It encapsulates strategy and storage configuration
// per application type.
type BackupClass struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   BackupClassSpec   `json:"spec,omitempty"`
	Status BackupClassStatus `json:"status,omitempty"`
}

// +kubebuilder:object:root=true

// BackupClassList contains a list of BackupClasses.
type BackupClassList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []BackupClass `json:"items"`
}

// BackupClassSpec defines the desired state of a BackupClass.
type BackupClassSpec struct {
	// Strategies is a list of backup strategies, each matching a specific application type.
	Strategies []BackupClassStrategy `json:"strategies"`
}

// BackupClassStrategy defines a backup strategy for a specific application type.
type BackupClassStrategy struct {
	// StrategyRef references the driver-specific BackupStrategy (e.g., Velero).
	StrategyRef corev1.TypedLocalObjectReference `json:"strategyRef"`

	// Application specifies which application types this strategy applies to.
	Application ApplicationSelector `json:"application"`

	// Parameters holds strategy-specific and storage-specific parameters.
	// Common parameters include:
	// - backupStorageLocationName: Name of Velero BackupStorageLocation
	//
	// SECURITY: parameter values MUST NOT contain credentials, access keys,
	// passwords, or any other secret material. The CNPG driver persists this
	// map verbatim into Backup.status.underlyingResources at backup time so
	// that restore-time template rendering reproduces the exact values used
	// at backup time; that status field is tenant-readable and replicated
	// through every Backup artifact derived from a strategy. Route credentials
	// through the Secret references on the strategy template instead
	// (e.g. CNPG's barmanObjectStore.s3Credentials.secretRef and endpointCA).
	// +optional
	Parameters map[string]string `json:"parameters,omitempty"`
}

// ApplicationSelector specifies which application types a strategy applies to.
type ApplicationSelector struct {
	// APIGroup is the API group of the application.
	// If not specified, defaults to "apps.cozystack.io".
	// +optional
	APIGroup *string `json:"apiGroup,omitempty"`

	// Kind is the kind of the application (e.g., VirtualMachine, MariaDB).
	Kind string `json:"kind"`
}

// BackupClassStatus defines the observed state of a BackupClass.
type BackupClassStatus struct {
	// Conditions represents the latest available observations of a BackupClass's state.
	// +optional
	Conditions []metav1.Condition `json:"conditions,omitempty"`
}