From b625c64c5f58cb5850b2ab544ace57f70e952f84 Mon Sep 17 00:00:00 2001 From: "Md. Mobarak Hossain" <50540163+MobarakHsn@users.noreply.github.com> Date: Fri, 19 Jan 2024 19:06:07 +0600 Subject: [PATCH] Fix issues with Pgpool HealthChecker field and version check in webhook (#1118) Signed-off-by: MobarakHsn --- apis/kubedb/v1alpha2/openapi_generated.go | 1 + apis/kubedb/v1alpha2/pgpool_helpers.go | 6 ++--- apis/kubedb/v1alpha2/pgpool_types.go | 2 +- apis/kubedb/v1alpha2/pgpool_webhook.go | 23 ++++++++++--------- apis/kubedb/v1alpha2/zz_generated.deepcopy.go | 6 +---- 5 files changed, 18 insertions(+), 20 deletions(-) diff --git a/apis/kubedb/v1alpha2/openapi_generated.go b/apis/kubedb/v1alpha2/openapi_generated.go index e9bb76c921..5dd9eb35b1 100644 --- a/apis/kubedb/v1alpha2/openapi_generated.go +++ b/apis/kubedb/v1alpha2/openapi_generated.go @@ -27730,6 +27730,7 @@ func schema_apimachinery_apis_kubedb_v1alpha2_PgpoolSpec(ref common.ReferenceCal "healthChecker": { SchemaProps: spec.SchemaProps{ Description: "HealthChecker defines attributes of the health checker", + Default: map[string]interface{}{}, Ref: ref("kmodules.xyz/client-go/api/v1.HealthCheckSpec"), }, }, diff --git a/apis/kubedb/v1alpha2/pgpool_helpers.go b/apis/kubedb/v1alpha2/pgpool_helpers.go index 6bde903c77..ac26dc6e44 100644 --- a/apis/kubedb/v1alpha2/pgpool_helpers.go +++ b/apis/kubedb/v1alpha2/pgpool_helpers.go @@ -189,16 +189,16 @@ func (p *Pgpool) SetDefaults() { } p.SetHealthCheckerDefaults() - ppVersion := &catalog.PgpoolVersion{} + ppVersion := catalog.PgpoolVersion{} err := DefaultClient.Get(context.TODO(), types.NamespacedName{ Name: p.Spec.Version, - }, ppVersion) + }, &ppVersion) if err != nil { klog.Errorf("can't get the pgpool version object %s for %s \n", err.Error(), p.Spec.Version) return } if p.Spec.PodTemplate != nil { - p.SetSecurityContext(ppVersion) + p.SetSecurityContext(&ppVersion) } } diff --git a/apis/kubedb/v1alpha2/pgpool_types.go b/apis/kubedb/v1alpha2/pgpool_types.go index da03c07416..875cd3ec8b 100644 --- a/apis/kubedb/v1alpha2/pgpool_types.go +++ b/apis/kubedb/v1alpha2/pgpool_types.go @@ -96,7 +96,7 @@ type PgpoolSpec struct { // HealthChecker defines attributes of the health checker // +optional // +kubebuilder:default={periodSeconds: 10, timeoutSeconds: 10, failureThreshold: 1} - HealthChecker *kmapi.HealthCheckSpec `json:"healthChecker"` + HealthChecker kmapi.HealthCheckSpec `json:"healthChecker"` // TerminationPolicy controls the delete operation for Pgpool // +optional diff --git a/apis/kubedb/v1alpha2/pgpool_webhook.go b/apis/kubedb/v1alpha2/pgpool_webhook.go index a5aeb304d5..dd997172d9 100644 --- a/apis/kubedb/v1alpha2/pgpool_webhook.go +++ b/apis/kubedb/v1alpha2/pgpool_webhook.go @@ -17,14 +17,18 @@ limitations under the License. package v1alpha2 import ( + "context" "fmt" + catalog "kubedb.dev/apimachinery/apis/catalog/v1alpha1" + "github.com/pkg/errors" "gomodules.xyz/x/arrays" core "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/validation/field" kmapi "kmodules.xyz/client-go/api/v1" ofst "kmodules.xyz/offshoot-api/api/v2" @@ -152,7 +156,7 @@ func (p *Pgpool) ValidateCreateOrUpdate() field.ErrorList { } } - if err := p.ValidateHealth(p.Spec.HealthChecker); err != nil { + if err := p.ValidateHealth(&p.Spec.HealthChecker); err != nil { errorList = append(errorList, field.Invalid(field.NewPath("spec").Child("healthChecker"), p.Name, err.Error(), @@ -191,17 +195,14 @@ func (p *Pgpool) ValidateHealth(health *kmapi.HealthCheckSpec) error { } func PgpoolValidateVersion(p *Pgpool) error { - version := p.Spec.Version - for _, v := range PgpoolAvailableVersions { - if v == version { - return nil - } + ppVersion := catalog.PgpoolVersion{} + err := DefaultClient.Get(context.TODO(), types.NamespacedName{ + Name: p.Spec.Version, + }, &ppVersion) + if err != nil { + return errors.New("version not supported") } - return errors.New("version not supported") -} - -var PgpoolAvailableVersions = []string{ - "4.4.2", + return nil } var PgpoolReservedVolumes = []string{ diff --git a/apis/kubedb/v1alpha2/zz_generated.deepcopy.go b/apis/kubedb/v1alpha2/zz_generated.deepcopy.go index 4b61505c4c..cbfa267a53 100644 --- a/apis/kubedb/v1alpha2/zz_generated.deepcopy.go +++ b/apis/kubedb/v1alpha2/zz_generated.deepcopy.go @@ -2952,11 +2952,7 @@ func (in *PgpoolSpec) DeepCopyInto(out *PgpoolSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } - if in.HealthChecker != nil { - in, out := &in.HealthChecker, &out.HealthChecker - *out = new(apiv1.HealthCheckSpec) - (*in).DeepCopyInto(*out) - } + in.HealthChecker.DeepCopyInto(&out.HealthChecker) return }