reconciler

package
v0.11.0 Latest Latest
Warning

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

Go to latest
Published: Nov 5, 2024 License: Apache-2.0 Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrRoleSpecNotPointer = errors.New("role spec must be a pointer")
)

Functions

This section is empty.

Types

type AnySpec

type AnySpec any

type BaseCluster added in v0.8.0

type BaseCluster[T AnySpec] struct {
	BaseReconciler[T]
	ClusterOperation *apiv1alpha1.ClusterOperationSpec
	ClusterInfo      ClusterInfo
	// contains filtered or unexported fields
}

func NewBaseCluster added in v0.8.0

func NewBaseCluster[T AnySpec](
	client *client.Client,
	clusterInfo ClusterInfo,
	clusterOperation *apiv1alpha1.ClusterOperationSpec,
	spec T,
) *BaseCluster[T]

func (*BaseCluster[T]) AddResource added in v0.8.0

func (r *BaseCluster[T]) AddResource(resource Reconciler)

func (*BaseCluster[T]) GetClusterOperation added in v0.8.0

func (r *BaseCluster[T]) GetClusterOperation() *apiv1alpha1.ClusterOperationSpec

func (*BaseCluster[T]) GetName added in v0.8.0

func (r *BaseCluster[T]) GetName() string

func (*BaseCluster[T]) GetResources added in v0.8.0

func (r *BaseCluster[T]) GetResources() []Reconciler

func (*BaseCluster[T]) IsPaused added in v0.10.0

func (r *BaseCluster[T]) IsPaused(ctx context.Context) bool

func (*BaseCluster[T]) IsStopped added in v0.10.0

func (r *BaseCluster[T]) IsStopped() bool

func (*BaseCluster[T]) Ready added in v0.8.0

func (r *BaseCluster[T]) Ready(ctx context.Context) (ctrl.Result, error)

func (*BaseCluster[T]) Reconcile added in v0.8.0

func (r *BaseCluster[T]) Reconcile(ctx context.Context) (ctrl.Result, error)

func (*BaseCluster[T]) RegisterResources added in v0.8.0

func (r *BaseCluster[T]) RegisterResources(ctx context.Context) error

func (*BaseCluster[T]) Run added in v0.10.0

func (r *BaseCluster[T]) Run(ctx context.Context) (ctrl.Result, error)

type BaseReconciler

type BaseReconciler[T AnySpec] struct {
	// Do not use ptr, to avoid other packages to modify the client
	Client *client.Client

	Spec T
}

func (*BaseReconciler[T]) GetClient

func (b *BaseReconciler[T]) GetClient() *client.Client

func (*BaseReconciler[T]) GetName

func (b *BaseReconciler[T]) GetName() string

func (*BaseReconciler[T]) GetNamespace

func (b *BaseReconciler[T]) GetNamespace() string

func (*BaseReconciler[T]) GetSpec

func (b *BaseReconciler[T]) GetSpec() T

func (*BaseReconciler[T]) Ready

func (b *BaseReconciler[T]) Ready(ctx context.Context) (ctrl.Result, error)

func (*BaseReconciler[T]) Reconcile

func (b *BaseReconciler[T]) Reconcile(ctx context.Context) (ctrl.Result, error)

type BaseRoleReconciler

type BaseRoleReconciler[T AnySpec] struct {
	BaseReconciler[T]
	ClusterStopped bool
	ClusterInfo    ClusterInfo

	RoleInfo RoleInfo
	// contains filtered or unexported fields
}

func NewBaseRoleReconciler

func NewBaseRoleReconciler[T AnySpec](
	client *client.Client,
	clusterStopped bool,
	roleInfo RoleInfo,
	spec T,
) *BaseRoleReconciler[T]

func (*BaseRoleReconciler[T]) AddResource added in v0.10.0

func (r *BaseRoleReconciler[T]) AddResource(resource Reconciler)

func (*BaseRoleReconciler[T]) GetFullName added in v0.8.0

func (r *BaseRoleReconciler[T]) GetFullName() string

func (*BaseRoleReconciler[T]) GetName added in v0.8.0

func (r *BaseRoleReconciler[T]) GetName() string

func (*BaseRoleReconciler[T]) GetResources added in v0.10.0

func (r *BaseRoleReconciler[T]) GetResources() []Reconciler

func (*BaseRoleReconciler[T]) GetRoleGroups added in v0.8.0

func (r *BaseRoleReconciler[T]) GetRoleGroups() (map[string]AnySpec, error)

func (*BaseRoleReconciler[T]) IsStopped added in v0.10.0

func (r *BaseRoleReconciler[T]) IsStopped() bool

func (*BaseRoleReconciler[T]) MergeRoleGroupSpec

func (b *BaseRoleReconciler[T]) MergeRoleGroupSpec(roleGroup AnySpec) AnySpec

