Skip to content

Commit 925e406

Browse files
committed
update Record events; add scripts to hash
Signed-off-by: utdrmac <matthew.boehm@percona.com>
1 parent 3736d67 commit 925e406

3 files changed

Lines changed: 28 additions & 21 deletions

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ lint-config: golangci-lint ## Verify golangci-lint linter configuration
105105
##@ Build
106106

107107
.PHONY: build
108-
build: manifests generate fmt vet ## Build manager binary.
108+
build: manifests generate fmt vet lint ## Build manager binary.
109109
go build -o bin/manager cmd/main.go
110110

111111
.PHONY: run

internal/controller/config.go

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"crypto/sha256"
2222
"embed"
2323
"fmt"
24+
"maps"
2425
"slices"
2526

2627
corev1 "k8s.io/api/core/v1"
@@ -40,50 +41,56 @@ const (
4041
//go:embed scripts/*
4142
var scripts embed.FS
4243

44+
func getConfigMapName(clusterName string) string {
45+
return clusterName + "-config"
46+
}
47+
4348
// Create or update a default valkey.conf
4449
// If additional config is provided, append to the default map
4550
func (r *ValkeyClusterReconciler) upsertConfigMap(ctx context.Context, cluster *valkeyiov1alpha1.ValkeyCluster) error {
4651

4752
log := logf.FromContext(ctx)
4853

54+
// Hash writer for embedded scripts, and configuration parameters
55+
hashConfigContents := sha256.New()
56+
4957
// Embed readiness check script
5058
readiness, err := scripts.ReadFile("scripts/readiness-check.sh")
5159
if err != nil {
5260
return err
5361
}
62+
hashConfigContents.Write(readiness)
5463

5564
// Embed liveness check script
5665
liveness, err := scripts.ReadFile("scripts/liveness-check.sh")
5766
if err != nil {
5867
return err
5968
}
69+
hashConfigContents.Write(liveness)
6070

71+
// Base config
6172
serverConfig := `# Base operator config
6273
cluster-enabled yes
6374
protected-mode no
6475
cluster-node-timeout 2000
6576
`
6677

67-
// Shortcut
78+
// Local copy
6879
specConfig := cluster.Spec.ValkeySpec.Configuration
6980

7081
// If there are any user-defined config parameters
7182
if len(specConfig) > 0 {
7283

7384
// Sort the config keys to keep consistent processing order
74-
sortedConfig := make([]string, 0, len(specConfig))
75-
for k := range specConfig {
76-
sortedConfig = append(sortedConfig, k)
77-
}
78-
slices.Sort(sortedConfig)
85+
sortedKeys := slices.Sorted(maps.Keys(specConfig))
7986

8087
// Build the config
8188
serverConfig += "\n# Extra config\n"
82-
for _, k := range sortedConfig {
89+
for _, k := range sortedKeys {
8390

8491
if slices.Contains(valkeyiov1alpha1.NonUserOverrideConfigParameters, k) {
8592
log.Error(nil, "Prohibited valkey server config", "parameter", k)
86-
r.Recorder.Eventf(cluster, corev1.EventTypeWarning, "ConfigMapUpdateFailed", "Prohibited config: %v", k)
93+
r.Recorder.Eventf(cluster, nil, corev1.EventTypeWarning, "ConfigMapUpdateFailed", "UpsertConfigMap", "Prohibited config: %v", k)
8794
continue
8895
}
8996

@@ -124,15 +131,16 @@ cluster-node-timeout 2000
124131
// Register ownership of the configMap
125132
if err := controllerutil.SetControllerReference(cluster, serverConfigMap, r.Scheme); err != nil {
126133
log.Error(err, "Failed to grab ownership of server configMap")
127-
r.Recorder.Eventf(cluster, corev1.EventTypeWarning, "ConfigMapCreationFailed", "Failed to grab ownership of server configMap: %v", err)
134+
r.Recorder.Eventf(cluster, nil, corev1.EventTypeWarning, "ConfigMapCreationFailed", "UpsertConfigMap", "Failed to grab ownership of server configMap: %v", err)
128135
return err
129136
}
130137

131138
// Calculate hash of existing config parameters
132139
origServerConfigHash := fmt.Sprintf("%x", sha256.Sum256([]byte(serverConfigMap.Data[configFileKey])))
133140

134141
// Calculate hash of new config parameters
135-
newServerConfigHash := fmt.Sprintf("%x", sha256.Sum256([]byte(serverConfig)))
142+
hashConfigContents.Write([]byte(serverConfig))
143+
newServerConfigHash := fmt.Sprintf("%x", hashConfigContents.Sum(nil))
136144

137145
// Was the configMap changed? This is an invalid action, as users should modify
138146
// the ValkeyCluster CR to change parameters, not the configMap itself.
@@ -143,34 +151,37 @@ cluster-node-timeout 2000
143151

144152
// Original config is not modified, and new config doesn't change anything
145153
if !origConfigModified && !needsUpdate {
146-
log.V(1).Info("Server configMap unchanged")
154+
log.V(1).Info("server config unchanged")
147155
return nil
148156
}
149157

150158
// In all other cases (ie: user modified configMap, or modified CR),
151-
// update the config with the newly changed config
159+
// update the config with the newly changed config. Also sync the
160+
// check scripts in case they are updated in a later operator version.
161+
serverConfigMap.Data["readiness-check.sh"] = string(readiness)
162+
serverConfigMap.Data["liveness-check.sh"] = string(liveness)
152163
serverConfigMap.Data[configFileKey] = serverConfig
153164

154165
// Need to create new configMap
155166
if needCreateConfigMap {
156167
if err := r.Create(ctx, serverConfigMap); err != nil {
157168
log.Error(err, "Failed to create server configMap")
158-
r.Recorder.Eventf(cluster, corev1.EventTypeWarning, "ConfigMapCreationFailed", "Failed to create server configMap: %v", err)
169+
r.Recorder.Eventf(cluster, nil, corev1.EventTypeWarning, "ConfigMapCreationFailed", "UpsertConfigMap", "Failed to create server configMap: %v", err)
159170
return err
160171
} else {
161-
r.Recorder.Eventf(cluster, corev1.EventTypeNormal, "ConfigMapCreated", "Created server configMap")
172+
r.Recorder.Eventf(cluster, nil, corev1.EventTypeNormal, "ConfigMapCreated", "UpsertConfigMap", "Created server configMap")
162173
return nil
163174
}
164175
}
165176

166177
// Otherwise, update it
167178
if err := r.Update(ctx, serverConfigMap); err != nil {
168179
log.Error(err, "Failed to update server configMap")
169-
r.Recorder.Eventf(cluster, corev1.EventTypeWarning, "ConfigMapUpdateFailed", "Failed to update server configMap: %v", err)
180+
r.Recorder.Eventf(cluster, nil, corev1.EventTypeWarning, "ConfigMapUpdateFailed", "UpsertConfigMap", "Failed to update server configMap: %v", err)
170181
return err
171182
}
172183

173-
r.Recorder.Eventf(cluster, corev1.EventTypeNormal, "ConfigMapUpdated", "Synchronized server configMap")
184+
r.Recorder.Eventf(cluster, nil, corev1.EventTypeNormal, "ConfigMapUpdated", "UpsertConfigMap", "Synchronized server configMap")
174185

175186
// All is good. Server configMap will be auto-mounted in the deployment
176187
return nil

internal/controller/utils.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,6 @@ func annotations(cluster *valkeyv1.ValkeyCluster) map[string]string {
4545
return maps.Clone(cluster.Annotations)
4646
}
4747

48-
func getConfigMapName(cn string) string {
49-
return cn + "-config"
50-
}
51-
5248
// This function takes a K8S object reference (eg: pod, secret, configmap, etc),
5349
// and a key, and value to compare to an existing annotation within the object.
5450
// Returns true if the annotation is present, and matches the value.

0 commit comments

Comments
 (0)