Skip to content

Commit ec7f117

Browse files
authored
fix: sort etcd args to make them deterministic (#249)
Fix non-deterministic order of etcd args. fixes #248
1 parent 7367339 commit ec7f117

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

internal/controller/factory/statefulset.go

+3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121
"fmt"
2222
"math"
23+
"slices"
2324
"strconv"
2425

2526
"github.com/aenix-io/etcd-operator/internal/log"
@@ -334,6 +335,8 @@ func generateEtcdArgs(cluster *etcdaenixiov1alpha1.EtcdCluster) []string {
334335
args = append(args, clientTlsSettings...)
335336
args = append(args, autoCompactionSettings...)
336337

338+
slices.Sort(args)
339+
337340
return args
338341
}
339342

internal/controller/factory/statefulset_test.go

+12-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ limitations under the License.
1717
package factory
1818

1919
import (
20+
"slices"
21+
2022
"github.com/google/uuid"
2123
apierrors "k8s.io/apimachinery/pkg/api/errors"
2224
"k8s.io/apimachinery/pkg/api/resource"
@@ -172,10 +174,19 @@ var _ = Describe("CreateOrUpdateStatefulSet handler", func() {
172174
Expect(statefulSet.Spec.Template.ObjectMeta.Annotations).To(Equal(etcdcluster.Spec.PodTemplate.Annotations))
173175
})
174176

175-
By("Checking the extraArgs", func() {
177+
By("Checking the command", func() {
176178
Expect(statefulSet.Spec.Template.Spec.Containers[0].Command).To(Equal(generateEtcdCommand()))
177179
})
178180

181+
By("Checking the extraArgs", func() {
182+
Expect(statefulSet.Spec.Template.Spec.Containers[0].Args).To(Equal(generateEtcdArgs(&etcdcluster)))
183+
By("Checking args are sorted", func() {
184+
argsClone := slices.Clone(statefulSet.Spec.Template.Spec.Containers[0].Args)
185+
slices.Sort(argsClone)
186+
Expect(statefulSet.Spec.Template.Spec.Containers[0].Args).To(Equal(argsClone))
187+
})
188+
})
189+
179190
By("Checking the readinessGates", func() {
180191
Expect(statefulSet.Spec.Template.Spec.ReadinessGates).To(Equal(etcdcluster.Spec.PodTemplate.Spec.ReadinessGates))
181192
})

0 commit comments

Comments
 (0)