Skip to content

Commit 97f0b97

Browse files
authoredJan 15, 2025
New field additionalPodLabels (ydb-platform#237)

24 files changed

+1018
-839
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
kind: Added
2+
body: new field additionalPodLabels for Storage and Database CRD
3+
time: 2024-12-04T12:26:09.597907+07:00
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
kind: Added
2+
body: new method buildPodTemplateLabels to append additionalPodLabels for statefulset builders
3+
time: 2024-12-04T12:26:33.654222+07:00
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
kind: Changed
2+
body: refactor package labels to separate methods buildLabels, buildSelectorLabels and buildeNodeSetLabels for each resource
3+
time: 2024-12-04T12:26:59.096105+07:00
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
kind: Changed
2+
body: propagate labels ydb.tech/database-nodeset, ydb.tech/storage-nodeset and ydb.tech/remote-cluster with method makeCommonLabels between resource recasting
3+
time: 2024-12-04T12:27:13.265234+07:00
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
kind: Fixed
2+
body: additional kind worker to maintain affinity rules for blobstorage init job
3+
time: 2024-12-04T12:27:36.97703+07:00

‎api/v1alpha1/database_types.go

+4
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,10 @@ type DatabaseNodeSpec struct {
165165
// +optional
166166
AdditionalLabels map[string]string `json:"additionalLabels,omitempty"`
167167

168+
// (Optional) Additional custom resource labels that are added to Pods
169+
// +optional
170+
AdditionalPodLabels map[string]string `json:"additionalPodLabels,omitempty"`
171+
168172
// (Optional) Additional custom resource annotations that are added to all resources
169173
// +optional
170174
AdditionalAnnotations map[string]string `json:"additionalAnnotations,omitempty"`

‎api/v1alpha1/storage_types.go

+4
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,10 @@ type StorageNodeSpec struct {
162162
// +optional
163163
AdditionalLabels map[string]string `json:"additionalLabels,omitempty"`
164164

165+
// (Optional) Additional custom resource labels that are added to Pods
166+
// +optional
167+
AdditionalPodLabels map[string]string `json:"additionalPodLabels,omitempty"`
168+
165169
// (Optional) Additional custom resource annotations that are added to all resources
166170
// +optional
167171
AdditionalAnnotations map[string]string `json:"additionalAnnotations,omitempty"`

‎api/v1alpha1/zz_generated.deepcopy.go

+14
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎deploy/ydb-operator/crds/database.yaml

+199-183
Large diffs are not rendered by default.

‎deploy/ydb-operator/crds/databasenodeset.yaml

+98-84
Large diffs are not rendered by default.

‎deploy/ydb-operator/crds/remotedatabasenodeset.yaml

+98-84
Large diffs are not rendered by default.

‎deploy/ydb-operator/crds/remotestoragenodeset.yaml

+98-84
Large diffs are not rendered by default.

‎deploy/ydb-operator/crds/storage.yaml

+199-183
Large diffs are not rendered by default.

‎deploy/ydb-operator/crds/storagenodeset.yaml

+98-84
Large diffs are not rendered by default.

‎internal/controllers/storage/controller_test.go

+37-6
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,9 @@ var _ = Describe("Storage controller medium tests", func() {
168168
if err != nil {
169169
return err
170170
}
171-
value, exist := foundStatefulSets.Items[0].Labels[testLabelKey]
172-
if !exist {
173-
return fmt.Errorf("label key `ydb-label` does not exist in StatefulSet. Current labels: %s", foundStatefulSets.Items[0].Labels)
174-
}
171+
value := foundStatefulSets.Items[0].Labels[testLabelKey]
175172
if value != testLabelValue {
176-
return fmt.Errorf("label value `ydb-label` in StatefulSet does not equal `test`. Current labels: %s", foundStatefulSets.Items[0].Labels)
173+
return fmt.Errorf("label value of `%s` in StatefulSet does not equal `%s`. Current labels: %s", testLabelKey, testLabelValue, foundStatefulSets.Items[0].Labels)
177174
}
178175
return nil
179176
}, test.Timeout, test.Interval).ShouldNot(HaveOccurred())
@@ -186,8 +183,42 @@ var _ = Describe("Storage controller medium tests", func() {
186183
},
187184
},
188185
))
186+
})
187+
188+
By("Check that additionalPodLabels propagated into podTemplate...", func() {
189+
testLabelKey := "ydb-pod-label"
190+
testLabelValue := "test-podTemplate"
191+
By("set additional pod labels to Storage...")
192+
Eventually(func() error {
193+
foundStorage := v1alpha1.Storage{}
194+
Expect(k8sClient.Get(ctx, types.NamespacedName{
195+
Name: storageSample.Name,
196+
Namespace: testobjects.YdbNamespace,
197+
}, &foundStorage))
198+
foundStorage.Spec.AdditionalPodLabels = make(map[string]string)
199+
foundStorage.Spec.AdditionalPodLabels[testLabelKey] = testLabelValue
200+
return k8sClient.Update(ctx, &foundStorage)
201+
}, test.Timeout, test.Interval).ShouldNot(HaveOccurred())
202+
203+
By("check that additional pod labels was added...")
204+
foundStatefulSets := appsv1.StatefulSetList{}
205+
Eventually(func() error {
206+
err := k8sClient.List(ctx, &foundStatefulSets,
207+
client.InNamespace(testobjects.YdbNamespace),
208+
)
209+
if err != nil {
210+
return err
211+
}
212+
value := foundStatefulSets.Items[0].Spec.Template.Labels[testLabelKey]
213+
if value != testLabelValue {
214+
return fmt.Errorf("label value of `%s` in StatefulSet does not equal `%s`. Current labels: %s", testLabelKey, testLabelValue, foundStatefulSets.Items[0].Labels)
215+
}
216+
return nil
217+
}, test.Timeout, test.Interval).ShouldNot(HaveOccurred())
218+
})
189219

