Skip to content

Commit 82a0cd6

Browse files
authored
Merge pull request #1 from philrhurst/dev
Add IP Family Policy and IP Families to CRD for Services
2 parents 4454815 + 0bdcb71 commit 82a0cd6

File tree

7 files changed

+127
-0
lines changed

7 files changed

+127
-0
lines changed

config/crd/bases/postgres-operator.crunchydata.com_postgresclusters.yaml

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14663,6 +14663,21 @@ spec:
1466314663
- Local
1466414664
maxLength: 10
1466514665
type: string
14666+
ipFamilies:
14667+
items:
14668+
enum:
14669+
- IPv4
14670+
- IPv6
14671+
- foo
14672+
type: string
14673+
type: array
14674+
ipFamilyPolicy:
14675+
description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
14676+
enum:
14677+
- SingleStack
14678+
- PreferDualStack
14679+
- RequireDualStack
14680+
type: string
1466614681
metadata:
1466714682
description: Metadata contains metadata for custom resources
1466814683
properties:
@@ -15005,6 +15020,21 @@ spec:
1500515020
- Local
1500615021
maxLength: 10
1500715022
type: string
15023+
ipFamilies:
15024+
items:
15025+
enum:
15026+
- IPv4
15027+
- IPv6
15028+
- foo
15029+
type: string
15030+
type: array
15031+
ipFamilyPolicy:
15032+
description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
15033+
enum:
15034+
- SingleStack
15035+
- PreferDualStack
15036+
- RequireDualStack
15037+
type: string
1500815038
metadata:
1500915039
description: Metadata contains metadata for custom resources
1501015040
properties:
@@ -15053,6 +15083,21 @@ spec:
1505315083
- Local
1505415084
maxLength: 10
1505515085
type: string
15086+
ipFamilies:
15087+
items:
15088+
enum:
15089+
- IPv4
15090+
- IPv6
15091+
- foo
15092+
type: string
15093+
type: array
15094+
ipFamilyPolicy:
15095+
description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
15096+
enum:
15097+
- SingleStack
15098+
- PreferDualStack
15099+
- RequireDualStack
15100+
type: string
1505615101
metadata:
1505715102
description: Metadata contains metadata for custom resources
1505815103
properties:
@@ -16749,6 +16794,21 @@ spec:
1674916794
- Local
1675016795
maxLength: 10
1675116796
type: string
16797+
ipFamilies:
16798+
items:
16799+
enum:
16800+
- IPv4
16801+
- IPv6
16802+
- foo
16803+
type: string
16804+
type: array
16805+
ipFamilyPolicy:
16806+
description: 'More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/'
16807+
enum:
16808+
- SingleStack
16809+
- PreferDualStack
16810+
- RequireDualStack
16811+
type: string
1675216812
metadata:
1675316813
description: Metadata contains metadata for custom resources
1675416814
properties:

internal/controller/postgrescluster/cluster.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,19 @@ func (r *Reconciler) generateClusterReplicaService(
267267
}
268268
service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy)
269269
service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy
270+
271+
// Set IPFamilyPolicy and IPFamilies
272+
if spec.IPFamilyPolicy != "" {
273+
policy := corev1.IPFamilyPolicyType(spec.IPFamilyPolicy)
274+
service.Spec.IPFamilyPolicy = &policy
275+
}
276+
if len(spec.IPFamilies) > 0 {
277+
service.Spec.IPFamilies = []corev1.IPFamily{}
278+
for _, family := range spec.IPFamilies {
279+
service.Spec.IPFamilies = append(service.Spec.IPFamilies, corev1.IPFamily(family))
280+
}
281+
}
282+
270283
}
271284
service.Spec.Ports = []corev1.ServicePort{servicePort}
272285

