diff --git a/internal/controller/application_controller.go b/internal/controller/application_controller.go index cdcef464..e89d7425 100644 --- a/internal/controller/application_controller.go +++ b/internal/controller/application_controller.go @@ -37,6 +37,7 @@ import ( "knative.dev/pkg/ptr" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" gatewayv1 "sigs.k8s.io/gateway-api/apis/v1" gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2" ) @@ -288,6 +289,10 @@ func (r *ApplicationReconciler) reconcileDeployment(ctx context.Context, app *wa deployment.Spec.Replicas = app.Spec.Replicas } + if err = controllerutil.SetControllerReference(app, deployment, r.Scheme); err != nil { + return ctrl.Result{}, err + } + logger.Debug("Deployment spec", "Deployment", deployment.Name, "Spec", deployment.Spec) if deployment.CreationTimestamp.IsZero() { @@ -390,6 +395,10 @@ func (r *ApplicationReconciler) reconcileRollout(ctx context.Context, app *wandb rollout.Spec.Replicas = app.Spec.Replicas } + if err = controllerutil.SetControllerReference(app, rollout, r.Scheme); err != nil { + return ctrl.Result{}, err + } + logger.Info("Rollout spec", "Rollout", rollout.Name, "Spec", rollout.Spec) if rollout.CreationTimestamp.IsZero() { @@ -485,6 +494,10 @@ func (r *ApplicationReconciler) reconcileStatefulSet(ctx context.Context, app *w statefulSet.Spec.Replicas = app.Spec.Replicas } + if err = controllerutil.SetControllerReference(app, statefulSet, r.Scheme); err != nil { + return ctrl.Result{}, err + } + logger.Info("StatefulSet spec", "StatefulSet", statefulSet.Name, "Spec", statefulSet.Spec) if statefulSet.CreationTimestamp.IsZero() { @@ -569,10 +582,14 @@ func (r *ApplicationReconciler) reconcileJobs(ctx context.Context, app *wandbv2. jobToReconcile.Labels = make(map[string]string) } jobToReconcile.Labels["app.kubernetes.io/name"] = app.Name - jobToReconcile.Labels["app.kubernetes.io/instance"] = app.Name + jobToReconcile.Labels["app.kubernetes.io/instance"] = app.Namespace jobToReconcile.Labels["app.kubernetes.io/managed-by"] = "application-controller" - if errors.IsNotFound(err) { + if err = controllerutil.SetControllerReference(app, jobToReconcile, r.Scheme); err != nil { + return err + } + + if currentJob.CreationTimestamp.IsZero() { if err := r.Create(ctx, jobToReconcile); err != nil { logger.Error("Failed to create Job", logx.ErrAttr(err), "Job", jobName) return err @@ -617,7 +634,7 @@ func (r *ApplicationReconciler) deleteJobs(ctx context.Context, app *wandbv2.App client.InNamespace(app.Namespace), client.MatchingLabels{ "app.kubernetes.io/name": app.Name, - "app.kubernetes.io/instance": app.Name, + "app.kubernetes.io/instance": app.Namespace, "app.kubernetes.io/managed-by": "application-controller", }, } @@ -671,9 +688,13 @@ func (r *ApplicationReconciler) reconcileCronJobs(ctx context.Context, app *wand cronJobToReconcile.Labels = make(map[string]string) } cronJobToReconcile.Labels["app.kubernetes.io/name"] = app.Name - cronJobToReconcile.Labels["app.kubernetes.io/instance"] = app.Name + cronJobToReconcile.Labels["app.kubernetes.io/instance"] = app.Namespace cronJobToReconcile.Labels["app.kubernetes.io/managed-by"] = "application-controller" + if err = controllerutil.SetControllerReference(app, cronJobToReconcile, r.Scheme); err != nil { + return err + } + if currentCronJob.CreationTimestamp.IsZero() { if err := r.Create(ctx, cronJobToReconcile); err != nil { logger.Error("Failed to create CronJob", logx.ErrAttr(err), "CronJob", cronJobName) @@ -704,7 +725,7 @@ func (r *ApplicationReconciler) deleteCronJobs(ctx context.Context, app *wandbv2 client.InNamespace(app.Namespace), client.MatchingLabels{ "app.kubernetes.io/name": app.Name, - "app.kubernetes.io/instance": app.Name, + "app.kubernetes.io/instance": app.Namespace, "app.kubernetes.io/managed-by": "application-controller", }, } @@ -760,6 +781,10 @@ func (r *ApplicationReconciler) reconcileService(ctx context.Context, app *wandb // Also add selector labels to the Service's metadata labels so they are queryable on the Service itself desired.Labels = utils.MergeMapsStringString(desired.Labels, selectorLabels) + if err := controllerutil.SetControllerReference(app, desired, r.Scheme); err != nil { + return err + } + current := &corev1.Service{} err := r.Get(ctx, client.ObjectKey{Namespace: app.Namespace, Name: app.Name}, current) if err != nil { @@ -889,6 +914,10 @@ func (r *ApplicationReconciler) reconcileHPA(ctx context.Context, app *wandbv2.A Name: app.Name, } + if err := controllerutil.SetControllerReference(app, desired, r.Scheme); err != nil { + return err + } + current := &autoscalingv2.HorizontalPodAutoscaler{} err := r.Get(ctx, client.ObjectKey{Namespace: app.Namespace, Name: app.Name}, current) if err != nil {