Fix serving CRD at runtime (#3031)

* Fix serving CRD at runtime

Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>

* Correctly string quote version enum

Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>

---------

Signed-off-by: Mikkel Oscar Lyderik Larsen <mikkel.larsen@zalando.de>
This commit is contained in:
Mikkel Oscar Lyderik Larsen
2026-01-13 17:23:56 +01:00
committed by GitHub
parent 97115d6e3d
commit 32d6d0a7a7
5 changed files with 13 additions and 22 deletions
+2 -2
View File
@@ -21,7 +21,7 @@ GITSTATUS = $(shell git status --porcelain || echo "no changes")
SOURCES = cmd/main.go SOURCES = cmd/main.go
VERSION ?= $(shell git describe --tags --always --dirty) VERSION ?= $(shell git describe --tags --always --dirty)
CRD_SOURCES = $(shell find pkg/apis/zalando.org pkg/apis/acid.zalan.do -name '*.go' -not -name '*.deepcopy.go') CRD_SOURCES = $(shell find pkg/apis/zalando.org pkg/apis/acid.zalan.do -name '*.go' -not -name '*.deepcopy.go')
GENERATED_CRDS = manifests/postgresteam.crd.yaml manifests/postgresql.crd.yaml GENERATED_CRDS = manifests/postgresteam.crd.yaml manifests/postgresql.crd.yaml pkg/apis/acid.zalan.do/v1/postgresql.crd.yaml
GENERATED = pkg/apis/zalando.org/v1/zz_generated.deepcopy.go pkg/apis/acid.zalan.do/v1/zz_generated.deepcopy.go GENERATED = pkg/apis/zalando.org/v1/zz_generated.deepcopy.go pkg/apis/acid.zalan.do/v1/zz_generated.deepcopy.go
DIRS := cmd pkg DIRS := cmd pkg
PKG := `go list ./... | grep -v /vendor/` PKG := `go list ./... | grep -v /vendor/`
@@ -55,7 +55,7 @@ default: local
clean: clean:
rm -rf build rm -rf build
rm $(GENERATED) rm $(GENERATED)
rm pkg/apis/acid.zalan.do/v1/postgresql.crd.yaml rm $(GENERATED_CRDS)
verify: verify:
hack/verify-codegen.sh hack/verify-codegen.sh
+5 -5
View File
@@ -3523,11 +3523,11 @@ spec:
type: object type: object
version: version:
enum: enum:
- 13 - "13"
- 14 - "14"
- 15 - "15"
- 16 - "16"
- 17 - "17"
type: string type: string
required: required:
- version - version
+3 -4
View File
@@ -4,12 +4,11 @@ import (
_ "embed" _ "embed"
"fmt" "fmt"
apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/stretchr/testify/assert/yaml"
acidzalando "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do" acidzalando "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do"
"github.com/zalando/postgres-operator/pkg/util" "github.com/zalando/postgres-operator/pkg/util"
apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/yaml"
) )
// CRDResource* define names necesssary for the k8s CRD API // CRDResource* define names necesssary for the k8s CRD API
+1 -1
View File
@@ -185,7 +185,7 @@ type AdditionalVolume struct {
// PostgresqlParam describes PostgreSQL version and pairs of configuration parameter name - values. // PostgresqlParam describes PostgreSQL version and pairs of configuration parameter name - values.
type PostgresqlParam struct { type PostgresqlParam struct {
// +kubebuilder:validation:Enum=13;14;15;16;17 // +kubebuilder:validation:Enum="13";"14";"15";"16";"17"
PgVersion string `json:"version"` PgVersion string `json:"version"`
Parameters map[string]string `json:"parameters,omitempty"` Parameters map[string]string `json:"parameters,omitempty"`
} }
+2 -10
View File
@@ -2,14 +2,12 @@ package controller
import ( import (
"context" "context"
"encoding/json"
"fmt" "fmt"
"strings" "strings"
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1"
@@ -65,15 +63,9 @@ func (c *Controller) createOperatorCRD(desiredCrd *apiextv1.CustomResourceDefini
} }
if crd != nil { if crd != nil {
c.logger.Infof("customResourceDefinition %q is already registered and will only be updated", crd.Name) c.logger.Infof("customResourceDefinition %q is already registered and will only be updated", crd.Name)
// copy annotations and labels from existing CRD since we do not define them crd.Spec = desiredCrd.Spec
desiredCrd.Annotations = crd.Annotations _, err := c.KubeClient.CustomResourceDefinitions().Update(context.TODO(), crd, metav1.UpdateOptions{})
desiredCrd.Labels = crd.Labels
patch, err := json.Marshal(desiredCrd)
if err != nil { if err != nil {
return fmt.Errorf("could not marshal new customResourceDefintion %q: %v", desiredCrd.Name, err)
}
if _, err := c.KubeClient.CustomResourceDefinitions().Patch(
context.TODO(), crd.Name, types.MergePatchType, patch, metav1.PatchOptions{}); err != nil {
return fmt.Errorf("could not update customResourceDefinition %q: %v", crd.Name, err) return fmt.Errorf("could not update customResourceDefinition %q: %v", crd.Name, err)
} }
} }