internal/controller/postgrescluster/patroni.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,18 @@ func (r *Reconciler) generatePatroniLeaderLeaseService(
271271
}
272272
service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy)
273273
service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy
274+
275+
// Set IPFamilyPolicy and IPFamilies
276+
if spec.IPFamilyPolicy != "" {
277+
policy := corev1.IPFamilyPolicyType(spec.IPFamilyPolicy)
278+
service.Spec.IPFamilyPolicy = &policy
279+
}
280+
if len(spec.IPFamilies) > 0 {
281+
service.Spec.IPFamilies = []corev1.IPFamily{}
282+
for _, family := range spec.IPFamilies {
283+
service.Spec.IPFamilies = append(service.Spec.IPFamilies, corev1.IPFamily(family))
284+
}
285+
}
274286
}
275287
service.Spec.Ports = []corev1.ServicePort{servicePort}
276288

internal/controller/postgrescluster/pgadmin.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,18 @@ func (r *Reconciler) generatePGAdminService(
183183
}
184184
service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy)
185185
service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy
186+
187+
// Set IPFamilyPolicy and IPFamilies
188+
if spec.IPFamilyPolicy != "" {
189+
policy := corev1.IPFamilyPolicyType(spec.IPFamilyPolicy)
190+
service.Spec.IPFamilyPolicy = &policy
191+
}
192+
if len(spec.IPFamilies) > 0 {
193+
service.Spec.IPFamilies = []corev1.IPFamily{}
194+
for _, family := range spec.IPFamilies {
195+
service.Spec.IPFamilies = append(service.Spec.IPFamilies, corev1.IPFamily(family))
196+
}
197+
}
186198
}
187199
service.Spec.Ports = []corev1.ServicePort{servicePort}
188200

internal/controller/postgrescluster/pgbouncer.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,18 @@ func (r *Reconciler) generatePGBouncerService(
306306
}
307307
service.Spec.ExternalTrafficPolicy = initialize.FromPointer(spec.ExternalTrafficPolicy)
308308
service.Spec.InternalTrafficPolicy = spec.InternalTrafficPolicy
309+
310+
// Set IPFamilyPolicy and IPFamilies
311+
if spec.IPFamilyPolicy != "" {
312+
policy := corev1.IPFamilyPolicyType(spec.IPFamilyPolicy)
313+
service.Spec.IPFamilyPolicy = &policy
314+
}
315+
if len(spec.IPFamilies) > 0 {
316+
service.Spec.IPFamilies = []corev1.IPFamily{}
317+
for _, family := range spec.IPFamilies {
318+
service.Spec.IPFamilies = append(service.Spec.IPFamilies, corev1.IPFamily(family))
319+
}
320+
}
309321
}
310322
service.Spec.Ports = []corev1.ServicePort{servicePort}
311323

pkg/apis/postgres-operator.crunchydata.com/v1beta1/shared_types.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,12 @@ type SchemalessObject map[string]any
2020
// DeepCopy creates a new SchemalessObject by copying the receiver.
2121
func (in SchemalessObject) DeepCopy() SchemalessObject {
2222
return runtime.DeepCopyJSON(in)
23+
2324
}
2425

26+
// +kubebuilder:validation:Enum=IPv4;IPv6;foo
27+
type IPFamily string
28+
2529
type ServiceSpec struct {
2630
// +optional
2731
Metadata *Metadata `json:"metadata,omitempty"`
@@ -44,6 +48,15 @@ type ServiceSpec struct {
4448
// +kubebuilder:validation:Enum={ClusterIP,NodePort,LoadBalancer}
4549
Type string `json:"type"`
4650

51+
// More info: https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/
52+
// ---
53+
// +optional
54+
// +kubebuilder:validation:Enum=SingleStack;PreferDualStack;RequireDualStack
55+
IPFamilyPolicy string `json:"ipFamilyPolicy,omitempty"`
56+
57+
// +optional
58+
IPFamilies []IPFamily `json:"ipFamilies,omitempty"`
59+
4760
// More info: https://kubernetes.io/docs/concepts/services-networking/service/#traffic-policies
4861
// ---
4962
// Kubernetes assumes the evaluation cost of an enum value is very large.

pkg/apis/postgres-operator.crunchydata.com/v1beta1/zz_generated.deepcopy.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)