MergeRoleGroupSpec merges the roleGroup spec with the base role spec. It merges the fields from the right (roleSpec) to the left (roleGroup). If a field exists in the left but is zero, it will be replaced by the corresponding field from the right. The left must be a pointer, as the merge operation modifies it. The fields "RoleGroups" and "PodDisruptionBudget" are excluded during the merge. You don't need to use the return value of this method because it directly modifies the passed roleGroup.

Example:

left := &RoleGroupSpec{
	Replicas:      1,
	Config:        config,
	EnvOverrides:  envOverridesRoleGroup,
}

right := RoleSpec{
	RoleGroups:        rolegroups,            // this field is excluded
	EnvOverrides:      envOverridesRole,
	CliOverrides:  cliOverrides,
}

result := &RoleGroupSpec{
	Replicas:          1,
	Config:            config,
	EnvOverrides:      envOverridesRoleGroup,   // `EnvOverrides` exists in left, so it is not replaced
	CliOverrides:  cliOverrides,        // Add RoleSpec.CliOverrides to left
}

func (*BaseRoleReconciler[T]) Ready

func (r *BaseRoleReconciler[T]) Ready(ctx context.Context) (ctrl.Result, error)

func (*BaseRoleReconciler[T]) Reconcile added in v0.10.0

func (r *BaseRoleReconciler[T]) Reconcile(ctx context.Context) (ctrl.Result, error)

func (*BaseRoleReconciler[T]) RegisterResources added in v0.8.0

func (r *BaseRoleReconciler[T]) RegisterResources(ctx context.Context) error

type ClusterInfo added in v0.8.0

type ClusterInfo struct {
	GVK         *metav1.GroupVersionKind
	ClusterName string
	// contains filtered or unexported fields
}

func (*ClusterInfo) AddAnnotation added in v0.8.0

func (i *ClusterInfo) AddAnnotation(key, value string)

func (*ClusterInfo) AddLabel added in v0.8.0

func (i *ClusterInfo) AddLabel(key, value string)

func (*ClusterInfo) GetAnnotations added in v0.8.0

func (i *ClusterInfo) GetAnnotations() map[string]string

func (*ClusterInfo) GetClusterName added in v0.8.0

func (i *ClusterInfo) GetClusterName() string

func (*ClusterInfo) GetFullName added in v0.8.0

func (i *ClusterInfo) GetFullName() string

func (*ClusterInfo) GetLabels added in v0.8.0

func (i *ClusterInfo) GetLabels() map[string]string

type ClusterReconciler

type ClusterReconciler interface {
	Reconciler
	GetClusterOperation() *apiv1alpha1.ClusterOperationSpec
	GetResources() []Reconciler
	AddResource(resource Reconciler)
	RegisterResources(ctx context.Context) error
	IsStopped() bool

	Run(ctx context.Context) (ctrl.Result, error)
}

type Deployment added in v0.8.0

type Deployment struct {
	GenericResourceReconciler[builder.DeploymentBuilder]

	// When the cluster is stopped, the deployment will be scaled to 0
	// and the reconcile will be not executed until the cluster is started
	Stopped bool
}

func NewDeployment added in v0.8.0

func NewDeployment(
	client *client.Client,
	name string,
	deployBuilder builder.DeploymentBuilder,
	stopped bool,
) *Deployment

func (*Deployment) Ready added in v0.8.0

func (r *Deployment) Ready(ctx context.Context) (ctrl.Result, error)

func (*Deployment) Reconcile added in v0.8.0

func (r *Deployment) Reconcile(ctx context.Context) (ctrl.Result, error)

type GenericResourceReconciler

type GenericResourceReconciler[B builder.ResourceBuilder] struct {
	BaseReconciler[AnySpec]
	Builder B
	// todo: remove this, as it can be get from the builder
	Name string
}

func NewGenericResourceReconciler

func NewGenericResourceReconciler[B builder.ResourceBuilder](
	client *client.Client,
	name string,
	builder B,
) *GenericResourceReconciler[B]

func (*GenericResourceReconciler[B]) GetBuilder

func (r *GenericResourceReconciler[B]) GetBuilder() B

func (*GenericResourceReconciler[B]) GetName added in v0.8.0

func (r *GenericResourceReconciler[B]) GetName() string

func (*GenericResourceReconciler[b]) GetObjectMeta

func (r *GenericResourceReconciler[b]) GetObjectMeta() metav1.ObjectMeta

func (*GenericResourceReconciler[B]) Ready

GenericResourceReconciler[B] does not check anythins, so it is always ready.

func (*GenericResourceReconciler[B]) Reconcile

func (r *GenericResourceReconciler[B]) Reconcile(ctx context.Context) (ctrl.Result, error)

func (*GenericResourceReconciler[B]) ResourceReconcile

func (r *GenericResourceReconciler[B]) ResourceReconcile(ctx context.Context, resource ctrlclient.Object) (ctrl.Result, error)

ResourceReconcile creates or updates a resource. If the resource is created or updated, it returns a Result with a requeue time of 1 second.

Most of the time you should not call this method directly, but call the r.Reconcile() method instead.

type Job added in v0.11.0

func NewJob added in v0.11.0

