mirror of https://github.com/tailscale/tailscale/
cmd/k8s-operator: truncate long StatefulSet name prefixes (#10343)
Kubernetes can generate StatefulSet names that are too long and result in invalid Pod revision hash label values. Calculate whether a StatefulSet name generated for a Service or Ingress will be too long and if so, truncate it. Updates tailscale/tailscale#10284 Signed-off-by: Irbe Krumina <irbe@tailscale.com>clairew/test-wrapper-file
parent
2c1f14d9e6
commit
66471710f8
@ -0,0 +1,50 @@
|
|||||||
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
//go:build !plan9
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Test_statefulSetNameBase tests that parent name portion in a StatefulSet name
|
||||||
|
// base will be truncated if the parent name is longer than 43 chars to ensure
|
||||||
|
// that the total does not exceed 52 chars.
|
||||||
|
// How many chars need to be cut off parent name depends on an internal var in
|
||||||
|
// kube name generation code that can change at which point this test will break
|
||||||
|
// and need to be changed. This is okay as we do not rely on that value in
|
||||||
|
// code whilst being aware when it changes might still be useful.
|
||||||
|
// https://github.com/kubernetes/kubernetes/blob/v1.28.4/staging/src/k8s.io/apiserver/pkg/storage/names/generate.go#L45.
|
||||||
|
// https://github.com/kubernetes/kubernetes/pull/116430
|
||||||
|
func Test_statefulSetNameBase(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
in string
|
||||||
|
out string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "43 chars",
|
||||||
|
in: "oidhexl9o832hcbhyg4uz6o0s7u9uae54h5k8ofs9xb",
|
||||||
|
out: "ts-oidhexl9o832hcbhyg4uz6o0s7u9uae54h5k8ofs9xb-",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "44 chars",
|
||||||
|
in: "oidhexl9o832hcbhyg4uz6o0s7u9uae54h5k8ofs9xbo",
|
||||||
|
out: "ts-oidhexl9o832hcbhyg4uz6o0s7u9uae54h5k8ofs9xb-",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "42 chars",
|
||||||
|
in: "oidhexl9o832hcbhyg4uz6o0s7u9uae54h5k8ofs9x",
|
||||||
|
out: "ts-oidhexl9o832hcbhyg4uz6o0s7u9uae54h5k8ofs9x-",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
if got := statefulSetNameBase(tt.in); got != tt.out {
|
||||||
|
t.Errorf("stsNamePrefix(%s) = %q, want %s", tt.in, got, tt.out)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue