Skip to content

Commit 1e6840b

Browse files
committed
annotations propagate to pods
1 parent 101ba44 commit 1e6840b

13 files changed

+172
-104
lines changed

api/v1alpha1/database_webhook.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
logf "sigs.k8s.io/controller-runtime/pkg/log"
1515
"sigs.k8s.io/controller-runtime/pkg/webhook"
1616

17+
"github.com/ydb-platform/ydb-kubernetes-operator/internal/annotations"
1718
. "github.com/ydb-platform/ydb-kubernetes-operator/internal/controllers/constants" //nolint:revive,stylecheck
1819
)
1920

@@ -149,6 +150,11 @@ func (r *DatabaseDefaulter) Default(ctx context.Context, obj runtime.Object) err
149150
database.Spec.Configuration = configuration
150151
}
151152

153+
if database.Spec.AdditionalAnnotations == nil {
154+
database.Spec.AdditionalAnnotations = make(map[string]string)
155+
}
156+
database.Spec.AdditionalAnnotations[annotations.ConfigurationChecksum] = annotations.GetSHA256Checksum(database.Spec.Configuration)
157+
152158
return nil
153159
}
154160

api/v1alpha1/storage_webhook.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
logf "sigs.k8s.io/controller-runtime/pkg/log"
1717
"sigs.k8s.io/controller-runtime/pkg/webhook"
1818

19+
"github.com/ydb-platform/ydb-kubernetes-operator/internal/annotations"
1920
"github.com/ydb-platform/ydb-kubernetes-operator/internal/configuration/schema"
2021
. "github.com/ydb-platform/ydb-kubernetes-operator/internal/controllers/constants" //nolint:revive,stylecheck
2122
)
@@ -172,6 +173,11 @@ func (r *StorageDefaulter) Default(ctx context.Context, obj runtime.Object) erro
172173
}
173174
storage.Spec.Configuration = configuration
174175

176+
if storage.Spec.AdditionalAnnotations == nil {
177+
storage.Spec.AdditionalAnnotations = make(map[string]string)
178+
}
179+
storage.Spec.AdditionalAnnotations[annotations.ConfigurationChecksum] = annotations.GetSHA256Checksum(storage.Spec.Configuration)
180+
175181
return nil
176182
}
177183

internal/annotations/annotations.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@ func GetYdbTechAnnotations(annotations map[string]string) map[string]string {
2121
return result
2222
}
2323

