Skip to content

Commit 6546df1

Browse files
committed
feat: allow specifying 'Port' field in GRPC Service
1 parent beaddc6 commit 6546df1

File tree

9 files changed

+101
-28
lines changed

9 files changed

+101
-28
lines changed

api/v1alpha1/service_types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ type GRPCService struct {
2121
Service `json:""`
2222

2323
AdditionalPort int32 `json:"additionalPort,omitempty"`
24+
Port int32 `json:"port,omitempty"`
2425

2526
TLSConfiguration *TLSConfiguration `json:"tls,omitempty"`
2627
ExternalHost string `json:"externalHost,omitempty"`

deploy/ydb-operator/crds/database.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4106,6 +4106,9 @@ spec:
41064106
description: IPFamilyPolicy represents the dual-stack-ness
41074107
requested or required by a Service
41084108
type: string
4109+
port:
4110+
format: int32
4111+
type: integer
41094112
tls:
41104113
properties:
41114114
CA:

deploy/ydb-operator/crds/databasenodeset.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2718,6 +2718,9 @@ spec:
27182718
description: IPFamilyPolicy represents the dual-stack-ness
27192719
requested or required by a Service
27202720
type: string
2721+
port:
2722+
format: int32
2723+
type: integer
27212724
tls:
27222725
properties:
27232726
CA:

deploy/ydb-operator/crds/remotedatabasenodeset.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2719,6 +2719,9 @@ spec:
27192719
description: IPFamilyPolicy represents the dual-stack-ness
27202720
requested or required by a Service
27212721
type: string
2722+
port:
2723+
format: int32
2724+
type: integer
27222725
tls:
27232726
properties:
27242727
CA:

deploy/ydb-operator/crds/remotestoragenodeset.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2746,6 +2746,9 @@ spec:
27462746
description: IPFamilyPolicy represents the dual-stack-ness
27472747
requested or required by a Service
27482748
type: string
2749+
port:
2750+
format: int32
2751+
type: integer
27492752
tls:
27502753
properties:
27512754
CA:

deploy/ydb-operator/crds/storage.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5247,6 +5247,9 @@ spec:
52475247
description: IPFamilyPolicy represents the dual-stack-ness
52485248
requested or required by a Service
52495249
type: string
5250+
port:
5251+
format: int32
5252+
type: integer
52505253
tls:
52515254
properties:
52525255
CA:

deploy/ydb-operator/crds/storagenodeset.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2745,6 +2745,9 @@ spec:
27452745
description: IPFamilyPolicy represents the dual-stack-ness
27462746
requested or required by a Service
27472747
type: string
2748+
port:
2749+
format: int32
2750+
type: integer
27482751
tls:
27492752
properties:
27502753
CA:

internal/controllers/storage/controller_test.go

Lines changed: 75 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -97,35 +97,8 @@ var _ = Describe("Storage controller medium tests", func() {
9797
},
9898
})
9999

100-
storageSample.Spec.Service.GRPC.AdditionalPort = 2136
101-
102100
Expect(k8sClient.Create(ctx, storageSample)).Should(Succeed())
103101

