Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ConfigMapVolumeName ¶
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 ¶
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):
- status.woken non-nil and not expired → Running (on-demand wake, overrides spec.suspend)
- spec.suspend == true → Stopped (permanent user intent)
- status.suspended non-nil, not expired → Stopped (programmatic / maintenance override)
- 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 ¶
func (r *RedroidInstanceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error)
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.