Skip to content

fixes #1258 controller updates deployment when headless boolean is up… #102

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jan 6, 2025
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions controllers/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package controllers
import (
"context"
"fmt"
"strconv"

registryv1alpha1 "github.com/devfile/registry-operator/api/v1alpha1"
"github.com/devfile/registry-operator/pkg/registry"
Expand Down Expand Up @@ -73,6 +74,14 @@ func (r *DevfileRegistryReconciler) updateDeployment(ctx context.Context, cr *re
}
}

headlessStatusOutdated, err := r.isHeadlessStatusOutdated(cr, dep)
if err != nil {
return err
}
if headlessStatusOutdated {
needsUpdating = true
}

if registry.IsStorageEnabled(cr) {
if dep.Spec.Template.Spec.Volumes[0].PersistentVolumeClaim == nil {
dep.Spec.Template.Spec.Volumes[0].VolumeSource = registry.GetDevfileRegistryVolumeSource(cr)
Expand Down Expand Up @@ -219,3 +228,32 @@ func (r *DevfileRegistryReconciler) deleteOldPVCIfNeeded(ctx context.Context, cr
}
return nil
}

func (r *DevfileRegistryReconciler) isHeadlessStatusOutdated(cr *registryv1alpha1.DevfileRegistry, dep *appsv1.Deployment) (bool, error) {
var existingHeadless bool
found := false

for _, env := range dep.Spec.Template.Spec.Containers[0].Env {
if env.Name == "REGISTRY_HEADLESS" {
var err error
existingHeadless, err = strconv.ParseBool(env.Value)
if err != nil {
return false, fmt.Errorf("error parsing REGISTRY_HEADLESS value: %w", err)
}
found = true
break
}
}

if !found {
existingHeadless = false
}

expectedHeadless := registry.IsHeadlessEnabled(cr)

if existingHeadless != expectedHeadless {
return true, nil
}

return false, nil
}
95 changes: 95 additions & 0 deletions controllers/update_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package controllers

import (
"testing"

registryv1alpha1 "github.com/devfile/registry-operator/api/v1alpha1"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
)

func TestHeadlessStatusOutdated(t *testing.T) {
var r *DevfileRegistryReconciler
var cr *registryv1alpha1.DevfileRegistry

r = &DevfileRegistryReconciler{}
cr = &registryv1alpha1.DevfileRegistry{
Spec: registryv1alpha1.DevfileRegistrySpec{
Headless: func(b bool) *bool { return &b }(true),
},
}

type args struct {
cr *registryv1alpha1.DevfileRegistry
dep *appsv1.Deployment
}
tests := []struct {
name string
args args
want bool
}{
{
name: "Cr headless true and deployment env REGISTRY_HEADLESS true",
args: args{
cr: cr,
dep: func() *appsv1.Deployment {
dep := &appsv1.Deployment{}
dep.Spec.Template.Spec.Containers = []corev1.Container{
{
Env: []corev1.EnvVar{{Name: "REGISTRY_HEADLESS", Value: "true"}},
},
}
return dep
}(),
},
want: false,
},
{
name: "Cr headless true and deployment env REGISTRY_HEADLESS false",
args: args{
cr: &registryv1alpha1.DevfileRegistry{
Spec: registryv1alpha1.DevfileRegistrySpec{
Headless: func(b bool) *bool { return &b }(true),
},
},
dep: func() *appsv1.Deployment {
dep := &appsv1.Deployment{}
dep.Spec.Template.Spec.Containers = []corev1.Container{
{
Env: []corev1.EnvVar{{Name: "REGISTRY_HEADLESS", Value: "false"}},
},
}
return dep
}(),
},
want: true,
},
{
name: "Cr headless false and deployment env REGISTRY_HEADLESS false",
args: args{
cr: &registryv1alpha1.DevfileRegistry{
Spec: registryv1alpha1.DevfileRegistrySpec{
Headless: func(b bool) *bool { return &b }(false),
},
},
dep: func() *appsv1.Deployment {
dep := &appsv1.Deployment{}
dep.Spec.Template.Spec.Containers = []corev1.Container{
{
Env: []corev1.EnvVar{{Name: "REGISTRY_HEADLESS", Value: "false"}},
},
}
return dep
}(),
},
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got, _ := r.isHeadlessStatusOutdated(tt.args.cr, tt.args.dep); got != tt.want {
t.Errorf("isHeadlessStatusOutdated() = %v, want %v", got, tt.want)
}
})
}
}
3 changes: 2 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ require (
k8s.io/apiextensions-apiserver v0.29.2
k8s.io/apimachinery v0.29.2
k8s.io/client-go v0.29.2
k8s.io/utils v0.0.0-20230726121419-3b25d923346b
sigs.k8s.io/controller-runtime v0.17.5
)

Expand All @@ -35,6 +36,7 @@ require (
github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-metrics v0.0.1 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
github.com/evanphx/json-patch/v5 v5.8.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
Expand Down Expand Up @@ -100,7 +102,6 @@ require (
k8s.io/component-base v0.29.2 // indirect
k8s.io/klog/v2 v2.110.1 // indirect
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
oras.land/oras-go v1.2.5 // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
Expand Down
Loading