func NewJob(
	client *client.Client,
	name string,
	jobBuilder builder.JobBuilder,
) *Job

func (*Job) Ready added in v0.11.0

func (r *Job) Ready(ctx context.Context) (ctrl.Result, error)

func (*Job) Reconcile added in v0.11.0

func (r *Job) Reconcile(ctx context.Context) (ctrl.Result, error)

type PDB added in v0.11.0

func NewPDBReconciler added in v0.11.0

func NewPDBReconciler(
	client *client.Client,
	name string,
	options ...builder.PDBBuilderOption,
) (*PDB, error)

func (*PDB) Reconcile added in v0.11.0

func (r *PDB) Reconcile(ctx context.Context) (ctrl.Result, error)

type Reconciler

type Reconciler interface {
	GetName() string
	GetNamespace() string
	GetClient() *client.Client
	Reconcile(ctx context.Context) (ctrl.Result, error)
	Ready(ctx context.Context) (ctrl.Result, error)
}

type ResourceReconciler

type ResourceReconciler[B builder.ResourceBuilder] interface {
	Reconciler

	GetObjectMeta() metav1.ObjectMeta
	GetBuilder() B
	ResourceReconcile(ctx context.Context, resource ctrlclient.Object) (ctrl.Result, error)
}

type RoleGroupInfo added in v0.8.0

type RoleGroupInfo struct {
	RoleInfo
	RoleGroupName string
	// contains filtered or unexported fields
}

func (*RoleGroupInfo) AddLabel added in v0.8.0

func (i *RoleGroupInfo) AddLabel(key, value string)

func (*RoleGroupInfo) GetAnnotations added in v0.8.0

func (i *RoleGroupInfo) GetAnnotations() map[string]string

func (*RoleGroupInfo) GetFullName added in v0.8.0

func (i *RoleGroupInfo) GetFullName() string

func (*RoleGroupInfo) GetGroupName added in v0.8.0

func (i *RoleGroupInfo) GetGroupName() string

func (*RoleGroupInfo) GetLabels added in v0.8.0

func (i *RoleGroupInfo) GetLabels() map[string]string

type RoleGroupResourceReconcilersGetter added in v0.8.0

type RoleGroupResourceReconcilersGetter interface {
	GetResourceReconcilers(info *RoleGroupInfo, roleGroupSpec any) ([]Reconciler, error)
}

type RoleInfo added in v0.8.0

type RoleInfo struct {
	ClusterInfo
	RoleName string
	// contains filtered or unexported fields
}

func (*RoleInfo) AddAnnotation added in v0.8.0

func (i *RoleInfo) AddAnnotation(key, value string)

func (*RoleInfo) AddLabel added in v0.8.0

func (i *RoleInfo) AddLabel(key, value string)

func (*RoleInfo) GetAnnotations added in v0.8.0

func (i *RoleInfo) GetAnnotations() map[string]string

func (*RoleInfo) GetFullName added in v0.8.0

func (i *RoleInfo) GetFullName() string

func (*RoleInfo) GetLabels added in v0.8.0

func (i *RoleInfo) GetLabels() map[string]string

func (*RoleInfo) GetRoleName added in v0.8.0

func (i *RoleInfo) GetRoleName() string

type RoleReconciler

type RoleReconciler interface {
	Reconciler
	GetResources() []Reconciler
	AddResource(resource Reconciler)
	RegisterResources(ctx context.Context) error
	IsStopped() bool

	// Get the full name of the role, formatted as `<clusterName>-<roleName>`
	GetFullName() string
}

type Service added in v0.8.0

func NewServiceReconciler

func NewServiceReconciler(
	client *client.Client,
	name string,
	ports []corev1.ContainerPort,
	options ...builder.ServiceBuilderOptions,
) *Service

type SimpleResourceReconciler

type SimpleResourceReconciler[B builder.ResourceBuilder] struct {
	GenericResourceReconciler[B]
}

func NewSimpleResourceReconciler

func NewSimpleResourceReconciler[B builder.ResourceBuilder](
	client *client.Client,
	name string,
	builder B,
) *SimpleResourceReconciler[B]

NewSimpleResourceReconciler creates a new resource reconciler with a simple builder that does not require a spec, and can not use the spec.

type StatefulSet added in v0.8.0

type StatefulSet struct {
	GenericResourceReconciler[builder.StatefulSetBuilder]

	// When the cluster is stopped, the statefulset will be scaled to 0
	// and the reconcile will be not executed until the cluster is started
	Stopped bool
}

func NewStatefulSet added in v0.8.0

func NewStatefulSet(
	client *client.Client,
	name string,
	stsBuilder builder.StatefulSetBuilder,
	stopped bool,
) *StatefulSet

func (*StatefulSet) Ready added in v0.8.0

func (r *StatefulSet) Ready(ctx context.Context) (ctrl.Result, error)

func (*StatefulSet) Reconcile added in v0.8.0

func (r *StatefulSet) Reconcile(ctx context.Context) (ctrl.Result, error)

Jump to

Keyboard shortcuts

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