24+
func GetLastAppliedAnnotation(annotations map[string]string) string {
25+
for key, value := range annotations {
26+
if key == LastAppliedAnnotation {
27+
return value
28+
}
29+
}
30+
return ""
31+
}
32+
2433
func CompareMaps(map1, map2 map[string]string) bool {
2534
if len(map1) != len(map2) {
2635
return false
@@ -38,3 +47,9 @@ func CompareYdbTechAnnotations(map1, map2 map[string]string) bool {
3847
map2 = GetYdbTechAnnotations(map2)
3948
return CompareMaps(map1, map2)
4049
}
50+
51+
func CompareLastAppliedAnnotation(map1, map2 map[string]string) bool {
52+
value1 := GetLastAppliedAnnotation(map1)
53+
value2 := GetLastAppliedAnnotation(map2)
54+
return value1 == value2
55+
}

internal/labels/label.go

Lines changed: 0 additions & 26 deletions
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
@@ -48,28 +44,6 @@ func Common(name string, defaultLabels Labels) Labels {
4844
return l
4945
}
5046

51-
func StorageLabels(cluster *v1alpha1.Storage) Labels {
52-
l := Common(cluster.Name, cluster.Labels)
53-
54-
l.Merge(cluster.Spec.AdditionalLabels)
55-
l.Merge(map[string]string{
56-
ComponentKey: StorageComponent,
57-
})
58-
59-
return l
60-
}
61-
62-
func DatabaseLabels(database *v1alpha1.Database) Labels {
63-
l := Common(database.Name, database.Labels)
64-
65-
l.Merge(database.Spec.AdditionalLabels)
66-
l.Merge(map[string]string{
67-
ComponentKey: DynamicComponent,
68-
})
69-
70-
return l
71-
}
72-
7347
func (l Labels) AsMap() map[string]string {
7448
return l
7549
}

internal/resources/database.go

Lines changed: 46 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package resources
22

33
import (
4+
"fmt"
5+
46
corev1 "k8s.io/api/core/v1"
57
"k8s.io/client-go/rest"
68

79
api "github.com/ydb-platform/ydb-kubernetes-operator/api/v1alpha1"
10+
"github.com/ydb-platform/ydb-kubernetes-operator/internal/annotations"
811
"github.com/ydb-platform/ydb-kubernetes-operator/internal/labels"
912
"github.com/ydb-platform/ydb-kubernetes-operator/internal/metrics"
1013
)
@@ -24,12 +27,25 @@ func (b *DatabaseBuilder) Unwrap() *api.Database {
2427
return b.DeepCopy()
2528
}
2629

30+
func DatabaseLabels(database *api.Database) labels.Labels {
31+
l := labels.Common(database.Name, database.Labels)
32+
33+
l.Merge(database.Spec.AdditionalLabels)
34+
l.Merge(map[string]string{
35+
labels.ComponentKey: labels.DynamicComponent,
36+
})
37+
38+
return l
39+
}
40+
2741
func (b *DatabaseBuilder) GetResourceBuilders(restConfig *rest.Config) []ResourceBuilder {
2842
if b.Spec.ServerlessResources != nil {
2943
return []ResourceBuilder{}
3044
}
3145

32-
databaseLabels := labels.DatabaseLabels(b.Unwrap())
46+
databaseLabels := DatabaseLabels(b.Unwrap())
47+
databaseAnnotations := annotations.GetYdbTechAnnotations(b.Annotations)
48+
delete(databaseAnnotations, annotations.LastAppliedAnnotation)
3349

3450
grpcServiceLabels := databaseLabels.Copy()
3551
grpcServiceLabels.Merge(b.Spec.Service.GRPC.AdditionalLabels)
@@ -47,6 +63,11 @@ func (b *DatabaseBuilder) GetResourceBuilders(restConfig *rest.Config) []Resourc
4763
datastreamsServiceLabels.Merge(b.Spec.Service.Datastreams.AdditionalLabels)
4864
datastreamsServiceLabels.Merge(map[string]string{labels.ServiceComponent: labels.DatastreamsComponent})
4965

66+
statefulSetAnnotations := CopyDict(databaseAnnotations)
67+
for k, v := range b.Spec.AdditionalAnnotations {
68+
statefulSetAnnotations[k] = v
69+
}
70+
5071
var optionalBuilders []ResourceBuilder
5172

5273
if b.Spec.Configuration != "" {
@@ -170,43 +191,50 @@ func (b *DatabaseBuilder) GetResourceBuilders(restConfig *rest.Config) []Resourc
170191
Database: b.Unwrap(),
171192
RestConfig: restConfig,
172193

173-
Name: b.Name,
174-
Labels: databaseLabels,
194+
Name: b.Name,
195+
Labels: databaseLabels,
196+
Annotations: statefulSetAnnotations,
175197
},
176198
)
177199
} else {
178-
optionalBuilders = append(optionalBuilders, b.getNodeSetBuilders(databaseLabels)...)
200+
optionalBuilders = append(
201+
optionalBuilders,
202+
b.getNodeSetBuilders(databaseLabels, databaseAnnotations)...,
203+
)
179204
}
180205

181206
return optionalBuilders
182207
}
183208