104-
By("Check grpc service has an additional port...", func() {
105-
var svc corev1.Service
106-
serviceName := fmt.Sprintf("%v-grpc", testobjects.StorageName)
107-
Eventually(func() bool {
108-
err := k8sClient.Get(ctx,
109-
client.ObjectKey{
110-
Name: serviceName,
111-
Namespace: testobjects.YdbNamespace,
112-
},
113-
&svc,
114-
)
115-
return err == nil
116-
}, test.Timeout, test.Interval).Should(BeTrue(),
117-
"Service %s/%s should eventually exist", testobjects.YdbNamespace, serviceName,
118-
)
119-
120-
ports := svc.Spec.Ports
121-
Expect(len(ports)).To(Equal(2), "expected 2 ports but got %d", len(ports))
122-
Expect(ports[0].Port).To(Equal(int32(2135)))
123-
Expect(ports[0].Name).To(Equal(v1alpha1.GRPCServicePortName))
124-
Expect(ports[1].Port).To(Equal(int32(2136)))
125-
Expect(ports[1].Name).To(Equal(v1alpha1.GRPCServiceAdditionalPortName))
126-
Expect(ports[1].TargetPort.IntVal).To(Equal(int32(2136)))
127-
})
128-
129102
By("Check volume has been propagated to pods...")
130103
storageStatefulSets := appsv1.StatefulSetList{}
131104
Eventually(func() bool {
@@ -332,5 +305,80 @@ var _ = Describe("Storage controller medium tests", func() {
332305
By("check that --auth-token-file arg was added to Statefulset template...")
333306
Eventually(checkAuthTokenArgs, test.Timeout, test.Interval).ShouldNot(HaveOccurred())
334307
})
308+
309+
By("Checking overriding port value in GRPC Service...", func() {
310+
storage := v1alpha1.Storage{}
311+
Expect(k8sClient.Get(ctx, types.NamespacedName{
312+
Name: testobjects.StorageName,
313+
Namespace: testobjects.YdbNamespace,
314+
}, &storage)).Should(Succeed())
315+
316+
storage.Spec.Service.GRPC.Port = 2137
317+
318+
Expect(k8sClient.Update(ctx, &storage)).Should(Succeed())
319+
320+
var svc corev1.Service
321+
serviceName := fmt.Sprintf("%v-grpc", testobjects.StorageName)
322+
323+
Eventually(func(g Gomega) bool {
324+
err := k8sClient.Get(ctx,
325+
client.ObjectKey{
326+
Name: serviceName,
327+
Namespace: testobjects.YdbNamespace,
328+
},
329+
&svc,
330+
)
331+
if err != nil {
332+
return false
333+
}
334+
335+
ports := svc.Spec.Ports
336+
g.Expect(len(ports)).To(Equal(1), "expected 1 port but got %d", len(ports))
337+
g.Expect(ports[0].Name).To(Equal(v1alpha1.GRPCServicePortName))
338+
g.Expect(ports[0].Port).To(Equal(storage.Spec.Service.GRPC.Port))
339+
return true
340+
}, test.Timeout, test.Interval).Should(BeTrue(),
341+
"Service %s/%s should eventually have proper ports", testobjects.YdbNamespace, serviceName,
342+
)
343+
})
344+
345+
By("Checking additionalPort propagation in GRPC Service...", func() {
346+
storage := v1alpha1.Storage{}
347+
Expect(k8sClient.Get(ctx, types.NamespacedName{
348+
Name: testobjects.StorageName,
349+
Namespace: testobjects.YdbNamespace,
350+
}, &storage)).Should(Succeed())
351+
352+
storage.Spec.Service.GRPC.Port = 2135
353+
storage.Spec.Service.GRPC.AdditionalPort = 2136
354+
355+
Expect(k8sClient.Update(ctx, &storage)).Should(Succeed())
356+
357+
var svc corev1.Service
358+
serviceName := fmt.Sprintf("%v-grpc", testobjects.StorageName)
359+
Eventually(func(g Gomega) error {
360+
err := k8sClient.Get(ctx,
361+
client.ObjectKey{
362+
Name: serviceName,
363+
Namespace: testobjects.YdbNamespace,
364+
},
365+
&svc,
366+
)
367+
if err != nil {
368+
return err
369+
}
370+
371+
ports := svc.Spec.Ports
372+
g.Expect(len(ports)).To(Equal(2), "expected 2 ports but got %d", len(ports))
373+
g.Expect(ports[0].Port).To(Equal(int32(2135)))
374+
g.Expect(ports[0].Name).To(Equal(v1alpha1.GRPCServicePortName))
375+
g.Expect(ports[1].Port).To(Equal(storage.Spec.Service.GRPC.AdditionalPort))
376+
g.Expect(ports[1].Name).To(Equal(v1alpha1.GRPCServiceAdditionalPortName))
377+
g.Expect(ports[1].TargetPort.IntVal).To(Equal(storage.Spec.Service.GRPC.AdditionalPort))
378+
return nil
379+
}, test.Timeout, test.Interval).Should(Succeed(),
380+
"Service %s/%s should eventually have proper ports", testobjects.YdbNamespace, serviceName,
381+
)
382+
})
335383
})
336384
})

internal/resources/storage.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,15 @@ func (b *StorageClusterBuilder) GetResourceBuilders(restConfig *rest.Config) []R
212212
}
213213

214214
func (b *StorageClusterBuilder) buildGrpcServicePorts() []corev1.ServicePort {
215+
firstPort := int32(api.GRPCPort)
216+
217+
if b.Spec.Service.GRPC.Port != 0 {
218+
firstPort = b.Spec.Service.GRPC.Port
219+
}
220+
215221
ports := []corev1.ServicePort{{
216222
Name: api.GRPCServicePortName,
217-
Port: api.GRPCPort,
223+
Port: firstPort,
218224
}}
219225

220226
if b.Spec.Service.GRPC.AdditionalPort != 0 {

0 commit comments

Comments
 (0)