Skip to content

Commit 7e14bd3

Browse files
authored
Merge pull request #1256 from cdesiniotis/cleanup-default-runtime-field
Cleanup default runtime in runtime config when setAsDefault=false
2 parents 40927a0 + cab76e2 commit 7e14bd3

File tree

4 files changed

+154
-0
lines changed

4 files changed

+154
-0
lines changed

pkg/config/engine/containerd/config.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ func (c *Config) AddRuntime(name string, path string, setAsDefault bool) error {
6464

6565
if setAsDefault {
6666
config.SetPath([]string{"plugins", c.CRIRuntimePluginName, "containerd", "default_runtime_name"}, name)
67+
} else {
68+
defaultRuntime, ok := config.GetPath([]string{"plugins", c.CRIRuntimePluginName, "containerd", "default_runtime_name"}).(string)
69+
if ok && defaultRuntime == name {
70+
config.DeletePath([]string{"plugins", c.CRIRuntimePluginName, "containerd", "default_runtime_name"})
71+
}
6772
}
6873

6974
*c.Tree = config

pkg/config/engine/containerd/config_test.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,26 @@ func TestAddRuntime(t *testing.T) {
5252
`,
5353
expectedError: nil,
5454
},
55+
{
56+
description: "empty config, set as default runtime",
57+
setAsDefault: true,
58+
expectedConfig: `
59+
version = 2
60+
[plugins]
61+
[plugins."io.containerd.grpc.v1.cri"]
62+
[plugins."io.containerd.grpc.v1.cri".containerd]
63+
default_runtime_name = "test"
64+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
65+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test]
66+
privileged_without_host_devices = false
67+
runtime_engine = ""
68+
runtime_root = ""
69+
runtime_type = "io.containerd.runc.v2"
70+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test.options]
71+
BinaryName = "/usr/bin/test"
72+
`,
73+
expectedError: nil,
74+
},
5575
{
5676
description: "options from runc are imported",
5777
config: `
@@ -257,6 +277,75 @@ func TestAddRuntime(t *testing.T) {
257277
SystemdCgroup = true
258278
`,
259279
},
280+
{
281+
description: "runtime already exists in config, default runtime",
282+
setAsDefault: true,
283+
config: `
284+
version = 2
285+
[plugins]
286+
[plugins."io.containerd.grpc.v1.cri"]
287+
[plugins."io.containerd.grpc.v1.cri".containerd]
288+
default_runtime_name = "test"
289+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
290+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test]
291+
privileged_without_host_devices = false
292+
runtime_engine = ""
293+
runtime_root = ""
294+
runtime_type = "io.containerd.runc.v2"
295+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test.options]
296+
BinaryName = "/usr/bin/test"
297+
`,
298+
expectedConfig: `
299+
version = 2
300+
[plugins]
301+
[plugins."io.containerd.grpc.v1.cri"]
302+
[plugins."io.containerd.grpc.v1.cri".containerd]
303+
default_runtime_name = "test"
304+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
305+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test]
306+
privileged_without_host_devices = false
307+
runtime_engine = ""
308+
runtime_root = ""
309+
runtime_type = "io.containerd.runc.v2"
310+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test.options]
311+
BinaryName = "/usr/bin/test"
312+
`,
313+
expectedError: nil,
314+
},
315+
{
316+
description: "runtime already exists in config, not default runtime",
317+
setAsDefault: false,
318+
config: `
319+
version = 2
320+
[plugins]
321+
[plugins."io.containerd.grpc.v1.cri"]
322+
[plugins."io.containerd.grpc.v1.cri".containerd]
323+
default_runtime_name = "test"
324+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
325+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test]
326+
privileged_without_host_devices = false
327+
runtime_engine = ""
328+
runtime_root = ""
329+
runtime_type = "io.containerd.runc.v2"
330+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test.options]
331+
BinaryName = "/usr/bin/test"
332+
`,
333+
expectedConfig: `
334+
version = 2
335+
[plugins]
336+
[plugins."io.containerd.grpc.v1.cri"]
337+
[plugins."io.containerd.grpc.v1.cri".containerd]
338+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
339+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test]
340+
privileged_without_host_devices = false
341+
runtime_engine = ""
342+
runtime_root = ""
343+
runtime_type = "io.containerd.runc.v2"
344+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test.options]
345+
BinaryName = "/usr/bin/test"
346+
`,
347+
expectedError: nil,
348+
},
260349
}
261350

262351
for _, tc := range testCases {

pkg/config/engine/crio/crio.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,12 @@ func (c *Config) AddRuntime(name string, path string, setAsDefault bool) error {
9797

9898
if setAsDefault {
9999
config.SetPath([]string{"crio", "runtime", "default_runtime"}, name)
100+
} else {
101+
if defaultRuntime, ok := config.GetPath([]string{"crio", "runtime", "default_runtime"}).(string); ok {
102+
if defaultRuntime == name {
103+
config.DeletePath([]string{"crio", "runtime", "default_runtime"})
104+
}
105+
}
100106
}
101107

102108
*c.Tree = config

pkg/config/engine/crio/crio_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,19 @@ func TestAddRuntime(t *testing.T) {
4444
`,
4545
expectedError: nil,
4646
},
47+
{
48+
description: "empty config, set as default runtime",
49+
setAsDefault: true,
50+
expectedConfig: `
51+
[crio]
52+
[crio.runtime]
53+
default_runtime = "test"
54+
[crio.runtime.runtimes.test]
55+
runtime_path = "/usr/bin/test"
56+
runtime_type = "oci"
57+
`,
58+
expectedError: nil,
59+
},
4760
{
4861
description: "options from runc are imported",
4962
config: `
@@ -123,6 +136,47 @@ func TestAddRuntime(t *testing.T) {
123136
default_option = "option"
124137
`,
125138
},
139+
{
140+
description: "runtime already exists in config, default runtime",
141+
setAsDefault: true,
142+
config: `
143+
[crio]
144+
[crio.runtime]
145+
default_runtime = "test"
146+
[crio.runtime.runtimes.test]
147+
runtime_path = "/usr/bin/test"
148+
runtime_type = "oci"
149+
`,
150+
expectedConfig: `
151+
[crio]
152+
[crio.runtime]
153+
default_runtime = "test"
154+
[crio.runtime.runtimes.test]
155+
runtime_path = "/usr/bin/test"
156+
runtime_type = "oci"
157+
`,
158+
expectedError: nil,
159+
},
160+
{
161+
description: "runtime already exists in config, not default runtime",
162+
setAsDefault: false,
163+
config: `
164+
[crio]
165+
[crio.runtime]
166+
default_runtime = "test"
167+
[crio.runtime.runtimes.test]
168+
runtime_path = "/usr/bin/test"
169+
runtime_type = "oci"
170+
`,
171+
expectedConfig: `
172+
[crio]
173+
[crio.runtime]
174+
[crio.runtime.runtimes.test]
175+
runtime_path = "/usr/bin/test"
176+
runtime_type = "oci"
177+
`,
178+
expectedError: nil,
179+
},
126180
}
127181

128182
for _, tc := range testCases {

0 commit comments

Comments
 (0)