From 007faf84913b940afc876e1843391429e2979575 Mon Sep 17 00:00:00 2001 From: Evan Lezar Date: Wed, 21 May 2025 15:58:56 +0200 Subject: [PATCH] Add envvar to control debug logging in CDI hooks This change allows hooks to be configured with debug logging. This is currently always set to false, but may be extended in future. Signed-off-by: Evan Lezar --- CHANGELOG.md | 1 + cmd/nvidia-cdi-hook/main.go | 6 ++++-- internal/discover/discover.go | 1 + internal/discover/graphics_test.go | 3 +++ internal/discover/hooks.go | 2 ++ internal/discover/ldconfig_test.go | 1 + internal/discover/symlinks_test.go | 5 +++++ internal/edits/hook.go | 5 +++++ internal/platform-support/tegra/csv_test.go | 2 ++ pkg/nvcdi/driver-wsl_test.go | 3 +++ 10 files changed, 27 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4987eac..a1fdc07e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## v1.17.8 - Updated the ordering of Mounts in CDI to have a deterministic output. This makes testing more consistent. +- Added NVIDIA_CTK_DEBUG envvar to hooks. ### Changes in libnvidia-container diff --git a/cmd/nvidia-cdi-hook/main.go b/cmd/nvidia-cdi-hook/main.go index d7b7c271..8a536e3c 100644 --- a/cmd/nvidia-cdi-hook/main.go +++ b/cmd/nvidia-cdi-hook/main.go @@ -58,13 +58,15 @@ func main() { Aliases: []string{"d"}, Usage: "Enable debug-level logging", Destination: &opts.Debug, - EnvVars: []string{"NVIDIA_CDI_DEBUG"}, + // TODO: Support for NVIDIA_CDI_DEBUG is deprecated and NVIDIA_CTK_DEBUG should be used instead. + EnvVars: []string{"NVIDIA_CTK_DEBUG", "NVIDIA_CDI_DEBUG"}, }, &cli.BoolFlag{ Name: "quiet", Usage: "Suppress all output except for errors; overrides --debug", Destination: &opts.Quiet, - EnvVars: []string{"NVIDIA_CDI_QUIET"}, + // TODO: Support for NVIDIA_CDI_QUIET is deprecated and NVIDIA_CTK_QUIET should be used instead. + EnvVars: []string{"NVDIA_CTK_QUIET", "NVIDIA_CDI_QUIET"}, }, } diff --git a/internal/discover/discover.go b/internal/discover/discover.go index 7ff9f042..2ec33174 100644 --- a/internal/discover/discover.go +++ b/internal/discover/discover.go @@ -34,6 +34,7 @@ type Hook struct { Lifecycle string Path string Args []string + Env []string } // Discover defines an interface for discovering the devices, mounts, and hooks available on a system diff --git a/internal/discover/graphics_test.go b/internal/discover/graphics_test.go index a515c939..122e0599 100644 --- a/internal/discover/graphics_test.go +++ b/internal/discover/graphics_test.go @@ -70,6 +70,7 @@ func TestGraphicsLibrariesDiscoverer(t *testing.T) { Args: []string{"nvidia-cdi-hook", "create-symlinks", "--link", "../libnvidia-allocator.so.1::/usr/lib64/gbm/nvidia-drm_gbm.so", }, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, }, @@ -97,6 +98,7 @@ func TestGraphicsLibrariesDiscoverer(t *testing.T) { Args: []string{"nvidia-cdi-hook", "create-symlinks", "--link", "libnvidia-vulkan-producer.so.123.45.67::/usr/lib64/libnvidia-vulkan-producer.so", }, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, }, @@ -128,6 +130,7 @@ func TestGraphicsLibrariesDiscoverer(t *testing.T) { "--link", "../libnvidia-allocator.so.1::/usr/lib64/gbm/nvidia-drm_gbm.so", "--link", "libnvidia-vulkan-producer.so.123.45.67::/usr/lib64/libnvidia-vulkan-producer.so", }, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, }, diff --git a/internal/discover/hooks.go b/internal/discover/hooks.go index 4259ccf8..03a57434 100644 --- a/internal/discover/hooks.go +++ b/internal/discover/hooks.go @@ -17,6 +17,7 @@ package discover import ( + "fmt" "path/filepath" "tags.cncf.io/container-device-interface/pkg/cdi" @@ -69,6 +70,7 @@ func (c cdiHook) Create(name string, args ...string) Hook { Lifecycle: cdi.CreateContainerHook, Path: string(c), Args: append(c.requiredArgs(name), args...), + Env: []string{fmt.Sprintf("NVIDIA_CTK_DEBUG=%v", false)}, } } func (c cdiHook) requiredArgs(name string) []string { diff --git a/internal/discover/ldconfig_test.go b/internal/discover/ldconfig_test.go index 0b214c77..09aef765 100644 --- a/internal/discover/ldconfig_test.go +++ b/internal/discover/ldconfig_test.go @@ -95,6 +95,7 @@ func TestLDCacheUpdateHook(t *testing.T) { Path: testNvidiaCDIHookPath, Args: tc.expectedArgs, Lifecycle: "createContainer", + Env: []string{"NVIDIA_CTK_DEBUG=false"}, } d, err := NewLDCacheUpdateHook(logger, mountMock, testNvidiaCDIHookPath, tc.ldconfigPath) diff --git a/internal/discover/symlinks_test.go b/internal/discover/symlinks_test.go index 7653b847..6d7662fe 100644 --- a/internal/discover/symlinks_test.go +++ b/internal/discover/symlinks_test.go @@ -115,6 +115,7 @@ func TestWithWithDriverDotSoSymlinks(t *testing.T) { Lifecycle: "createContainer", Path: "/path/to/nvidia-cdi-hook", Args: []string{"nvidia-cdi-hook", "create-symlinks", "--link", "libcuda.so.1::/usr/lib/libcuda.so"}, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, }, @@ -147,6 +148,7 @@ func TestWithWithDriverDotSoSymlinks(t *testing.T) { Lifecycle: "createContainer", Path: "/path/to/nvidia-cdi-hook", Args: []string{"nvidia-cdi-hook", "create-symlinks", "--link", "libcuda.so.1::/usr/lib/libcuda.so"}, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, }, @@ -178,6 +180,7 @@ func TestWithWithDriverDotSoSymlinks(t *testing.T) { Lifecycle: "createContainer", Path: "/path/to/nvidia-cdi-hook", Args: []string{"nvidia-cdi-hook", "create-symlinks", "--link", "libcuda.so.1::/usr/lib/libcuda.so"}, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, }, @@ -247,6 +250,7 @@ func TestWithWithDriverDotSoSymlinks(t *testing.T) { Lifecycle: "createContainer", Path: "/path/to/nvidia-cdi-hook", Args: []string{"nvidia-cdi-hook", "create-symlinks", "--link", "libcuda.so.1::/usr/lib/libcuda.so"}, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, }, @@ -301,6 +305,7 @@ func TestWithWithDriverDotSoSymlinks(t *testing.T) { "--link", "libGLX_nvidia.so.1.2.3::/usr/lib/libGLX_indirect.so.0", "--link", "libnvidia-opticalflow.so.1::/usr/lib/libnvidia-opticalflow.so", }, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, }, diff --git a/internal/edits/hook.go b/internal/edits/hook.go index f528fe1d..919a07ab 100644 --- a/internal/edits/hook.go +++ b/internal/edits/hook.go @@ -38,10 +38,15 @@ func (d hook) toEdits() *cdi.ContainerEdits { // toSpec converts a discovered Hook to a CDI Spec Hook. Note // that missing info is filled in when edits are applied by querying the Hook node. func (d hook) toSpec() *specs.Hook { + env := d.Env + if env == nil { + env = []string{"NVIDIA_CTK_DEBUG=false"} + } s := specs.Hook{ HookName: d.Lifecycle, Path: d.Path, Args: d.Args, + Env: env, } return &s diff --git a/internal/platform-support/tegra/csv_test.go b/internal/platform-support/tegra/csv_test.go index 2e8e42fe..07437ad6 100644 --- a/internal/platform-support/tegra/csv_test.go +++ b/internal/platform-support/tegra/csv_test.go @@ -97,6 +97,7 @@ func TestDiscovererFromCSVFiles(t *testing.T) { "--link", "/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so::/usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvargus.so", }, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, }, @@ -153,6 +154,7 @@ func TestDiscovererFromCSVFiles(t *testing.T) { "--link", "/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so::/usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvargus.so", }, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, }, diff --git a/pkg/nvcdi/driver-wsl_test.go b/pkg/nvcdi/driver-wsl_test.go index b9aac1a1..cc2687f5 100644 --- a/pkg/nvcdi/driver-wsl_test.go +++ b/pkg/nvcdi/driver-wsl_test.go @@ -95,6 +95,7 @@ func TestNvidiaSMISymlinkHook(t *testing.T) { Path: "nvidia-cdi-hook", Args: []string{"nvidia-cdi-hook", "create-symlinks", "--link", "nvidia-smi::/usr/bin/nvidia-smi"}, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, }, @@ -115,6 +116,7 @@ func TestNvidiaSMISymlinkHook(t *testing.T) { Path: "nvidia-cdi-hook", Args: []string{"nvidia-cdi-hook", "create-symlinks", "--link", "/some/path/nvidia-smi::/usr/bin/nvidia-smi"}, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, }, @@ -135,6 +137,7 @@ func TestNvidiaSMISymlinkHook(t *testing.T) { Path: "nvidia-cdi-hook", Args: []string{"nvidia-cdi-hook", "create-symlinks", "--link", "/some/path/nvidia-smi::/usr/bin/nvidia-smi"}, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, },