Skip to content

Commit 0797266

Browse files
committed
Add runtime config from source containerd config to drop-in file
This change updates the drop-in file contents that the nvidia-ctk-installer creates for containerd. In addition to adding nvidia runtimes, the nvidia-ctk-installer also includes all existing runtime configuration present in the source containerd configuration. That is, all configuration already present in the 'plugins."io.containerd.grpc.v1.cri".containerd.runtimes' section will be added to our drop-in file. This is needed due to how containerd merges configuration from multiple files. See containerd/containerd#5837 Signed-off-by: Christopher Desiniotis <[email protected]>
1 parent b3ce3a4 commit 0797266

File tree

2 files changed

+56
-3
lines changed

2 files changed

+56
-3
lines changed

pkg/config/engine/containerd/config_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,14 @@ func TestAddRuntime(t *testing.T) {
9595
[plugins."io.containerd.grpc.v1.cri"]
9696
[plugins."io.containerd.grpc.v1.cri".containerd]
9797
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
98+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
99+
privileged_without_host_devices = true
100+
runtime_engine = "engine"
101+
runtime_root = "root"
102+
runtime_type = "type"
103+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
104+
BinaryName = "/usr/bin/runc"
105+
SystemdCgroup = true
98106
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test]
99107
privileged_without_host_devices = true
100108
runtime_engine = "engine"
@@ -129,6 +137,14 @@ func TestAddRuntime(t *testing.T) {
129137
[plugins."io.containerd.grpc.v1.cri"]
130138
[plugins."io.containerd.grpc.v1.cri".containerd]
131139
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
140+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.default]
141+
privileged_without_host_devices = true
142+
runtime_engine = "engine"
143+
runtime_root = "root"
144+
runtime_type = "type"
145+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.default.options]
146+
BinaryName = "/usr/bin/default"
147+
SystemdCgroup = true
132148
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test]
133149
privileged_without_host_devices = true
134150
runtime_engine = "engine"
@@ -171,6 +187,22 @@ func TestAddRuntime(t *testing.T) {
171187
[plugins."io.containerd.grpc.v1.cri"]
172188
[plugins."io.containerd.grpc.v1.cri".containerd]
173189
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
190+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
191+
privileged_without_host_devices = true
192+
runtime_engine = "engine"
193+
runtime_root = "root"
194+
runtime_type = "type"
195+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
196+
BinaryName = "/usr/bin/runc"
197+
SystemdCgroup = true
198+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.default]
199+
privileged_without_host_devices = false
200+
runtime_engine = "defaultengine"
201+
runtime_root = "defaultroot"
202+
runtime_type = "defaulttype"
203+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.default.options]
204+
BinaryName = "/usr/bin/default"
205+
SystemdCgroup = false
174206
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test]
175207
privileged_without_host_devices = false
176208
runtime_engine = "defaultengine"
@@ -225,6 +257,14 @@ func TestAddRuntime(t *testing.T) {
225257
[plugins."io.containerd.cri.v1.runtime"]
226258
[plugins."io.containerd.cri.v1.runtime".containerd]
227259
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes]
260+
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes.runc]
261+
privileged_without_host_devices = true
262+
runtime_engine = "engine"
263+
runtime_root = "root"
264+
runtime_type = "type"
265+
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes.runc.options]
266+
BinaryName = "/usr/bin/runc"
267+
SystemdCgroup = true
228268
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes.test]
229269
privileged_without_host_devices = true
230270
runtime_engine = "engine"

pkg/config/engine/containerd/containerd.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,14 @@ func New(opts ...Option) (engine.Interface, error) {
133133
}
134134
dropInConfig := &engine.Config{
135135
Source: sourceConfig,
136-
// The destinationConfig is an empty config with the same options
137-
// as the source config.
136+
// The destinationConfig is a minimal config with the same options
137+
// as the source config. The starting content of the destinationConfig
138+
// is the entire plugins."io.containerd.grpc.v1.cri".containerd.runtimes
139+
// section of the source config. This is needed due to how containerd
140+
// merges configuration from multiple files.
141+
// Reference: https://github.com/containerd/containerd/issues/5837
138142
Destination: &Config{
139-
Tree: toml.NewEmpty(),
143+
Tree: getBaseDropInConfigTree(sourceConfig),
140144
configOptions: sourceConfigOptions,
141145
},
142146
}
@@ -204,3 +208,12 @@ func chrootIfRequired(hostRoot string, commandLine ...string) []string {
204208

205209
return append([]string{"chroot", hostRoot}, commandLine...)
206210
}
211+
212+
func getBaseDropInConfigTree(sourceConfig *Config) *toml.Tree {
213+
baseDropInConfigTree := toml.NewEmpty()
214+
runtimes := sourceConfig.GetSubtreeByPath([]string{"plugins", sourceConfig.CRIRuntimePluginName, "containerd", "runtimes"})
215+
if runtimes != nil {
216+
baseDropInConfigTree.SetPath([]string{"plugins", sourceConfig.CRIRuntimePluginName, "containerd", "runtimes"}, runtimes)
217+
}
218+
return baseDropInConfigTree
219+
}

0 commit comments

Comments
 (0)