184-
func (b *DatabaseBuilder) getNodeSetBuilders(databaseLabels labels.Labels) []ResourceBuilder {
209+
func (b *DatabaseBuilder) getNodeSetBuilders(
210+
databaseLabels labels.Labels,
211+
databaseAnnotations map[string]string,
212+
) []ResourceBuilder {
185213
var nodeSetBuilders []ResourceBuilder
186214

187215
for _, nodeSetSpecInline := range b.Spec.NodeSets {
216+
nodeSetName := fmt.Sprintf("%s-%s", b.Name, nodeSetSpecInline.Name)
217+
188218
nodeSetLabels := databaseLabels.Copy()
189219
nodeSetLabels.Merge(nodeSetSpecInline.Labels)
190-
nodeSetLabels.Merge(map[string]string{labels.DatabaseNodeSetComponent: nodeSetSpecInline.Name})
220+
if nodeSetSpecInline.Remote != nil {
221+
nodeSetLabels[labels.RemoteClusterKey] = nodeSetSpecInline.Remote.Cluster
222+
}
191223

192-
nodeSetAnnotations := CopyDict(b.Annotations)
193-
if nodeSetSpecInline.Annotations != nil {
194-
for k, v := range nodeSetSpecInline.Annotations {
195-
nodeSetAnnotations[k] = v
196-
}
224+
nodeSetAnnotations := CopyDict(databaseAnnotations)
225+
for k, v := range nodeSetSpecInline.Annotations {
226+
nodeSetAnnotations[k] = v
197227
}
198228

199229
databaseNodeSetSpec := b.recastDatabaseNodeSetSpecInline(nodeSetSpecInline.DeepCopy())
230+
200231
if nodeSetSpecInline.Remote != nil {
201-
nodeSetLabels = nodeSetLabels.Merge(map[string]string{
202-
labels.RemoteClusterKey: nodeSetSpecInline.Remote.Cluster,
203-
})
204232
nodeSetBuilders = append(
205233
nodeSetBuilders,
206234
&RemoteDatabaseNodeSetBuilder{
207235
Object: b,
208236

209-
Name: b.Name + "-" + nodeSetSpecInline.Name,
237+
Name: nodeSetName,
210238
Labels: nodeSetLabels,
211239
Annotations: nodeSetAnnotations,
212240

@@ -219,7 +247,7 @@ func (b *DatabaseBuilder) getNodeSetBuilders(databaseLabels labels.Labels) []Res
219247
&DatabaseNodeSetBuilder{
220248
Object: b,
221249

222-
Name: b.Name + "-" + nodeSetSpecInline.Name,
250+
Name: nodeSetName,
223251
Labels: nodeSetLabels,
224252
Annotations: nodeSetAnnotations,
225253

@@ -265,14 +293,15 @@ func (b *DatabaseBuilder) recastDatabaseNodeSetSpecInline(nodeSetSpecInline *api
265293
}
266294

267295
if nodeSetSpecInline.TopologySpreadConstraints != nil {
268-
nodeSetSpec.TopologySpreadConstraints = nodeSetSpecInline.TopologySpreadConstraints
296+
nodeSetSpec.TopologySpreadConstraints = append([]corev1.TopologySpreadConstraint{}, nodeSetSpecInline.TopologySpreadConstraints...)
269297
}
270298

271299
if nodeSetSpecInline.Tolerations != nil {
272300
nodeSetSpec.Tolerations = append(nodeSetSpec.Tolerations, nodeSetSpecInline.Tolerations...)
273301
}
274302

275303
nodeSetSpec.AdditionalLabels = CopyDict(b.Spec.AdditionalLabels)
304+
nodeSetSpec.AdditionalLabels[labels.DatabaseNodeSetComponent] = nodeSetSpecInline.Name
276305
if nodeSetSpecInline.AdditionalLabels != nil {
277306
for k, v := range nodeSetSpecInline.AdditionalLabels {
278307
nodeSetSpec.AdditionalLabels[k] = v

internal/resources/database_statefulset.go

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,16 @@ import (
1616
"sigs.k8s.io/controller-runtime/pkg/client"
1717

1818
api "github.com/ydb-platform/ydb-kubernetes-operator/api/v1alpha1"
19-
"github.com/ydb-platform/ydb-kubernetes-operator/internal/annotations"
20-
"github.com/ydb-platform/ydb-kubernetes-operator/internal/labels"
2119
"github.com/ydb-platform/ydb-kubernetes-operator/internal/ptr"
2220
)
2321

2422
type DatabaseStatefulSetBuilder struct {
2523
*api.Database
2624
RestConfig *rest.Config
2725

28-
Name string
29-
Labels map[string]string
26+
Name string
27+
Labels map[string]string
28+
Annotations map[string]string
3029
}
3130

3231
var annotationDataCenterPattern = regexp.MustCompile("^[a-zA-Z]([a-zA-Z0-9_-]*[a-zA-Z0-9])?$")
@@ -41,7 +40,8 @@ func (b *DatabaseStatefulSetBuilder) Build(obj client.Object) error {
4140
sts.ObjectMeta.Name = b.Name
4241
}
4342
sts.ObjectMeta.Namespace = b.GetNamespace()
44-
sts.ObjectMeta.Annotations = CopyDict(b.Spec.AdditionalAnnotations)
43+
sts.ObjectMeta.Labels = b.Labels
44+
sts.ObjectMeta.Annotations = b.Annotations
4545

4646
replicas := ptr.Int32(b.Spec.Nodes)
4747
if b.Spec.Pause {
@@ -85,16 +85,10 @@ func (b *DatabaseStatefulSetBuilder) buildEnv() []corev1.EnvVar {
8585
}
8686

8787
func (b *DatabaseStatefulSetBuilder) buildPodTemplateSpec() corev1.PodTemplateSpec {
88-
podTemplateLabels := CopyDict(b.Labels)
89-
podTemplateLabels[labels.DatabaseGeneration] = strconv.FormatInt(b.ObjectMeta.Generation, 10)
90-
91-
podTemplateAnnotations := CopyDict(b.Spec.AdditionalAnnotations)
92-
podTemplateAnnotations[annotations.ConfigurationChecksum] = GetConfigurationChecksum(b.Spec.Configuration)
93-
9488
podTemplate := corev1.PodTemplateSpec{
9589
ObjectMeta: metav1.ObjectMeta{
96-
Labels: podTemplateLabels,
97-
Annotations: podTemplateAnnotations,
90+
Labels: b.Labels,
91+
Annotations: b.Annotations,
9892
},
9993
Spec: corev1.PodSpec{
10094
Containers: []corev1.Container{b.buildContainer()},

internal/resources/databasenodeset.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"sigs.k8s.io/controller-runtime/pkg/client"
99

1010
api "github.com/ydb-platform/ydb-kubernetes-operator/api/v1alpha1"
11+
"github.com/ydb-platform/ydb-kubernetes-operator/internal/annotations"
1112
)
1213

1314
type DatabaseNodeSetBuilder struct {
@@ -54,13 +55,25 @@ func (b *DatabaseNodeSetBuilder) Placeholder(cr client.Object) client.Object {
5455

5556
func (b *DatabaseNodeSetResource) GetResourceBuilders(restConfig *rest.Config) []ResourceBuilder {
5657
var resourceBuilders []ResourceBuilder
58+
59+
database := api.RecastDatabaseNodeSet(b.DatabaseNodeSet)
60+
databaseLabels := DatabaseLabels(database)
61+
62+
databaseAnnotations := annotations.GetYdbTechAnnotations(b.Annotations)
63+
delete(databaseAnnotations, annotations.LastAppliedAnnotation)
64+
statefulSetAnnotations := CopyDict(databaseAnnotations)
65+
for k, v := range b.Spec.AdditionalAnnotations {
66+
statefulSetAnnotations[k] = v
67+
}
68+
5769
resourceBuilders = append(resourceBuilders,
5870
&DatabaseStatefulSetBuilder{
59-
Database: api.RecastDatabaseNodeSet(b.DatabaseNodeSet),
71+
Database: database,
6072
RestConfig: restConfig,
6173

62-
Name: b.Name,
63-
Labels: b.Labels,
74+
Name: b.Name,
75+
Labels: databaseLabels,
76+
Annotations: statefulSetAnnotations,
6477
},
6578
)
6679
return resourceBuilders

internal/resources/remotedatabasenodeset.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,13 @@ func (b *RemoteDatabaseNodeSetBuilder) Placeholder(cr client.Object) client.Obje
6161
func (b *RemoteDatabaseNodeSetResource) GetResourceBuilders() []ResourceBuilder {
6262
var resourceBuilders []ResourceBuilder
6363

64-
nodeSetAnnotations := CopyDict(b.Annotations)
65-
delete(nodeSetAnnotations, ydbannotations.LastAppliedAnnotation)
66-
6764
resourceBuilders = append(resourceBuilders,
6865
&DatabaseNodeSetBuilder{
6966
Object: b,
7067

7168
Name: b.Name,
7269
Labels: b.Labels,
73-
Annotations: nodeSetAnnotations,
70+
Annotations: b.Annotations,
7471

7572
DatabaseNodeSetSpec: b.Spec,
7673
},

internal/resources/remotestoragenodeset.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,13 @@ func (b *RemoteStorageNodeSetBuilder) Placeholder(cr client.Object) client.Objec
6161
func (b *RemoteStorageNodeSetResource) GetResourceBuilders() []ResourceBuilder {
6262
var resourceBuilders []ResourceBuilder
6363

64-
nodeSetAnnotations := CopyDict(b.Annotations)
65-
delete(nodeSetAnnotations, ydbannotations.LastAppliedAnnotation)
66-
6764
resourceBuilders = append(resourceBuilders,
6865
&StorageNodeSetBuilder{
6966
Object: b,
7067

7168
Name: b.Name,
7269
Labels: b.Labels,
73-
Annotations: nodeSetAnnotations,
70+
Annotations: b.Annotations,
7471

7572
StorageNodeSetSpec: b.Spec,
7673
},

0 commit comments

Comments
 (0)