controller

package
v0.1.7 Latest Latest
Warning

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

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

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ConfigMapVolumeName

func ConfigMapVolumeName(configMapName string) string

ConfigMapVolumeName returns a DNS-1123-label-safe Kubernetes volume name for the given ConfigMap name. It lowercases the input, replaces dots and underscores with hyphens, strips any remaining non-alphanumeric/non-hyphen characters, and prepends the "cm-" prefix. A deterministic 8-character SHA-256 suffix (derived from the original name) is always appended so that normalized forms that collide (e.g. "foo.bar" vs "foo-bar") remain unique. The base is truncated if necessary so that prefix + base + suffix <= 63.

func IsJobFinished

func IsJobFinished(job *batchv1.Job) bool

IsJobFinished is the exported variant of isJobFinished for use in tests.

Types

type InstancePair

type InstancePair struct {
	Ref  *redroidv1alpha1.InstanceRef
	Inst *redroidv1alpha1.RedroidInstance
}

InstancePair holds a reference to both the InstanceRef and the resolved RedroidInstance.

type RedroidInstanceReconciler

type RedroidInstanceReconciler struct {
	client.Client
	Scheme   *runtime.Scheme
	Recorder record.EventRecorder
}

RedroidInstanceReconciler reconciles a RedroidInstance object. It ensures a Pod exists and is running when the instance should be running, and deletes the Pod when it should be stopped.

Phase decision (highest priority first):

  1. status.woken non-nil and not expired → Running (on-demand wake, overrides spec.suspend)
  2. spec.suspend == true → Stopped (permanent user intent)
  3. status.suspended non-nil, not expired → Stopped (programmatic / maintenance override)
  4. default → Running

Temporary overrides (status.suspended, status.woken) live in status so GitOps tools like Flux do not reconcile them back, avoiding config drift.

+kubebuilder:rbac:groups=redroid.isning.moe,resources=redroidinstances,verbs=get;list;watch;create;update;patch;delete +kubebuilder:rbac:groups=redroid.isning.moe,resources=redroidinstances/status,verbs=get;update;patch +kubebuilder:rbac:groups=redroid.isning.moe,resources=redroidinstances/finalizers,verbs=update +kubebuilder:rbac:groups="",resources=pods,verbs=get;list;watch;create;update;patch;delete +kubebuilder:rbac:groups="",resources=pods/portforward,verbs=create +kubebuilder:rbac:groups="",resources=pods/log,verbs=get +kubebuilder:rbac:groups="",resources=services,verbs=get;list;watch;create;update;patch;delete +kubebuilder:rbac:groups="",resources=events,verbs=create;patch

func (*RedroidInstanceReconciler) Reconcile

Reconcile reconciles a RedroidInstance object.

func (*RedroidInstanceReconciler) SetupWithManager

func (r *RedroidInstanceReconciler) SetupWithManager(mgr ctrl.Manager) error

SetupWithManager registers the controller with the Manager.

type RedroidTaskReconciler

type RedroidTaskReconciler struct {
	client.Client
	Scheme   *runtime.Scheme
	Recorder record.EventRecorder
}

RedroidTaskReconciler reconciles a RedroidTask object.

For one-shot tasks (spec.schedule == ""), it creates one Job per InstanceRef. For scheduled tasks (spec.schedule != ""), it creates one CronJob per InstanceRef. All child resources are owned by the task and garbage-collected on deletion.

+kubebuilder:rbac:groups=redroid.isning.moe,resources=redroidtasks,verbs=get;list;watch;create;update;patch;delete +kubebuilder:rbac:groups=redroid.isning.moe,resources=redroidtasks/status,verbs=get;update;patch +kubebuilder:rbac:groups=redroid.isning.moe,resources=redroidtasks/finalizers,verbs=update +kubebuilder:rbac:groups=redroid.isning.moe,resources=redroidinstances,verbs=get;list;watch +kubebuilder:rbac:groups=redroid.isning.moe,resources=redroidinstances/status,verbs=get;update;patch +kubebuilder:rbac:groups=batch,resources=jobs;cronjobs,verbs=get;list;watch;create;update;patch;delete +kubebuilder:rbac:groups="",resources=configmaps,verbs=get;list;watch +kubebuilder:rbac:groups="",resources=events,verbs=create;patch

func (*RedroidTaskReconciler) Reconcile

func (r *RedroidTaskReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error)

Reconcile reconciles a RedroidTask object.

func (*RedroidTaskReconciler) SetupWithManager

func (r *RedroidTaskReconciler) SetupWithManager(mgr ctrl.Manager) error

SetupWithManager registers the controller with the Manager.

Jump to

Keyboard shortcuts

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