Skip to content

Commit 55b500b

Browse files
committed
chore: sync config/*.go and values.schema.json to vCluster version v0.23.3
1 parent cc72595 commit 55b500b

File tree

1,587 files changed

+734
-763836
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,587 files changed

+734
-763836
lines changed

config/config.go

Lines changed: 123 additions & 1007 deletions
Large diffs are not rendered by default.

config/config_test.go

Lines changed: 54 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ package config
22

33
import (
44
_ "embed"
5+
"fmt"
6+
"os"
57
"strings"
68
"testing"
79

810
"gotest.tools/assert"
9-
"gotest.tools/assert/cmp"
10-
"sigs.k8s.io/yaml"
1111
)
1212

1313
func TestConfig_Diff(t *testing.T) {
@@ -281,6 +281,40 @@ func TestConfig_IsProFeatureEnabled(t *testing.T) {
281281
},
282282
expected: true,
283283
},
284+
{
285+
name: "Pro Sync Settings not used",
286+
config: &Config{
287+
Experimental: Experimental{
288+
SyncSettings: ExperimentalSyncSettings{
289+
DisableSync: false,
290+
RewriteKubernetesService: false,
291+
},
292+
},
293+
},
294+
expected: false,
295+
},
296+
{
297+
name: "Pro Sync Setting disableSync used",
298+
config: &Config{
299+
Experimental: Experimental{
300+
SyncSettings: ExperimentalSyncSettings{
301+
DisableSync: true,
302+
},
303+
},
304+
},
305+
expected: true,
306+
},
307+
{
308+
name: "Pro Sync Setting rewriteKubernetesService used",
309+
config: &Config{
310+
Experimental: Experimental{
311+
SyncSettings: ExperimentalSyncSettings{
312+
RewriteKubernetesService: true,
313+
},
314+
},
315+
},
316+
expected: true,
317+
},
284318
{
285319
name: "Isolated Control Plane not used",
286320
config: &Config{
@@ -364,21 +398,6 @@ func TestConfig_IsProFeatureEnabled(t *testing.T) {
364398
},
365399
expected: true,
366400
},
367-
{
368-
name: "Hybrid scheduling is enabled",
369-
config: &Config{
370-
Sync: Sync{
371-
ToHost: SyncToHost{
372-
Pods: SyncPods{
373-
HybridScheduling: HybridScheduling{
374-
Enabled: true,
375-
},
376-
},
377-
},
378-
},
379-
},
380-
expected: true,
381-
},
382401
}
383402

384403
for _, tt := range tests {
@@ -388,128 +407,23 @@ func TestConfig_IsProFeatureEnabled(t *testing.T) {
388407
}
389408
}
390409

391-
// We changed sync.toHost.pods.rewriteHosts.initContainer.image from a string to an object in 0.27.0.
392-
// We parse the previously used config on upgrade, so it must be backwards compatible.
393-
func TestImage_UnmarshalYAML(t *testing.T) {
394-
tests := []struct {
395-
name string
396-
yaml string
397-
expected Image
398-
}{
399-
{
400-
name: "image as object",
401-
yaml: `registry: registry:5000
402-
repository: some/repo
403-
tag: sometag`,
404-
expected: Image{
405-
Registry: "registry:5000",
406-
Repository: "some/repo",
407-
Tag: "sometag",
408-
},
409-
},
410-
{
411-
name: "image as string",
412-
yaml: "registry:5000/some/repo:sometag",
413-
expected: Image{
414-
Registry: "registry:5000",
415-
Repository: "some/repo",
416-
Tag: "sometag",
417-
},
418-
},
419-
}
420-
421-
for _, tt := range tests {
422-
t.Run(tt.name, func(t *testing.T) {
423-
var actual Image
424-
err := yaml.Unmarshal([]byte(tt.yaml), &actual)
425-
assert.NilError(t, err)
426-
assert.DeepEqual(t, actual, tt.expected)
427-
})
428-
}
429-
}
430-
431-
func TestImage_String(t *testing.T) {
432-
testCases := []struct {
433-
name string
434-
image Image
435-
expected string
436-
}{
437-
{
438-
name: "complete image reference",
439-
image: Image{
440-
Registry: "registry.k8s.io",
441-
Repository: "coredns/coredns",
442-
Tag: "1.11.3",
443-
},
444-
expected: "registry.k8s.io/coredns/coredns:1.11.3",
445-
},
446-
{
447-
name: "may omit registry",
448-
image: Image{
449-
Repository: "coredns/coredns",
450-
Tag: "1.11.3",
451-
},
452-
expected: "coredns/coredns:1.11.3",
453-
},
454-
{
455-
name: "may omit registry and repo",
456-
image: Image{
457-
Repository: "alpine",
458-
Tag: "3.20",
459-
},
460-
expected: "alpine:3.20",
461-
},
462-
{
463-
name: "may omit tag",
464-
image: Image{
465-
Repository: "alpine",
466-
},
467-
expected: "alpine",
468-
},
469-
{
470-
name: "omit repo but not registry is library",
471-
image: Image{
472-
Registry: "ghcr.io",
473-
Repository: "alpine",
474-
Tag: "3.20",
475-
},
476-
expected: "ghcr.io/library/alpine:3.20",
477-
},
478-
{
479-
name: "registry may have port",
480-
image: Image{
481-
Registry: "host.docker.internal:5000",
482-
Repository: "coredns/coredns",
483-
Tag: "1.11.3",
484-
},
485-
expected: "host.docker.internal:5000/coredns/coredns:1.11.3",
486-
},
487-
{
488-
name: "registry with port and omit tag",
489-
image: Image{
490-
Registry: "localhost:5000",
491-
Repository: "coredns/coredns",
492-
},
493-
expected: "localhost:5000/coredns/coredns",
494-
},
495-
{
496-
name: "empty image is nil value",
497-
image: Image{},
498-
expected: "",
499-
},
500-
}
410+
func TestIfDefaultImagesVersionsAreInSync(t *testing.T) {
411+
defaultConfig, err := NewDefaultConfig()
412+
assert.NilError(t, err)
413+
// this will fail when this test is moved or _init-containers.tpl is moved
414+
initContainersTplFilePath := "../chart/templates/_init-containers.tpl"
415+
tplBytes, err := os.ReadFile(initContainersTplFilePath)
501416

502-
for _, tt := range testCases {
503-
t.Run("String(): "+tt.name, func(t *testing.T) {
504-
if actual := tt.image.String(); actual != tt.expected {
505-
t.Errorf("Expected %s, got %s", tt.expected, actual)
506-
}
507-
})
508-
509-
t.Run("ParseImageRef(): "+tt.name, func(t *testing.T) {
510-
var image Image
511-
ParseImageRef(tt.expected, &image)
512-
assert.Check(t, cmp.DeepEqual(tt.image, image))
513-
})
514-
}
417+
assert.NilError(t, err)
418+
assert.Equal(t, defaultConfig.ControlPlane.Distro.K8S.ControllerManager.Image.Tag, defaultConfig.ControlPlane.Distro.K8S.APIServer.Image.Tag)
419+
assert.Equal(t, defaultConfig.ControlPlane.Distro.K8S.ControllerManager.Image.Tag, defaultConfig.ControlPlane.Distro.K8S.Scheduler.Image.Tag)
420+
assert.Equal(t, defaultConfig.ControlPlane.Distro.K8S.APIServer.Image.Tag, defaultConfig.ControlPlane.Distro.K8S.Scheduler.Image.Tag)
421+
expectedDefaultTag := fmt.Sprintf("{{- $defaultTag := %q -}}", defaultConfig.ControlPlane.Distro.K8S.ControllerManager.Image.Tag)
422+
got := strings.Count(string(tplBytes), expectedDefaultTag)
423+
assert.Equal(
424+
t, got, 3,
425+
fmt.Sprintf("please update $defaultTag in %s so it's equal to the "+
426+
".Values.controlPlane.distro.k8s.controllerManager.image.tag",
427+
initContainersTplFilePath),
428+
)
515429
}

config/default_extra_values.go

Lines changed: 65 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
const (
99
K3SDistro = "k3s"
1010
K8SDistro = "k8s"
11+
K0SDistro = "k0s"
1112
Unknown = "unknown"
1213
)
1314

@@ -16,33 +17,68 @@ type StoreType string
1617
const (
1718
StoreTypeEmbeddedEtcd StoreType = "embedded-etcd"
1819
StoreTypeExternalEtcd StoreType = "external-etcd"
19-
StoreTypeDeployedEtcd StoreType = "deployed-etcd"
2020
StoreTypeEmbeddedDatabase StoreType = "embedded-database"
2121
StoreTypeExternalDatabase StoreType = "external-database"
2222
)
2323

2424
// K3SVersionMap holds the supported k3s versions
2525
var K3SVersionMap = map[string]string{
26-
"1.33": "rancher/k3s:v1.33.1-k3s1",
2726
"1.32": "rancher/k3s:v1.32.1-k3s1",
2827
"1.31": "rancher/k3s:v1.31.1-k3s1",
2928
"1.30": "rancher/k3s:v1.30.2-k3s1",
29+
"1.29": "rancher/k3s:v1.29.6-k3s1",
30+
"1.28": "rancher/k3s:v1.28.11-k3s1",
31+
"1.27": "rancher/k3s:v1.27.16-k3s1",
3032
}
3133

32-
// K8SVersionMap holds the supported k8s api servers
33-
var K8SVersionMap = map[string]string{
34-
"1.33": "ghcr.io/loft-sh/kubernetes:v1.33.1",
35-
"1.32": "ghcr.io/loft-sh/kubernetes:v1.32.1",
36-
"1.31": "ghcr.io/loft-sh/kubernetes:v1.31.1",
37-
"1.30": "ghcr.io/loft-sh/kubernetes:v1.30.2",
34+
// K0SVersionMap holds the supported k0s versions
35+
var K0SVersionMap = map[string]string{
36+
"1.32": "k0sproject/k0s:v1.30.2-k0s.0",
37+
"1.31": "k0sproject/k0s:v1.30.2-k0s.0",
38+
"1.30": "k0sproject/k0s:v1.30.2-k0s.0",
39+
"1.29": "k0sproject/k0s:v1.29.6-k0s.0",
40+
"1.28": "k0sproject/k0s:v1.28.11-k0s.0",
41+
"1.27": "k0sproject/k0s:v1.27.16-k0s.0",
42+
}
43+
44+
// K8SAPIVersionMap holds the supported k8s api servers
45+
var K8SAPIVersionMap = map[string]string{
46+
"1.32": "registry.k8s.io/kube-apiserver:v1.32.1",
47+
"1.31": "registry.k8s.io/kube-apiserver:v1.31.1",
48+
"1.30": "registry.k8s.io/kube-apiserver:v1.30.2",
49+
"1.29": "registry.k8s.io/kube-apiserver:v1.29.6",
50+
"1.28": "registry.k8s.io/kube-apiserver:v1.28.11",
51+
"1.27": "registry.k8s.io/kube-apiserver:v1.27.16",
52+
}
53+
54+
// K8SControllerVersionMap holds the supported k8s controller managers
55+
var K8SControllerVersionMap = map[string]string{
56+
"1.32": "registry.k8s.io/kube-controller-manager:v1.32.1",
57+
"1.31": "registry.k8s.io/kube-controller-manager:v1.31.1",
58+
"1.30": "registry.k8s.io/kube-controller-manager:v1.30.2",
59+
"1.29": "registry.k8s.io/kube-controller-manager:v1.29.6",
60+
"1.28": "registry.k8s.io/kube-controller-manager:v1.28.11",
61+
"1.27": "registry.k8s.io/kube-controller-manager:v1.27.16",
62+
}
63+
64+
// K8SSchedulerVersionMap holds the supported k8s schedulers
65+
var K8SSchedulerVersionMap = map[string]string{
66+
"1.32": "registry.k8s.io/kube-scheduler:v1.32.1",
67+
"1.31": "registry.k8s.io/kube-scheduler:v1.31.1",
68+
"1.30": "registry.k8s.io/kube-scheduler:v1.30.2",
69+
"1.29": "registry.k8s.io/kube-scheduler:v1.29.6",
70+
"1.28": "registry.k8s.io/kube-scheduler:v1.28.11",
71+
"1.27": "registry.k8s.io/kube-scheduler:v1.27.16",
3872
}
3973

4074
// K8SEtcdVersionMap holds the supported etcd
4175
var K8SEtcdVersionMap = map[string]string{
42-
"1.33": "registry.k8s.io/etcd:3.5.21-0",
43-
"1.32": "registry.k8s.io/etcd:3.5.21-0",
76+
"1.32": "registry.k8s.io/etcd:3.5.17-0",
4477
"1.31": "registry.k8s.io/etcd:3.5.15-0",
4578
"1.30": "registry.k8s.io/etcd:3.5.13-0",
79+
"1.29": "registry.k8s.io/etcd:3.5.10-0",
80+
"1.28": "registry.k8s.io/etcd:3.5.9-0",
81+
"1.27": "registry.k8s.io/etcd:3.5.7-0",
4682
}
4783

4884
// ExtraValuesOptions holds the chart options
@@ -90,31 +126,26 @@ func getExtraValues(options *ExtraValuesOptions) (*Config, error) {
90126
return vConfig, nil
91127
}
92128

93-
func ParseImageRef(ref string, image *Image) {
94-
*image = Image{}
95-
96-
splitRepoAndTag := func(s string) {
97-
split := strings.SplitN(s, ":", 2)
98-
switch len(split) {
99-
case 1:
100-
image.Repository = s
101-
case 2:
102-
image.Repository = split[0]
103-
image.Tag = split[1]
104-
}
105-
image.Repository = strings.TrimPrefix(image.Repository, "library/")
129+
func SplitImage(image string) (string, string, string) {
130+
imageSplitted := strings.Split(image, ":")
131+
if len(imageSplitted) == 1 {
132+
return "", "", ""
106133
}
107134

108-
parts := strings.SplitN(ref, "/", 2)
109-
switch {
110-
case len(parts) == 1: // <repo>[:<tag>]
111-
splitRepoAndTag(parts[0])
112-
case strings.ContainsAny(parts[0], ".:"): // <registry>/<repo>[:<tag>]
113-
image.Registry = parts[0]
114-
splitRepoAndTag(parts[1])
115-
default: // <repo/repo>[:<tag]
116-
splitRepoAndTag(ref)
135+
// check if registry needs to be filled
136+
registryAndRepository := strings.Join(imageSplitted[:len(imageSplitted)-1], ":")
137+
parts := strings.Split(registryAndRepository, "/")
138+
registry := ""
139+
repository := strings.Join(parts, "/")
140+
if len(parts) >= 2 && (strings.ContainsRune(parts[0], '.') || strings.ContainsRune(parts[0], ':')) {
141+
// The first part of the repository is treated as the registry domain
142+
// iff it contains a '.' or ':' character, otherwise it is all repository
143+
// and the domain defaults to Docker Hub.
144+
registry = parts[0]
145+
repository = strings.Join(parts[1:], "/")
117146
}
147+
148+
return registry, repository, imageSplitted[len(imageSplitted)-1]
118149
}
119150

120151
func addCommonReleaseValues(config *Config, options *ExtraValuesOptions) {
@@ -145,6 +176,8 @@ func addCommonReleaseValues(config *Config, options *ExtraValuesOptions) {
145176
switch options.Distro {
146177
case K3SDistro:
147178
config.ControlPlane.Distro.K3S.Enabled = true
179+
case K0SDistro:
180+
config.ControlPlane.Distro.K0S.Enabled = true
148181
case K8SDistro:
149182
}
150183
}

config/diff.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"errors"
66
"reflect"
77
"strconv"
8-
"strings"
98

109
"sigs.k8s.io/yaml"
1110
)
@@ -167,10 +166,3 @@ func (f *StrBool) MarshalJSON() ([]byte, error) {
167166
return []byte("\"" + *f + "\""), nil
168167
}
169168
}
170-
171-
func (f *StrBool) Bool() bool {
172-
if f == nil {
173-
return false
174-
}
175-
return strings.ToLower(string(*f)) == "true"
176-
}

0 commit comments

Comments
 (0)