From 01913ecd358214bdc3a81e6148e20f96b964f4e3 Mon Sep 17 00:00:00 2001 From: Philip Hurst Date: Tue, 14 Jan 2025 23:42:09 +0000 Subject: [PATCH 1/9] add IP Family Policy to CRD --- ...ator.crunchydata.com_postgresclusters.yaml | 28 +++++++++++++++++++ .../v1beta1/shared_types.go | 6 ++++ 2 files changed, 34 insertions(+) diff --git a/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml b/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml index 914440f580..396fca3fc2 100644 --- a/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml +++ b/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml @@ -14663,6 +14663,13 @@ spec: - Local maxLength: 10 type: string + ipFamilyPolicy: + description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/' + enum: + - SingleStack + - PreferDualStack + - RequireDualStack + type: string metadata: description: Metadata contains metadata for custom resources properties: @@ -15005,6 +15012,13 @@ spec: - Local maxLength: 10 type: string + ipFamilyPolicy: + description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/' + enum: + - SingleStack + - PreferDualStack + - RequireDualStack + type: string metadata: description: Metadata contains metadata for custom resources properties: @@ -15053,6 +15067,13 @@ spec: - Local maxLength: 10 type: string + ipFamilyPolicy: + description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/' + enum: + - SingleStack + - PreferDualStack + - RequireDualStack + type: string metadata: description: Metadata contains metadata for custom resources properties: @@ -16749,6 +16770,13 @@ spec: - Local maxLength: 10 type: string + ipFamilyPolicy: + description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/' + enum: + - SingleStack + - PreferDualStack + - RequireDualStack + type: string metadata: description: Metadata contains metadata for custom resources properties: diff --git a/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go b/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go index 6de2b35336..1bd612c9e8 100644 --- a/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go +++ b/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go @@ -44,6 +44,12 @@ type ServiceSpec struct { // +kubebuilder:validation:Enum={ClusterIP,NodePort,LoadBalancer} Type string `json:"type"` + // More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/ + // --- + // +optional + // +kubebuilder:validation:Enum=SingleStack;PreferDualStack;RequireDualStack + IPFamilyPolicy string `json:"ipFamilyPolicy,omitempty"` + // More info: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-policies // --- // Kubernetes assumes the evaluation cost of an enum value is very large. From 8900ba8d44d043f11654ad4fac8cfad3f225afc4 Mon Sep 17 00:00:00 2001 From: Philip Hurst Date: Tue, 14 Jan 2025 23:42:43 +0000 Subject: [PATCH 2/9] update controller logic for IP Family Policy --- internal/controller/postgrescluster/cluster.go | 7 +++++++ internal/controller/postgrescluster/patroni.go | 6 ++++++ internal/controller/postgrescluster/pgadmin.go | 6 ++++++ internal/controller/postgrescluster/pgbouncer.go | 6 ++++++ 4 files changed, 25 insertions(+) diff --git a/internal/controller/postgrescluster/cluster.go b/internal/controller/postgrescluster/cluster.go index 7e863fdadf..dc0210e029 100644 --- a/internal/controller/postgrescluster/cluster.go +++ b/internal/controller/postgrescluster/cluster.go @@ -267,6 +267,13 @@ func (r *Reconciler) generateClusterReplicaService( } service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy) service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy + + // Default to SingleStack if IP Family Policy is not defined + if spec.IPFamilyPolicy == "" { + spec.IPFamilyPolicy = "SingleStack" + } + service.Spec.IPFamilyPolicy = (*corev1.IPFamilyPolicy)(&spec.IPFamilyPolicy) + } service.Spec.Ports = []corev1.ServicePort{servicePort} diff --git a/internal/controller/postgrescluster/patroni.go b/internal/controller/postgrescluster/patroni.go index 293690a77b..2fe683340a 100644 --- a/internal/controller/postgrescluster/patroni.go +++ b/internal/controller/postgrescluster/patroni.go @@ -271,6 +271,12 @@ func (r *Reconciler) generatePatroniLeaderLeaseService( } service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy) service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy + + // Default to SingleStack if IP Family Policy is not defined + if spec.IPFamilyPolicy == "" { + spec.IPFamilyPolicy = "SingleStack" + } + service.Spec.IPFamilyPolicy = (*corev1.IPFamilyPolicy)(&spec.IPFamilyPolicy) } service.Spec.Ports = []corev1.ServicePort{servicePort} diff --git a/internal/controller/postgrescluster/pgadmin.go b/internal/controller/postgrescluster/pgadmin.go index f102405b47..977bfdf607 100644 --- a/internal/controller/postgrescluster/pgadmin.go +++ b/internal/controller/postgrescluster/pgadmin.go @@ -183,6 +183,12 @@ func (r *Reconciler) generatePGAdminService( } service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy) service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy + + // Default to SingleStack if IP Family Policy is not defined + if spec.IPFamilyPolicy == "" { + spec.IPFamilyPolicy = "SingleStack" + } + service.Spec.IPFamilyPolicy = (*corev1.IPFamilyPolicy)(&spec.IPFamilyPolicy) } service.Spec.Ports = []corev1.ServicePort{servicePort} diff --git a/internal/controller/postgrescluster/pgbouncer.go b/internal/controller/postgrescluster/pgbouncer.go index eb71c189f6..2fcc790e6b 100644 --- a/internal/controller/postgrescluster/pgbouncer.go +++ b/internal/controller/postgrescluster/pgbouncer.go @@ -306,6 +306,12 @@ func (r *Reconciler) generatePGBouncerService( } service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy) service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy + + // Default to SingleStack if IP Family Policy is not defined + if spec.IPFamilyPolicy == "" { + spec.IPFamilyPolicy = "SingleStack" + } + service.Spec.IPFamilyPolicy = (*corev1.IPFamilyPolicy)(&spec.IPFamilyPolicy) } service.Spec.Ports = []corev1.ServicePort{servicePort} From f8d311262878be249fbe031bb108095e1b0fc3a1 Mon Sep 17 00:00:00 2001 From: Philip Hurst Date: Wed, 22 Jan 2025 20:15:16 +0000 Subject: [PATCH 3/9] added IPFamilies to the CRD --- ...ator.crunchydata.com_postgresclusters.yaml | 32 +++++++++++++++++++ .../v1beta1/shared_types.go | 7 ++++ .../v1beta1/zz_generated.deepcopy.go | 5 +++ 3 files changed, 44 insertions(+) diff --git a/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml b/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml index 396fca3fc2..0aa09e626e 100644 --- a/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml +++ b/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml @@ -14663,6 +14663,14 @@ spec: - Local maxLength: 10 type: string + ipFamilies: + items: + enum: + - IPv4 + - IPv6 + - foo + type: string + type: array ipFamilyPolicy: description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/' enum: @@ -15012,6 +15020,14 @@ spec: - Local maxLength: 10 type: string + ipFamilies: + items: + enum: + - IPv4 + - IPv6 + - foo + type: string + type: array ipFamilyPolicy: description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/' enum: @@ -15067,6 +15083,14 @@ spec: - Local maxLength: 10 type: string + ipFamilies: + items: + enum: + - IPv4 + - IPv6 + - foo + type: string + type: array ipFamilyPolicy: description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/' enum: @@ -16770,6 +16794,14 @@ spec: - Local maxLength: 10 type: string + ipFamilies: + items: + enum: + - IPv4 + - IPv6 + - foo + type: string + type: array ipFamilyPolicy: description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/' enum: diff --git a/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go b/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go index 1bd612c9e8..2897c539a6 100644 --- a/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go +++ b/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go @@ -20,8 +20,12 @@ type SchemalessObject map[string]any // DeepCopy creates a new SchemalessObject by copying the receiver. func (in SchemalessObject) DeepCopy() SchemalessObject { return runtime.DeepCopyJSON(in) + } +// +kubebuilder:validation:Enum=IPv4;IPv6;foo +type IPFamily string + type ServiceSpec struct { // +optional Metadata *Metadata `json:"metadata,omitempty"` @@ -50,6 +54,9 @@ type ServiceSpec struct { // +kubebuilder:validation:Enum=SingleStack;PreferDualStack;RequireDualStack IPFamilyPolicy string `json:"ipFamilyPolicy,omitempty"` + // +optional + IPFamilies []IPFamily `json:"ipFamilies,omitempty"` + // More info: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-policies // --- // Kubernetes assumes the evaluation cost of an enum value is very large. diff --git a/pkg/apis/postgres-operator.crunchydata.com/v1beta1/zz_generated.deepcopy.go b/pkg/apis/postgres-operator.crunchydata.com/v1beta1/zz_generated.deepcopy.go index 5eb63bd867..b632e4ac38 100644 --- a/pkg/apis/postgres-operator.crunchydata.com/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/postgres-operator.crunchydata.com/v1beta1/zz_generated.deepcopy.go @@ -2213,6 +2213,11 @@ func (in *ServiceSpec) DeepCopyInto(out *ServiceSpec) { *out = new(int32) **out = **in } + if in.IPFamilies != nil { + in, out := &in.IPFamilies, &out.IPFamilies + *out = make([]IPFamily, len(*in)) + copy(*out, *in) + } if in.InternalTrafficPolicy != nil { in, out := &in.InternalTrafficPolicy, &out.InternalTrafficPolicy *out = new(corev1.ServiceInternalTrafficPolicy) From 0bdcb71c6c997591f4a12e0a076732b212e779c9 Mon Sep 17 00:00:00 2001 From: Philip Hurst Date: Wed, 22 Jan 2025 20:18:16 +0000 Subject: [PATCH 4/9] update controller logic for IP Families and IP Family Policy --- internal/controller/postgrescluster/cluster.go | 14 ++++++++++---- internal/controller/postgrescluster/patroni.go | 14 ++++++++++---- internal/controller/postgrescluster/pgadmin.go | 14 ++++++++++---- internal/controller/postgrescluster/pgbouncer.go | 14 ++++++++++---- 4 files changed, 40 insertions(+), 16 deletions(-) diff --git a/internal/controller/postgrescluster/cluster.go b/internal/controller/postgrescluster/cluster.go index dc0210e029..b03b15048c 100644 --- a/internal/controller/postgrescluster/cluster.go +++ b/internal/controller/postgrescluster/cluster.go @@ -268,11 +268,17 @@ func (r *Reconciler) generateClusterReplicaService( service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy) service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy - // Default to SingleStack if IP Family Policy is not defined - if spec.IPFamilyPolicy == "" { - spec.IPFamilyPolicy = "SingleStack" + // Set IPFamilyPolicy and IPFamilies + if spec.IPFamilyPolicy != "" { + policy := corev1.IPFamilyPolicyType(spec.IPFamilyPolicy) + service.Spec.IPFamilyPolicy = &policy + } + if len(spec.IPFamilies) > 0 { + service.Spec.IPFamilies = []corev1.IPFamily{} + for _, family := range spec.IPFamilies { + service.Spec.IPFamilies = append(service.Spec.IPFamilies, corev1.IPFamily(family)) + } } - service.Spec.IPFamilyPolicy = (*corev1.IPFamilyPolicy)(&spec.IPFamilyPolicy) } service.Spec.Ports = []corev1.ServicePort{servicePort} diff --git a/internal/controller/postgrescluster/patroni.go b/internal/controller/postgrescluster/patroni.go index 2fe683340a..5efb763314 100644 --- a/internal/controller/postgrescluster/patroni.go +++ b/internal/controller/postgrescluster/patroni.go @@ -272,11 +272,17 @@ func (r *Reconciler) generatePatroniLeaderLeaseService( service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy) service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy - // Default to SingleStack if IP Family Policy is not defined - if spec.IPFamilyPolicy == "" { - spec.IPFamilyPolicy = "SingleStack" + // Set IPFamilyPolicy and IPFamilies + if spec.IPFamilyPolicy != "" { + policy := corev1.IPFamilyPolicyType(spec.IPFamilyPolicy) + service.Spec.IPFamilyPolicy = &policy + } + if len(spec.IPFamilies) > 0 { + service.Spec.IPFamilies = []corev1.IPFamily{} + for _, family := range spec.IPFamilies { + service.Spec.IPFamilies = append(service.Spec.IPFamilies, corev1.IPFamily(family)) + } } - service.Spec.IPFamilyPolicy = (*corev1.IPFamilyPolicy)(&spec.IPFamilyPolicy) } service.Spec.Ports = []corev1.ServicePort{servicePort} diff --git a/internal/controller/postgrescluster/pgadmin.go b/internal/controller/postgrescluster/pgadmin.go index 977bfdf607..4332b80189 100644 --- a/internal/controller/postgrescluster/pgadmin.go +++ b/internal/controller/postgrescluster/pgadmin.go @@ -184,11 +184,17 @@ func (r *Reconciler) generatePGAdminService( service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy) service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy - // Default to SingleStack if IP Family Policy is not defined - if spec.IPFamilyPolicy == "" { - spec.IPFamilyPolicy = "SingleStack" + // Set IPFamilyPolicy and IPFamilies + if spec.IPFamilyPolicy != "" { + policy := corev1.IPFamilyPolicyType(spec.IPFamilyPolicy) + service.Spec.IPFamilyPolicy = &policy + } + if len(spec.IPFamilies) > 0 { + service.Spec.IPFamilies = []corev1.IPFamily{} + for _, family := range spec.IPFamilies { + service.Spec.IPFamilies = append(service.Spec.IPFamilies, corev1.IPFamily(family)) + } } - service.Spec.IPFamilyPolicy = (*corev1.IPFamilyPolicy)(&spec.IPFamilyPolicy) } service.Spec.Ports = []corev1.ServicePort{servicePort} diff --git a/internal/controller/postgrescluster/pgbouncer.go b/internal/controller/postgrescluster/pgbouncer.go index 2fcc790e6b..704f8b5f3d 100644 --- a/internal/controller/postgrescluster/pgbouncer.go +++ b/internal/controller/postgrescluster/pgbouncer.go @@ -307,11 +307,17 @@ func (r *Reconciler) generatePGBouncerService( service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy) service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy - // Default to SingleStack if IP Family Policy is not defined - if spec.IPFamilyPolicy == "" { - spec.IPFamilyPolicy = "SingleStack" + // Set IPFamilyPolicy and IPFamilies + if spec.IPFamilyPolicy != "" { + policy := corev1.IPFamilyPolicyType(spec.IPFamilyPolicy) + service.Spec.IPFamilyPolicy = &policy + } + if len(spec.IPFamilies) > 0 { + service.Spec.IPFamilies = []corev1.IPFamily{} + for _, family := range spec.IPFamilies { + service.Spec.IPFamilies = append(service.Spec.IPFamilies, corev1.IPFamily(family)) + } } - service.Spec.IPFamilyPolicy = (*corev1.IPFamilyPolicy)(&spec.IPFamilyPolicy) } service.Spec.Ports = []corev1.ServicePort{servicePort} From 6eecd0b0e3bfc8ae97e5b22abc2a434476457e87 Mon Sep 17 00:00:00 2001 From: Philip Hurst Date: Wed, 22 Jan 2025 20:23:56 +0000 Subject: [PATCH 5/9] update enum validation for IPFamily --- .../postgres-operator.crunchydata.com/v1beta1/shared_types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go b/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go index 2897c539a6..8678e07132 100644 --- a/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go +++ b/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go @@ -23,7 +23,7 @@ func (in SchemalessObject) DeepCopy() SchemalessObject { } -// +kubebuilder:validation:Enum=IPv4;IPv6;foo +// +kubebuilder:validation:Enum=IPv4;IPv6 type IPFamily string type ServiceSpec struct { From dbd60a1cad0f60b47c9d78406646abe004fc1bf1 Mon Sep 17 00:00:00 2001 From: Philip Hurst Date: Wed, 22 Jan 2025 20:46:56 +0000 Subject: [PATCH 6/9] update to enum for IP Families --- .../postgres-operator.crunchydata.com_postgresclusters.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml b/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml index 0aa09e626e..2db0b8df78 100644 --- a/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml +++ b/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml @@ -14668,7 +14668,6 @@ spec: enum: - IPv4 - IPv6 - - foo type: string type: array ipFamilyPolicy: @@ -15025,7 +15024,6 @@ spec: enum: - IPv4 - IPv6 - - foo type: string type: array ipFamilyPolicy: @@ -15088,7 +15086,6 @@ spec: enum: - IPv4 - IPv6 - - foo type: string type: array ipFamilyPolicy: @@ -16799,7 +16796,6 @@ spec: enum: - IPv4 - IPv6 - - foo type: string type: array ipFamilyPolicy: From 1249fe7865d1056f6caf8e54e290c661e1997500 Mon Sep 17 00:00:00 2001 From: Philip Hurst Date: Tue, 28 Jan 2025 19:18:01 +0000 Subject: [PATCH 7/9] refactor to use the upstream type --- ...es-operator.crunchydata.com_postgresclusters.yaml | 12 ++++++++++++ .../v1beta1/shared_types.go | 8 +++----- .../v1beta1/zz_generated.deepcopy.go | 7 ++++++- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml b/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml index 2db0b8df78..edae909760 100644 --- a/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml +++ b/config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml @@ -14665,6 +14665,9 @@ spec: type: string ipFamilies: items: + description: |- + IPFamily represents the IP Family (IPv4 or IPv6). This type is used + to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies). enum: - IPv4 - IPv6 @@ -15021,6 +15024,9 @@ spec: type: string ipFamilies: items: + description: |- + IPFamily represents the IP Family (IPv4 or IPv6). This type is used + to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies). enum: - IPv4 - IPv6 @@ -15083,6 +15089,9 @@ spec: type: string ipFamilies: items: + description: |- + IPFamily represents the IP Family (IPv4 or IPv6). This type is used + to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies). enum: - IPv4 - IPv6 @@ -16793,6 +16802,9 @@ spec: type: string ipFamilies: items: + description: |- + IPFamily represents the IP Family (IPv4 or IPv6). This type is used + to express the family of an IP expressed by a type (e.g. service.spec.ipFamilies). enum: - IPv4 - IPv6 diff --git a/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go b/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go index 8678e07132..79de9ae5f3 100644 --- a/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go +++ b/pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go @@ -23,9 +23,6 @@ func (in SchemalessObject) DeepCopy() SchemalessObject { } -// +kubebuilder:validation:Enum=IPv4;IPv6 -type IPFamily string - type ServiceSpec struct { // +optional Metadata *Metadata `json:"metadata,omitempty"` @@ -52,10 +49,11 @@ type ServiceSpec struct { // --- // +optional // +kubebuilder:validation:Enum=SingleStack;PreferDualStack;RequireDualStack - IPFamilyPolicy string `json:"ipFamilyPolicy,omitempty"` + IPFamilyPolicy *corev1.IPFamilyPolicy `json:"ipFamilyPolicy,omitempty"` // +optional - IPFamilies []IPFamily `json:"ipFamilies,omitempty"` + // +kubebuilder:validation:items:Enum={IPv4,IPv6} + IPFamilies []corev1.IPFamily `json:"ipFamilies,omitempty"` // More info: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-policies // --- diff --git a/pkg/apis/postgres-operator.crunchydata.com/v1beta1/zz_generated.deepcopy.go b/pkg/apis/postgres-operator.crunchydata.com/v1beta1/zz_generated.deepcopy.go index b632e4ac38..a9c87a7abd 100644 --- a/pkg/apis/postgres-operator.crunchydata.com/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/postgres-operator.crunchydata.com/v1beta1/zz_generated.deepcopy.go @@ -2213,9 +2213,14 @@ func (in *ServiceSpec) DeepCopyInto(out *ServiceSpec) { *out = new(int32) **out = **in } + if in.IPFamilyPolicy != nil { + in, out := &in.IPFamilyPolicy, &out.IPFamilyPolicy + *out = new(corev1.IPFamilyPolicy) + **out = **in + } if in.IPFamilies != nil { in, out := &in.IPFamilies, &out.IPFamilies - *out = make([]IPFamily, len(*in)) + *out = make([]corev1.IPFamily, len(*in)) copy(*out, *in) } if in.InternalTrafficPolicy != nil { From 1cec5eb0d8f54d036792c6dc789517526bcc275d Mon Sep 17 00:00:00 2001 From: Philip Hurst Date: Tue, 28 Jan 2025 19:18:42 +0000 Subject: [PATCH 8/9] updated controller logic to use upstream type --- internal/controller/postgrescluster/cluster.go | 5 ++--- internal/controller/postgrescluster/patroni.go | 5 ++--- internal/controller/postgrescluster/pgadmin.go | 5 ++--- internal/controller/postgrescluster/pgbouncer.go | 5 ++--- 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/internal/controller/postgrescluster/cluster.go b/internal/controller/postgrescluster/cluster.go index b03b15048c..794ff71df8 100644 --- a/internal/controller/postgrescluster/cluster.go +++ b/internal/controller/postgrescluster/cluster.go @@ -269,9 +269,8 @@ func (r *Reconciler) generateClusterReplicaService( service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy // Set IPFamilyPolicy and IPFamilies - if spec.IPFamilyPolicy != "" { - policy := corev1.IPFamilyPolicyType(spec.IPFamilyPolicy) - service.Spec.IPFamilyPolicy = &policy + if spec.IPFamilyPolicy != nil { + service.Spec.IPFamilyPolicy = spec.IPFamilyPolicy } if len(spec.IPFamilies) > 0 { service.Spec.IPFamilies = []corev1.IPFamily{} diff --git a/internal/controller/postgrescluster/patroni.go b/internal/controller/postgrescluster/patroni.go index 5efb763314..d37a467667 100644 --- a/internal/controller/postgrescluster/patroni.go +++ b/internal/controller/postgrescluster/patroni.go @@ -273,9 +273,8 @@ func (r *Reconciler) generatePatroniLeaderLeaseService( service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy // Set IPFamilyPolicy and IPFamilies - if spec.IPFamilyPolicy != "" { - policy := corev1.IPFamilyPolicyType(spec.IPFamilyPolicy) - service.Spec.IPFamilyPolicy = &policy + if spec.IPFamilyPolicy != nil { + service.Spec.IPFamilyPolicy = spec.IPFamilyPolicy } if len(spec.IPFamilies) > 0 { service.Spec.IPFamilies = []corev1.IPFamily{} diff --git a/internal/controller/postgrescluster/pgadmin.go b/internal/controller/postgrescluster/pgadmin.go index 4332b80189..8708394023 100644 --- a/internal/controller/postgrescluster/pgadmin.go +++ b/internal/controller/postgrescluster/pgadmin.go @@ -185,9 +185,8 @@ func (r *Reconciler) generatePGAdminService( service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy // Set IPFamilyPolicy and IPFamilies - if spec.IPFamilyPolicy != "" { - policy := corev1.IPFamilyPolicyType(spec.IPFamilyPolicy) - service.Spec.IPFamilyPolicy = &policy + if spec.IPFamilyPolicy != nil { + service.Spec.IPFamilyPolicy = spec.IPFamilyPolicy } if len(spec.IPFamilies) > 0 { service.Spec.IPFamilies = []corev1.IPFamily{} diff --git a/internal/controller/postgrescluster/pgbouncer.go b/internal/controller/postgrescluster/pgbouncer.go index 704f8b5f3d..4beaf46447 100644 --- a/internal/controller/postgrescluster/pgbouncer.go +++ b/internal/controller/postgrescluster/pgbouncer.go @@ -308,9 +308,8 @@ func (r *Reconciler) generatePGBouncerService( service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy // Set IPFamilyPolicy and IPFamilies - if spec.IPFamilyPolicy != "" { - policy := corev1.IPFamilyPolicyType(spec.IPFamilyPolicy) - service.Spec.IPFamilyPolicy = &policy + if spec.IPFamilyPolicy != nil { + service.Spec.IPFamilyPolicy = spec.IPFamilyPolicy } if len(spec.IPFamilies) > 0 { service.Spec.IPFamilies = []corev1.IPFamily{} From 4c4ec0c3a5ed32d37258c4f84088351405655c80 Mon Sep 17 00:00:00 2001 From: Philip Hurst Date: Tue, 28 Jan 2025 19:28:32 +0000 Subject: [PATCH 9/9] simplified IP Family assignment --- internal/controller/postgrescluster/cluster.go | 5 +---- internal/controller/postgrescluster/patroni.go | 5 +---- internal/controller/postgrescluster/pgadmin.go | 5 +---- internal/controller/postgrescluster/pgbouncer.go | 5 +---- 4 files changed, 4 insertions(+), 16 deletions(-) diff --git a/internal/controller/postgrescluster/cluster.go b/internal/controller/postgrescluster/cluster.go index 794ff71df8..67544d621b 100644 --- a/internal/controller/postgrescluster/cluster.go +++ b/internal/controller/postgrescluster/cluster.go @@ -273,10 +273,7 @@ func (r *Reconciler) generateClusterReplicaService( service.Spec.IPFamilyPolicy = spec.IPFamilyPolicy } if len(spec.IPFamilies) > 0 { - service.Spec.IPFamilies = []corev1.IPFamily{} - for _, family := range spec.IPFamilies { - service.Spec.IPFamilies = append(service.Spec.IPFamilies, corev1.IPFamily(family)) - } + service.Spec.IPFamilies = spec.IPFamilies } } diff --git a/internal/controller/postgrescluster/patroni.go b/internal/controller/postgrescluster/patroni.go index d37a467667..995de75b61 100644 --- a/internal/controller/postgrescluster/patroni.go +++ b/internal/controller/postgrescluster/patroni.go @@ -277,10 +277,7 @@ func (r *Reconciler) generatePatroniLeaderLeaseService( service.Spec.IPFamilyPolicy = spec.IPFamilyPolicy } if len(spec.IPFamilies) > 0 { - service.Spec.IPFamilies = []corev1.IPFamily{} - for _, family := range spec.IPFamilies { - service.Spec.IPFamilies = append(service.Spec.IPFamilies, corev1.IPFamily(family)) - } + service.Spec.IPFamilies = spec.IPFamilies } } service.Spec.Ports = []corev1.ServicePort{servicePort} diff --git a/internal/controller/postgrescluster/pgadmin.go b/internal/controller/postgrescluster/pgadmin.go index 8708394023..40874aa1be 100644 --- a/internal/controller/postgrescluster/pgadmin.go +++ b/internal/controller/postgrescluster/pgadmin.go @@ -189,10 +189,7 @@ func (r *Reconciler) generatePGAdminService( service.Spec.IPFamilyPolicy = spec.IPFamilyPolicy } if len(spec.IPFamilies) > 0 { - service.Spec.IPFamilies = []corev1.IPFamily{} - for _, family := range spec.IPFamilies { - service.Spec.IPFamilies = append(service.Spec.IPFamilies, corev1.IPFamily(family)) - } + service.Spec.IPFamilies = spec.IPFamilies } } service.Spec.Ports = []corev1.ServicePort{servicePort} diff --git a/internal/controller/postgrescluster/pgbouncer.go b/internal/controller/postgrescluster/pgbouncer.go index 4beaf46447..1b9bb837f3 100644 --- a/internal/controller/postgrescluster/pgbouncer.go +++ b/internal/controller/postgrescluster/pgbouncer.go @@ -312,10 +312,7 @@ func (r *Reconciler) generatePGBouncerService( service.Spec.IPFamilyPolicy = spec.IPFamilyPolicy } if len(spec.IPFamilies) > 0 { - service.Spec.IPFamilies = []corev1.IPFamily{} - for _, family := range spec.IPFamilies { - service.Spec.IPFamilies = append(service.Spec.IPFamilies, corev1.IPFamily(family)) - } + service.Spec.IPFamilies = spec.IPFamilies } } service.Spec.Ports = []corev1.ServicePort{servicePort}