190-
By("check that delete StatefulSet event was detected...")
220+
By("check that delete StatefulSet event was detected...", func() {
221+
foundStatefulSets := appsv1.StatefulSetList{}
191222
Expect(k8sClient.List(ctx, &foundStatefulSets, client.InNamespace(testobjects.YdbNamespace))).ShouldNot(HaveOccurred())
192223
Expect(len(foundStatefulSets.Items)).Should(Equal(1))
193224
Expect(k8sClient.Delete(ctx, &foundStatefulSets.Items[0])).ShouldNot(HaveOccurred())

‎internal/controllers/storage/init.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ func (r *Reconciler) createInitBlobstorageJob(
303303
ctx context.Context,
304304
storage *resources.StorageClusterBuilder,
305305
) error {
306-
builder := resources.GetInitJobBuilder(storage.DeepCopy())
306+
builder := storage.GetInitJobBuilder()
307307
newResource := builder.Placeholder(storage)
308308
_, err := resources.CreateOrUpdateOrMaybeIgnore(ctx, r.Client, newResource, func() error {
309309
var err error

‎internal/labels/label.go

+15-41
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package labels
22

3-
import (
4-
"github.com/ydb-platform/ydb-kubernetes-operator/api/v1alpha1"
5-
)
6-
73
// https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/
84
const (
95
// NameKey The name of a higher level application this one is part of
@@ -28,11 +24,9 @@ const (
2824
// RemoteClusterKey The specialization of a remote k8s cluster
2925
RemoteClusterKey = "ydb.tech/remote-cluster"
3026

31-
StorageGeneration = "ydb.tech/storage-generation"
32-
DatabaseGeneration = "ydb.tech/database-generation"
33-
34-
StorageComponent = "storage-node"
35-
DynamicComponent = "dynamic-node"
27+
StorageComponent = "storage-node"
28+
DynamicComponent = "dynamic-node"
29+
BlobstorageInitComponent = "blobstorage-init"
3630

3731
GRPCComponent = "grpc"
3832
InterconnectComponent = "interconnect"
@@ -50,28 +44,6 @@ func Common(name string, defaultLabels Labels) Labels {
5044
return l
5145
}
5246

53-
func StorageLabels(cluster *v1alpha1.Storage) Labels {
54-
l := Common(cluster.Name, cluster.Labels)
55-
56-
l.Merge(cluster.Spec.AdditionalLabels)
57-
l.Merge(map[string]string{
58-
ComponentKey: StorageComponent,
59-
})
60-
61-
return l
62-
}
63-
64-
func DatabaseLabels(database *v1alpha1.Database) Labels {
65-
l := Common(database.Name, database.Labels)
66-
67-
l.Merge(database.Spec.AdditionalLabels)
68-
l.Merge(map[string]string{
69-
ComponentKey: DynamicComponent,
70-
})
71-
72-
return l
73-
}
74-
7547
func (l Labels) AsMap() map[string]string {
7648
return l
7749
}
@@ -98,16 +70,6 @@ func (l Labels) Merge(other map[string]string) map[string]string {
9870
return l
9971
}
10072

101-
func (l Labels) MergeInPlace(other map[string]string) map[string]string {
102-
result := l.Copy()
103-
104-
for k, v := range other {
105-
result[k] = v
106-
}
107-
108-
return result
109-
}
110-
11173
func makeCommonLabels(other map[string]string, instance string) map[string]string {
11274
common := make(map[string]string)
11375

@@ -122,5 +84,17 @@ func makeCommonLabels(other map[string]string, instance string) map[string]strin
12284

12385
common[ManagedByKey] = "ydb-operator"
12486

87+
if storageNodeSetName, exist := other[StorageNodeSetComponent]; exist {
88+
common[StorageNodeSetComponent] = storageNodeSetName
89+
}
90+
91+
if databaseNodeSetName, exist := other[DatabaseNodeSetComponent]; exist {
92+
common[DatabaseNodeSetComponent] = databaseNodeSetName
93+
}
94+
95+
if remoteCluster, exist := other[RemoteClusterKey]; exist {
96+
common[RemoteClusterKey] = remoteCluster
97+
}
98+
12599
return common
126100
}

‎internal/resources/database.go

+38-19
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,38 @@ func (b *DatabaseBuilder) Unwrap() *api.Database {
3232
return b.DeepCopy()
3333
}
3434

35+
func (b *DatabaseBuilder) buildSelectorLabels() labels.Labels {
36+
l := labels.Common(b.Name, b.Labels)
37+
l.Merge(map[string]string{labels.ComponentKey: labels.DynamicComponent})
38+
39+
return l
40+
}
41+
42+
func (b *DatabaseBuilder) buildLabels() labels.Labels {
43+
l := b.buildSelectorLabels()
44+
l.Merge(b.Spec.AdditionalLabels)
45+
46+
return l
47+
}
48+
49+
func (b *DatabaseBuilder) buildNodeSetLabels(nodeSetSpecInline api.DatabaseNodeSetSpecInline) labels.Labels {
50+
l := b.buildLabels()
51+
l.Merge(nodeSetSpecInline.Labels)
52+
l.Merge(map[string]string{labels.DatabaseNodeSetComponent: nodeSetSpecInline.Name})
53+
if nodeSetSpecInline.Remote != nil {
54+
l.Merge(map[string]string{labels.RemoteClusterKey: nodeSetSpecInline.Remote.Cluster})
55+
}
56+
57+
return l
58+
}
59+
3560
func (b *DatabaseBuilder) GetResourceBuilders(restConfig *rest.Config) []ResourceBuilder {
3661
if b.Spec.ServerlessResources != nil {
3762
return []ResourceBuilder{}
3863
}
3964

40-
databaseLabels := labels.DatabaseLabels(b.Unwrap())
41-
42-
statefulSetLabels := databaseLabels.Copy()
43-
statefulSetLabels.Merge(map[string]string{labels.StatefulsetComponent: b.Name})
65+
databaseLabels := b.buildLabels()
66+
databaseSelectorLabels := b.buildSelectorLabels()
4467

4568
statefulSetAnnotations := CopyDict(b.Spec.AdditionalAnnotations)
4669
statefulSetAnnotations[annotations.ConfigurationChecksum] = SHAChecksum(b.Spec.Configuration)
@@ -149,7 +172,7 @@ func (b *DatabaseBuilder) GetResourceBuilders(restConfig *rest.Config) []Resourc
149172
Object: b,
150173
NameFormat: GRPCServiceNameFormat,
151174
Labels: grpcServiceLabels,
152-
SelectorLabels: databaseLabels,
175+
SelectorLabels: databaseSelectorLabels,
153176
Annotations: b.Spec.Service.GRPC.AdditionalAnnotations,
154177
Ports: []corev1.ServicePort{{
155178
Name: api.GRPCServicePortName,
@@ -162,7 +185,7 @@ func (b *DatabaseBuilder) GetResourceBuilders(restConfig *rest.Config) []Resourc
162185
Object: b,
163186
NameFormat: InterconnectServiceNameFormat,
164187
Labels: interconnectServiceLabels,
165-
SelectorLabels: databaseLabels,
188+
SelectorLabels: databaseSelectorLabels,
166189
Annotations: b.Spec.Service.Interconnect.AdditionalAnnotations,
167190
Headless: true,
168191
Ports: []corev1.ServicePort{{
@@ -176,7 +199,7 @@ func (b *DatabaseBuilder) GetResourceBuilders(restConfig *rest.Config) []Resourc
176199
Object: b,
177200
NameFormat: StatusServiceNameFormat,
178201
Labels: statusServiceLabels,
179-
SelectorLabels: databaseLabels,
202+
SelectorLabels: databaseSelectorLabels,
180203
Annotations: b.Spec.Service.Status.AdditionalAnnotations,
181204
Ports: []corev1.ServicePort{{
182205
Name: api.StatusServicePortName,
@@ -194,7 +217,7 @@ func (b *DatabaseBuilder) GetResourceBuilders(restConfig *rest.Config) []Resourc
194217
Object: b,
195218
NameFormat: DatastreamsServiceNameFormat,
196219
Labels: datastreamsServiceLabels,
197-
SelectorLabels: databaseLabels,
220+
SelectorLabels: databaseSelectorLabels,
198221
Annotations: b.Spec.Service.Datastreams.AdditionalAnnotations,
199222
Ports: []corev1.ServicePort{{
200223
Name: api.DatastreamsServicePortName,
@@ -214,27 +237,23 @@ func (b *DatabaseBuilder) GetResourceBuilders(restConfig *rest.Config) []Resourc
214237
RestConfig: restConfig,
215238

216239
Name: b.Name,
217-
Labels: statefulSetLabels,
240+
Labels: databaseLabels,
218241
Annotations: statefulSetAnnotations,
219242
},
220243
)
221244
} else {
222-
optionalBuilders = append(optionalBuilders, b.getNodeSetBuilders(databaseLabels)...)
245+
optionalBuilders = append(optionalBuilders, b.getNodeSetBuilders()...)
223246
}
224247

225248
return optionalBuilders
226249
}
227250

228-
func (b *DatabaseBuilder) getNodeSetBuilders(databaseLabels labels.Labels) []ResourceBuilder {
251+
func (b *DatabaseBuilder) getNodeSetBuilders() []ResourceBuilder {
229252
var nodeSetBuilders []ResourceBuilder
230253

231254
for _, nodeSetSpecInline := range b.Spec.NodeSets {
232-
nodeSetLabels := databaseLabels.Copy()
233-
nodeSetLabels.Merge(nodeSetSpecInline.Labels)
234-
nodeSetLabels.Merge(map[string]string{labels.DatabaseNodeSetComponent: nodeSetSpecInline.Name})
235-
if nodeSetSpecInline.Remote != nil {
236-
nodeSetLabels.Merge(map[string]string{labels.RemoteClusterKey: nodeSetSpecInline.Remote.Cluster})
237-
}
255+
nodeSetName := fmt.Sprintf("%s-%s", b.Name, nodeSetSpecInline.Name)
256+
nodeSetLabels := b.buildNodeSetLabels(nodeSetSpecInline)
238257

239258
nodeSetAnnotations := CopyDict(b.Annotations)
240259
if nodeSetSpecInline.Annotations != nil {
@@ -250,7 +269,7 @@ func (b *DatabaseBuilder) getNodeSetBuilders(databaseLabels labels.Labels) []Res
250269
&RemoteDatabaseNodeSetBuilder{
251270
Object: b,
252271

253-
Name: b.Name + "-" + nodeSetSpecInline.Name,
272+
Name: nodeSetName,
254273
Labels: nodeSetLabels,
255274
Annotations: nodeSetAnnotations,
256275

@@ -263,7 +282,7 @@ func (b *DatabaseBuilder) getNodeSetBuilders(databaseLabels labels.Labels) []Res
263282
&DatabaseNodeSetBuilder{
264283
Object: b,
265284

266-
Name: b.Name + "-" + nodeSetSpecInline.Name,
285+
Name: nodeSetName,
267286
Labels: nodeSetLabels,
268287
Annotations: nodeSetAnnotations,
269288

‎internal/resources/database_statefulset.go

+13-1
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,26 @@ func (b *DatabaseStatefulSetBuilder) buildEnv() []corev1.EnvVar {
9999
return envVars
100100
}
101101

102+
func (b *DatabaseStatefulSetBuilder) buildPodTemplateLabels() labels.Labels {
103+
podTemplateLabels := labels.Labels{}
104+
105+
podTemplateLabels.Merge(b.Labels)
106+
podTemplateLabels.Merge(map[string]string{labels.StatefulsetComponent: b.Name})
107+
podTemplateLabels.Merge(b.Spec.AdditionalPodLabels)
108+
109+
return podTemplateLabels
110+
}
111+
102112
func (b *DatabaseStatefulSetBuilder) buildPodTemplateSpec() corev1.PodTemplateSpec {
113+
podTemplateLabels := b.buildPodTemplateLabels()
114+
103115
domain := api.DefaultDomainName
104116
if dnsAnnotation, ok := b.GetAnnotations()[api.DNSDomainAnnotation]; ok {
105117
domain = dnsAnnotation
106118
}
107119
podTemplate := corev1.PodTemplateSpec{
108120
ObjectMeta: metav1.ObjectMeta{
109-
Labels: b.Labels,
121+
Labels: podTemplateLabels,
110122
Annotations: b.Annotations,
111123
},
112124
Spec: corev1.PodSpec{

‎internal/resources/databasenodeset.go

+2-11
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99

1010
api "github.com/ydb-platform/ydb-kubernetes-operator/api/v1alpha1"
1111
"github.com/ydb-platform/ydb-kubernetes-operator/internal/annotations"
12-
"github.com/ydb-platform/ydb-kubernetes-operator/internal/labels"
1312
)
1413

1514
type DatabaseNodeSetBuilder struct {
@@ -56,18 +55,10 @@ func (b *DatabaseNodeSetBuilder) Placeholder(cr client.Object) client.Object {
5655

5756
func (b *DatabaseNodeSetResource) GetResourceBuilders(restConfig *rest.Config) []ResourceBuilder {
5857
ydbCr := api.RecastDatabaseNodeSet(b.Unwrap())
59-
databaseLabels := labels.DatabaseLabels(ydbCr)
58+
databaseBuilder := NewDatabase(ydbCr)
6059

6160
statefulSetName := b.Name
62-
statefulSetLabels := databaseLabels.Copy()
63-
statefulSetLabels.Merge(map[string]string{labels.StatefulsetComponent: statefulSetName})
64-
65-
databaseNodeSetName := b.Labels[labels.DatabaseNodeSetComponent]
66-
statefulSetLabels.Merge(map[string]string{labels.DatabaseNodeSetComponent: databaseNodeSetName})
67-
if remoteCluster, exist := b.Labels[labels.RemoteClusterKey]; exist {
68-
statefulSetLabels.Merge(map[string]string{labels.RemoteClusterKey: remoteCluster})
69-
}
70-
61+
statefulSetLabels := databaseBuilder.buildLabels()
7162
statefulSetAnnotations := CopyDict(b.Spec.AdditionalAnnotations)
7263
statefulSetAnnotations[annotations.ConfigurationChecksum] = SHAChecksum(b.Spec.Configuration)
7364

‎internal/resources/storage.go

+70-18
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package resources
22

33
import (
4+
"fmt"
5+
46
"gopkg.in/yaml.v3"
57
corev1 "k8s.io/api/core/v1"
68
"k8s.io/client-go/rest"
@@ -29,11 +31,65 @@ func (b *StorageClusterBuilder) Unwrap() *api.Storage {
2931
return b.DeepCopy()
3032
}
3133

32-
func (b *StorageClusterBuilder) GetResourceBuilders(restConfig *rest.Config) []ResourceBuilder {
33-
storageLabels := labels.StorageLabels(b.Unwrap())
34+
func (b *StorageClusterBuilder) buildSelectorLabels(component string) labels.Labels {
35+
l := labels.Common(b.Name, b.Labels)
36+
l.Merge(map[string]string{labels.ComponentKey: component})
37+
38+
return l
39+
}
40+
41+
func (b *StorageClusterBuilder) buildLabels() labels.Labels {
42+
l := b.buildSelectorLabels(labels.StorageComponent)
43+
l.Merge(b.Spec.AdditionalLabels)
44+
45+
return l
46+
}
3447

35-
statefulSetLabels := storageLabels.Copy()
36-
statefulSetLabels.Merge(map[string]string{labels.StatefulsetComponent: b.Name})
48+
func (b *StorageClusterBuilder) buildInitJobLabels() labels.Labels {
49+
l := b.buildSelectorLabels(labels.BlobstorageInitComponent)
50+
l.Merge(b.Spec.AdditionalLabels)
51+
52+
if b.Spec.InitJob != nil {
53+
l.Merge(b.Spec.InitJob.AdditionalLabels)
54+
}
55+
56+
return l
57+
}
58+
59+
func (b *StorageClusterBuilder) buildNodeSetLabels(nodeSetSpecInline api.StorageNodeSetSpecInline) labels.Labels {
60+
l := b.buildLabels()
61+
l.Merge(nodeSetSpecInline.Labels)
62+
l.Merge(map[string]string{labels.StorageNodeSetComponent: nodeSetSpecInline.Name})
63+
if nodeSetSpecInline.Remote != nil {
64+
l.Merge(map[string]string{labels.RemoteClusterKey: nodeSetSpecInline.Remote.Cluster})
65+
}
66+
67+
return l
68+
}
69+
70+
func (b *StorageClusterBuilder) GetInitJobBuilder() ResourceBuilder {
71+
jobName := fmt.Sprintf(InitJobNameFormat, b.Name)
72+
jobLabels := b.buildInitJobLabels()
73+
74+
jobAnnotations := CopyDict(b.Annotations)
75+
if b.Spec.InitJob != nil {
76+
for k, v := range b.Spec.InitJob.AdditionalAnnotations {
77+
jobAnnotations[k] = v
78+
}
79+
}
80+
81+
return &StorageInitJobBuilder{
82+
Storage: b.Unwrap(),
83+
84+
Name: jobName,
85+
Labels: jobLabels,
86+
Annotations: jobAnnotations,
87+
}
88+
}
89+
90+
func (b *StorageClusterBuilder) GetResourceBuilders(restConfig *rest.Config) []ResourceBuilder {
91+
storageLabels := b.buildLabels()
92+
storageSelectorLabels := b.buildSelectorLabels(labels.StorageComponent)
3793

3894
statefulSetAnnotations := CopyDict(b.Spec.AdditionalAnnotations)
3995
statefulSetAnnotations[annotations.ConfigurationChecksum] = SHAChecksum(b.Spec.Configuration)
@@ -105,12 +161,12 @@ func (b *StorageClusterBuilder) GetResourceBuilders(restConfig *rest.Config) []R
105161
RestConfig: restConfig,
106162

107163
Name: b.Name,
108-
Labels: statefulSetLabels,
164+
Labels: storageLabels,
109165
Annotations: statefulSetAnnotations,
110166
},
111167
)
112168
} else {
113-
optionalBuilders = append(optionalBuilders, b.getNodeSetBuilders(storageLabels)...)
169+
optionalBuilders = append(optionalBuilders, b.getNodeSetBuilders()...)
114170
}
115171

116172
return append(
@@ -119,7 +175,7 @@ func (b *StorageClusterBuilder) GetResourceBuilders(restConfig *rest.Config) []R
119175
Object: b,
120176
NameFormat: GRPCServiceNameFormat,
121177
Labels: grpcServiceLabels,
122-
SelectorLabels: storageLabels,
178+
SelectorLabels: storageSelectorLabels,
123179
Annotations: b.Spec.Service.GRPC.AdditionalAnnotations,
124180
Ports: []corev1.ServicePort{{
125181
Name: api.GRPCServicePortName,
@@ -132,7 +188,7 @@ func (b *StorageClusterBuilder) GetResourceBuilders(restConfig *rest.Config) []R
132188
Object: b,
133189
NameFormat: InterconnectServiceNameFormat,
134190
Labels: interconnectServiceLabels,
135-
SelectorLabels: storageLabels,
191+
SelectorLabels: storageSelectorLabels,
136192
Annotations: b.Spec.Service.Interconnect.AdditionalAnnotations,
137193
Headless: true,
138194
Ports: []corev1.ServicePort{{
@@ -146,7 +202,7 @@ func (b *StorageClusterBuilder) GetResourceBuilders(restConfig *rest.Config) []R
146202
Object: b,
147203
NameFormat: StatusServiceNameFormat,
148204
Labels: statusServiceLabels,
149-
SelectorLabels: storageLabels,
205+
SelectorLabels: storageSelectorLabels,
150206
Annotations: b.Spec.Service.Status.AdditionalAnnotations,
151207
Ports: []corev1.ServicePort{{
152208
Name: api.StatusServicePortName,
@@ -158,16 +214,12 @@ func (b *StorageClusterBuilder) GetResourceBuilders(restConfig *rest.Config) []R
158214
)
159215
}
160216

161-
func (b *StorageClusterBuilder) getNodeSetBuilders(storageLabels labels.Labels) []ResourceBuilder {
217+
func (b *StorageClusterBuilder) getNodeSetBuilders() []ResourceBuilder {
162218
var nodeSetBuilders []ResourceBuilder
163219

164220
for _, nodeSetSpecInline := range b.Spec.NodeSets {
165-
nodeSetLabels := storageLabels.Copy()
166-
nodeSetLabels.Merge(nodeSetSpecInline.Labels)
167-
nodeSetLabels.Merge(map[string]string{labels.StorageNodeSetComponent: nodeSetSpecInline.Name})
168-
if nodeSetSpecInline.Remote != nil {
169-
nodeSetLabels.Merge(map[string]string{labels.RemoteClusterKey: nodeSetSpecInline.Remote.Cluster})
170-
}
221+
nodeSetName := fmt.Sprintf("%s-%s", b.Name, nodeSetSpecInline.Name)
222+
nodeSetLabels := b.buildNodeSetLabels(nodeSetSpecInline)
171223

172224
nodeSetAnnotations := CopyDict(b.Annotations)
173225
if nodeSetSpecInline.Annotations != nil {
@@ -183,7 +235,7 @@ func (b *StorageClusterBuilder) getNodeSetBuilders(storageLabels labels.Labels)
183235
&RemoteStorageNodeSetBuilder{
184236
Object: b,
185237

186-
Name: b.Name + "-" + nodeSetSpecInline.Name,
238+
Name: nodeSetName,
187239
Labels: nodeSetLabels,
188240
Annotations: nodeSetAnnotations,
189241

@@ -196,7 +248,7 @@ func (b *StorageClusterBuilder) getNodeSetBuilders(storageLabels labels.Labels)
196248
&StorageNodeSetBuilder{
197249
Object: b,
198250

199-
Name: b.Name + "-" + nodeSetSpecInline.Name,
251+
Name: nodeSetName,
200252
Labels: nodeSetLabels,
201253
Annotations: nodeSetAnnotations,
202254

‎internal/resources/storage_init_job.go

-28
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,13 @@ package resources
33
import (
44
"errors"
55
"fmt"
6-
"strconv"
76

87
batchv1 "k8s.io/api/batch/v1"
98
corev1 "k8s.io/api/core/v1"
109
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1110
"sigs.k8s.io/controller-runtime/pkg/client"
1211

1312
api "github.com/ydb-platform/ydb-kubernetes-operator/api/v1alpha1"
14-
"github.com/ydb-platform/ydb-kubernetes-operator/internal/annotations"
15-
"github.com/ydb-platform/ydb-kubernetes-operator/internal/labels"
1613
"github.com/ydb-platform/ydb-kubernetes-operator/internal/ptr"
1714
)
1815

@@ -58,31 +55,6 @@ func (b *StorageInitJobBuilder) Placeholder(cr client.Object) client.Object {
5855
}
5956
}
6057

61-
func GetInitJobBuilder(storage *api.Storage) ResourceBuilder {
62-
jobName := fmt.Sprintf(InitJobNameFormat, storage.Name)
63-
jobLabels := labels.Common(storage.Name, make(map[string]string))
64-
jobAnnotations := make(map[string]string)
65-
66-
if storage.Spec.InitJob != nil {
67-
if storage.Spec.InitJob.AdditionalLabels != nil {
68-
jobLabels.Merge(storage.Spec.InitJob.AdditionalLabels)
69-
jobLabels[labels.StorageGeneration] = strconv.FormatInt(storage.ObjectMeta.Generation, 10)
70-
}
71-
if storage.Spec.InitJob.AdditionalAnnotations != nil {
72-
jobAnnotations = CopyDict(storage.Spec.InitJob.AdditionalAnnotations)
73-
jobAnnotations[annotations.ConfigurationChecksum] = SHAChecksum(storage.Spec.Configuration)
74-
}
75-
}
76-
77-
return &StorageInitJobBuilder{
78-
Storage: storage,
79-
80-
Name: jobName,
81-
Labels: jobLabels,
82-
Annotations: jobAnnotations,
83-
}
84-
}
85-
8658
func (b *StorageInitJobBuilder) buildInitJobPodTemplateSpec() corev1.PodTemplateSpec {
8759
domain := api.DefaultDomainName
8860
if dnsAnnotation, ok := b.GetAnnotations()[api.DNSDomainAnnotation]; ok {

‎internal/resources/storage_statefulset.go

+13-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,19 @@ func (b *StorageStatefulSetBuilder) Build(obj client.Object) error {
103103
return nil
104104
}
105105

106+
func (b *StorageStatefulSetBuilder) buildPodTemplateLabels() labels.Labels {
107+
podTemplateLabels := labels.Labels{}
108+
109+
podTemplateLabels.Merge(b.Labels)
110+
podTemplateLabels.Merge(map[string]string{labels.StatefulsetComponent: b.Name})
111+
podTemplateLabels.Merge(b.Spec.AdditionalPodLabels)
112+
113+
return podTemplateLabels
114+
}
115+
106116
func (b *StorageStatefulSetBuilder) buildPodTemplateSpec() corev1.PodTemplateSpec {
117+
podTemplateLabels := b.buildPodTemplateLabels()
118+
107119
domain := api.DefaultDomainName
108120
if dnsAnnotation, ok := b.GetAnnotations()[api.DNSDomainAnnotation]; ok {
109121
domain = dnsAnnotation
@@ -114,7 +126,7 @@ func (b *StorageStatefulSetBuilder) buildPodTemplateSpec() corev1.PodTemplateSpe
114126

115127
podTemplate := corev1.PodTemplateSpec{
116128
ObjectMeta: metav1.ObjectMeta{
117-
Labels: b.Labels,
129+
Labels: podTemplateLabels,
118130
Annotations: b.Annotations,
119131
},
120132
Spec: corev1.PodSpec{

‎internal/resources/storagenodeset.go

+2-11
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99

1010
api "github.com/ydb-platform/ydb-kubernetes-operator/api/v1alpha1"
1111
"github.com/ydb-platform/ydb-kubernetes-operator/internal/annotations"
12-
"github.com/ydb-platform/ydb-kubernetes-operator/internal/labels"
1312
)
1413

1514
type StorageNodeSetBuilder struct {
@@ -56,18 +55,10 @@ func (b *StorageNodeSetBuilder) Placeholder(cr client.Object) client.Object {
5655

5756
func (b *StorageNodeSetResource) GetResourceBuilders(restConfig *rest.Config) []ResourceBuilder {
5857
ydbCr := api.RecastStorageNodeSet(b.Unwrap())
59-
storageLabels := labels.StorageLabels(ydbCr)
58+
clusterBuilder := NewCluster(ydbCr)
6059

6160
statefulSetName := b.Name
62-
statefulSetLabels := storageLabels.Copy()
63-
statefulSetLabels.Merge(map[string]string{labels.StatefulsetComponent: statefulSetName})
64-
65-
storageNodeSetName := b.Labels[labels.StorageNodeSetComponent]
66-
statefulSetLabels.Merge(map[string]string{labels.StorageNodeSetComponent: storageNodeSetName})
67-
if remoteCluster, exist := b.Labels[labels.RemoteClusterKey]; exist {
68-
statefulSetLabels.Merge(map[string]string{labels.RemoteClusterKey: remoteCluster})
69-
}
70-
61+
statefulSetLabels := clusterBuilder.buildLabels()
7162
statefulSetAnnotations := CopyDict(b.Spec.AdditionalAnnotations)
7263
statefulSetAnnotations[annotations.ConfigurationChecksum] = SHAChecksum(b.Spec.Configuration)
7364

0 commit comments

Comments
 (0)
Please sign in to comment.