Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add configuration for CDI
Signed-off-by: Ed Bartosh <[email protected]>
  • Loading branch information
bart0sh committed Apr 6, 2022
commit c9b4ccf83ee681ccff020de3d6c67db4f35a3fd6
4 changes: 2 additions & 2 deletions container_opts.go
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ func WithoutRefreshedMetadata(i *InfoConfig) {
}

// WithCDI updates OCI spec with CDI content
func WithCDI(s *oci.Spec, annotations map[string]string) NewContainerOpts {
func WithCDI(s *oci.Spec, annotations map[string]string, cdiSpecDirs []string) NewContainerOpts {
return func(ctx context.Context, _ *Client, c *containers.Container) error {
// TODO: Once CRI is extended with native CDI support this will need to be updated...
_, cdiDevices, err := cdi.ParseAnnotations(annotations)
Expand All @@ -339,7 +339,7 @@ func WithCDI(s *oci.Spec, annotations map[string]string) NewContainerOpts {
return nil
}

registry := cdi.GetRegistry()
registry := cdi.GetRegistry(cdi.WithSpecDirs(cdiSpecDirs...))
if err = registry.Refresh(); err != nil {
// We don't consider registry refresh failure a fatal error.
// For instance, a dynamically generated invalid CDI Spec file for
Expand Down
8 changes: 8 additions & 0 deletions docs/cri/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,14 @@ version = 2
# Note that currently default is set to disabled but target change it in future together with enable_unprivileged_ports
enable_unprivileged_icmp = false

# enable_cdi enables support of the Container Device Interface (CDI)
# For more details about CDI and the syntax of CDI Spec files please refer to
# https://github.com/container-orchestrated-devices/container-device-interface.
enable_cdi = false

# cdi_spec_dirs is the list of directories to scan for CDI spec files
cdi_spec_dirs = ["/etc/cdi", "/var/run/cdi"]

# 'plugins."io.containerd.grpc.v1.cri".containerd' contains config related to containerd
[plugins."io.containerd.grpc.v1.cri".containerd]

Expand Down
7 changes: 7 additions & 0 deletions pkg/cri/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,13 @@ type PluginConfig struct {
// and if it is not overwritten by PodSandboxConfig
// Note that currently default is set to disabled but target change it in future together with EnableUnprivilegedPorts
EnableUnprivilegedICMP bool `toml:"enable_unprivileged_icmp" json:"enableUnprivilegedICMP"`
// EnableCDI indicates to enable injection of the Container Device Interface Specifications
// into the OCI config
// For more details about CDI and the syntax of CDI Spec files please refer to
// https://github.com/container-orchestrated-devices/container-device-interface.
EnableCDI bool `toml:"enable_cdi" json:"enableCDI"`
// CDISpecDirs is the list of directories to scan for Container Device Interface Specifications
CDISpecDirs []string `toml:"cdi_spec_dirs" json:"cdiSpecDirs"`
Comment thread
mikebrow marked this conversation as resolved.
}

// X509KeyPairStreaming contains the x509 configuration for streaming
Expand Down
2 changes: 2 additions & 0 deletions pkg/cri/config/config_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,5 +104,7 @@ func DefaultConfig() PluginConfig {
ImageDecryption: ImageDecryption{
KeyModel: KeyModelNode,
},
EnableCDI: false,
CDISpecDirs: []string{"/etc/cdi", "/var/run/cdi"},
Comment thread
bart0sh marked this conversation as resolved.
}
}
6 changes: 5 additions & 1 deletion pkg/cri/server/container_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,8 +238,12 @@ func (c *criService) CreateContainer(ctx context.Context, r *runtime.CreateConta
if err != nil {
return nil, fmt.Errorf("failed to get runtime options: %w", err)
}

if c.config.EnableCDI {
opts = append(opts, containerd.WithCDI(spec, config.Annotations, c.config.CDISpecDirs))
}

opts = append(opts,
containerd.WithCDI(spec, config.Annotations),
containerd.WithSpec(spec, specOpts...),
containerd.WithRuntime(sandboxInfo.Runtime.Name, runtimeOptions),
containerd.WithContainerLabels(containerLabels),
Expand Down
4 changes: 2 additions & 2 deletions pkg/cri/server/container_create_linux_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1507,7 +1507,7 @@ func writeFilesToTempDir(tmpDirPattern string, content []string) (string, error)
}
}

return dir, cdi.GetRegistry(cdi.WithSpecDirs(dir)).Refresh()
return dir, nil
}

func TestCDIInjections(t *testing.T) {
Expand Down Expand Up @@ -1619,7 +1619,7 @@ containerEdits:
}
require.NoError(t, err)

injectFun := containerd.WithCDI(spec, test.annotations)
injectFun := containerd.WithCDI(spec, test.annotations, []string{cdiDir})
err = injectFun(nil, nil, nil)
assert.Equal(t, test.expectError, err != nil)

Expand Down