From eec7a76ecde1549f5f3afc865c819f64a1c9b95b Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Wed, 12 Oct 2022 12:21:19 +0300 Subject: [PATCH 1/4] move WithCDI to pkg/cri/opts As WithCDI is CRI-only API it makes sense to move it out of oci module. This move can also fix possible issues with this API when CRI plugin is disabled. Signed-off-by: Ed Bartosh --- oci/spec_opts_linux.go | 37 ------------------- pkg/cri/opts/spec_linux.go | 35 ++++++++++++++++++ pkg/cri/sbserver/container_create_linux.go | 2 +- .../sbserver/container_create_linux_test.go | 3 +- pkg/cri/server/container_create_linux.go | 2 +- pkg/cri/server/container_create_linux_test.go | 3 +- 6 files changed, 41 insertions(+), 41 deletions(-) diff --git a/oci/spec_opts_linux.go b/oci/spec_opts_linux.go index 54bb0151f..9ff23519c 100644 --- a/oci/spec_opts_linux.go +++ b/oci/spec_opts_linux.go @@ -18,11 +18,8 @@ package oci import ( "context" - "fmt" - "github.com/container-orchestrated-devices/container-device-interface/pkg/cdi" "github.com/containerd/containerd/containers" - "github.com/containerd/containerd/log" "github.com/containerd/containerd/pkg/cap" specs "github.com/opencontainers/runtime-spec/specs-go" ) @@ -170,40 +167,6 @@ func escapeAndCombineArgs(args []string) string { panic("not supported") } -// WithCDI updates OCI spec with CDI content -func WithCDI(annotations map[string]string, cdiSpecDirs []string) SpecOpts { - return func(ctx context.Context, _ Client, c *containers.Container, s *Spec) error { - // TODO: Once CRI is extended with native CDI support this will need to be updated... - _, cdiDevices, err := cdi.ParseAnnotations(annotations) - if err != nil { - return fmt.Errorf("failed to parse CDI device annotations: %w", err) - } - if cdiDevices == nil { - return nil - } - - 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 - // any particular vendor shouldn't prevent injection of devices of - // different vendors. CDI itself knows better and it will fail the - // injection if necessary. - log.G(ctx).Warnf("CDI registry refresh failed: %v", err) - } - - if _, err := registry.InjectDevices(s, cdiDevices...); err != nil { - return fmt.Errorf("CDI device injection failed: %w", err) - } - - // One crucial thing to keep in mind is that CDI device injection - // might add OCI Spec environment variables, hooks, and mounts as - // well. Therefore it is important that none of the corresponding - // OCI Spec fields are reset up in the call stack once we return. - return nil - } -} - func appendOSMounts(s *Spec, os string) error { return nil } diff --git a/pkg/cri/opts/spec_linux.go b/pkg/cri/opts/spec_linux.go index 9306d42b6..c79aa7c3c 100644 --- a/pkg/cri/opts/spec_linux.go +++ b/pkg/cri/opts/spec_linux.go @@ -28,6 +28,7 @@ import ( "sync" "syscall" + "github.com/container-orchestrated-devices/container-device-interface/pkg/cdi" "github.com/containerd/containerd/containers" "github.com/containerd/containerd/log" "github.com/containerd/containerd/mount" @@ -729,3 +730,37 @@ func GetUTSNamespace(pid uint32) string { func GetPIDNamespace(pid uint32) string { return fmt.Sprintf(pidNSFormat, pid) } + +// WithCDI updates OCI spec with CDI content +func WithCDI(annotations map[string]string, cdiSpecDirs []string) oci.SpecOpts { + return func(ctx context.Context, _ oci.Client, c *containers.Container, s *oci.Spec) error { + // TODO: Once CRI is extended with native CDI support this will need to be updated... + _, cdiDevices, err := cdi.ParseAnnotations(annotations) + if err != nil { + return fmt.Errorf("failed to parse CDI device annotations: %w", err) + } + if cdiDevices == nil { + return nil + } + + 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 + // any particular vendor shouldn't prevent injection of devices of + // different vendors. CDI itself knows better and it will fail the + // injection if necessary. + log.G(ctx).Warnf("CDI registry refresh failed: %v", err) + } + + if _, err := registry.InjectDevices(s, cdiDevices...); err != nil { + return fmt.Errorf("CDI device injection failed: %w", err) + } + + // One crucial thing to keep in mind is that CDI device injection + // might add OCI Spec environment variables, hooks, and mounts as + // well. Therefore it is important that none of the corresponding + // OCI Spec fields are reset up in the call stack once we return. + return nil + } +} diff --git a/pkg/cri/sbserver/container_create_linux.go b/pkg/cri/sbserver/container_create_linux.go index d5de6d78d..6de7c776b 100644 --- a/pkg/cri/sbserver/container_create_linux.go +++ b/pkg/cri/sbserver/container_create_linux.go @@ -404,7 +404,7 @@ func (c *criService) containerSpecOpts(config *runtime.ContainerConfig, imageCon specOpts = append(specOpts, seccompSpecOpts) } if c.config.EnableCDI { - specOpts = append(specOpts, oci.WithCDI(config.Annotations, c.config.CDISpecDirs)) + specOpts = append(specOpts, customopts.WithCDI(config.Annotations, c.config.CDISpecDirs)) } return specOpts, nil } diff --git a/pkg/cri/sbserver/container_create_linux_test.go b/pkg/cri/sbserver/container_create_linux_test.go index b6edf77cd..46165e1b8 100644 --- a/pkg/cri/sbserver/container_create_linux_test.go +++ b/pkg/cri/sbserver/container_create_linux_test.go @@ -43,6 +43,7 @@ import ( "github.com/containerd/containerd/pkg/cri/annotations" "github.com/containerd/containerd/pkg/cri/config" "github.com/containerd/containerd/pkg/cri/opts" + customopts "github.com/containerd/containerd/pkg/cri/opts" "github.com/containerd/containerd/pkg/cri/util" ctrdutil "github.com/containerd/containerd/pkg/cri/util" ostesting "github.com/containerd/containerd/pkg/os/testing" @@ -1647,7 +1648,7 @@ containerEdits: } require.NoError(t, err) - injectFun := oci.WithCDI(test.annotations, []string{cdiDir}) + injectFun := customopts.WithCDI(test.annotations, []string{cdiDir}) err = injectFun(nil, nil, nil, spec) assert.Equal(t, test.expectError, err != nil) diff --git a/pkg/cri/server/container_create_linux.go b/pkg/cri/server/container_create_linux.go index c719d1d41..4bdbc9435 100644 --- a/pkg/cri/server/container_create_linux.go +++ b/pkg/cri/server/container_create_linux.go @@ -404,7 +404,7 @@ func (c *criService) containerSpecOpts(config *runtime.ContainerConfig, imageCon specOpts = append(specOpts, seccompSpecOpts) } if c.config.EnableCDI { - specOpts = append(specOpts, oci.WithCDI(config.Annotations, c.config.CDISpecDirs)) + specOpts = append(specOpts, customopts.WithCDI(config.Annotations, c.config.CDISpecDirs)) } return specOpts, nil } diff --git a/pkg/cri/server/container_create_linux_test.go b/pkg/cri/server/container_create_linux_test.go index b277423dd..eecf788ec 100644 --- a/pkg/cri/server/container_create_linux_test.go +++ b/pkg/cri/server/container_create_linux_test.go @@ -43,6 +43,7 @@ import ( "github.com/containerd/containerd/pkg/cri/annotations" "github.com/containerd/containerd/pkg/cri/config" "github.com/containerd/containerd/pkg/cri/opts" + customopts "github.com/containerd/containerd/pkg/cri/opts" "github.com/containerd/containerd/pkg/cri/util" ctrdutil "github.com/containerd/containerd/pkg/cri/util" ostesting "github.com/containerd/containerd/pkg/os/testing" @@ -1647,7 +1648,7 @@ containerEdits: } require.NoError(t, err) - injectFun := oci.WithCDI(test.annotations, []string{cdiDir}) + injectFun := customopts.WithCDI(test.annotations, []string{cdiDir}) err = injectFun(nil, nil, nil, spec) assert.Equal(t, test.expectError, err != nil) From 8ed910c46ae146069a8f85dc10a8eb4de1f84351 Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Wed, 12 Oct 2022 13:17:03 +0300 Subject: [PATCH 2/4] CDI: configure registry on start Currently CDI registry is reconfigured on every WithCDI call, which is a relatively heavy operation. This happens because cdi.GetRegistry(cdi.WithSpecDirs(cdiSpecDirs...)) unconditionally reconfigures the registry (clears fs notify watch, sets up new watch, rescans directories). Moving configuration to the criService.initPlatform should result in performing registry configuration only once on the service start. Signed-off-by: Ed Bartosh --- pkg/cri/opts/spec_linux.go | 4 ++-- pkg/cri/sbserver/container_create_linux.go | 2 +- pkg/cri/sbserver/container_create_linux_test.go | 6 +++++- pkg/cri/sbserver/service_linux.go | 9 +++++++++ pkg/cri/server/container_create_linux.go | 2 +- pkg/cri/server/container_create_linux_test.go | 6 +++++- pkg/cri/server/service_linux.go | 9 +++++++++ 7 files changed, 32 insertions(+), 6 deletions(-) diff --git a/pkg/cri/opts/spec_linux.go b/pkg/cri/opts/spec_linux.go index c79aa7c3c..8db346cd9 100644 --- a/pkg/cri/opts/spec_linux.go +++ b/pkg/cri/opts/spec_linux.go @@ -732,7 +732,7 @@ func GetPIDNamespace(pid uint32) string { } // WithCDI updates OCI spec with CDI content -func WithCDI(annotations map[string]string, cdiSpecDirs []string) oci.SpecOpts { +func WithCDI(annotations map[string]string) oci.SpecOpts { return func(ctx context.Context, _ oci.Client, c *containers.Container, s *oci.Spec) error { // TODO: Once CRI is extended with native CDI support this will need to be updated... _, cdiDevices, err := cdi.ParseAnnotations(annotations) @@ -743,7 +743,7 @@ func WithCDI(annotations map[string]string, cdiSpecDirs []string) oci.SpecOpts { return nil } - registry := cdi.GetRegistry(cdi.WithSpecDirs(cdiSpecDirs...)) + registry := cdi.GetRegistry() 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 diff --git a/pkg/cri/sbserver/container_create_linux.go b/pkg/cri/sbserver/container_create_linux.go index 6de7c776b..6cb0cb2ef 100644 --- a/pkg/cri/sbserver/container_create_linux.go +++ b/pkg/cri/sbserver/container_create_linux.go @@ -404,7 +404,7 @@ func (c *criService) containerSpecOpts(config *runtime.ContainerConfig, imageCon specOpts = append(specOpts, seccompSpecOpts) } if c.config.EnableCDI { - specOpts = append(specOpts, customopts.WithCDI(config.Annotations, c.config.CDISpecDirs)) + specOpts = append(specOpts, customopts.WithCDI(config.Annotations)) } return specOpts, nil } diff --git a/pkg/cri/sbserver/container_create_linux_test.go b/pkg/cri/sbserver/container_create_linux_test.go index 46165e1b8..252f3dd66 100644 --- a/pkg/cri/sbserver/container_create_linux_test.go +++ b/pkg/cri/sbserver/container_create_linux_test.go @@ -1648,7 +1648,11 @@ containerEdits: } require.NoError(t, err) - injectFun := customopts.WithCDI(test.annotations, []string{cdiDir}) + reg := cdi.GetRegistry() + err = reg.Configure(cdi.WithSpecDirs(cdiDir)) + require.NoError(t, err) + + injectFun := customopts.WithCDI(test.annotations) err = injectFun(nil, nil, nil, spec) assert.Equal(t, test.expectError, err != nil) diff --git a/pkg/cri/sbserver/service_linux.go b/pkg/cri/sbserver/service_linux.go index 5c6c32b32..c5da2d46f 100644 --- a/pkg/cri/sbserver/service_linux.go +++ b/pkg/cri/sbserver/service_linux.go @@ -19,6 +19,7 @@ package sbserver import ( "fmt" + "github.com/container-orchestrated-devices/container-device-interface/pkg/cdi" "github.com/containerd/containerd/pkg/cap" "github.com/containerd/containerd/pkg/userns" "github.com/containerd/go-cni" @@ -87,6 +88,14 @@ func (c *criService) initPlatform() (err error) { } } + if c.config.EnableCDI { + reg := cdi.GetRegistry() + err = reg.Configure(cdi.WithSpecDirs(c.config.CDISpecDirs...)) + if err != nil { + return fmt.Errorf("failed to configure CDI registry") + } + } + return nil } diff --git a/pkg/cri/server/container_create_linux.go b/pkg/cri/server/container_create_linux.go index 4bdbc9435..c995526b9 100644 --- a/pkg/cri/server/container_create_linux.go +++ b/pkg/cri/server/container_create_linux.go @@ -404,7 +404,7 @@ func (c *criService) containerSpecOpts(config *runtime.ContainerConfig, imageCon specOpts = append(specOpts, seccompSpecOpts) } if c.config.EnableCDI { - specOpts = append(specOpts, customopts.WithCDI(config.Annotations, c.config.CDISpecDirs)) + specOpts = append(specOpts, customopts.WithCDI(config.Annotations)) } return specOpts, nil } diff --git a/pkg/cri/server/container_create_linux_test.go b/pkg/cri/server/container_create_linux_test.go index eecf788ec..483d728f1 100644 --- a/pkg/cri/server/container_create_linux_test.go +++ b/pkg/cri/server/container_create_linux_test.go @@ -1648,7 +1648,11 @@ containerEdits: } require.NoError(t, err) - injectFun := customopts.WithCDI(test.annotations, []string{cdiDir}) + reg := cdi.GetRegistry() + err = reg.Configure(cdi.WithSpecDirs(cdiDir)) + require.NoError(t, err) + + injectFun := customopts.WithCDI(test.annotations) err = injectFun(nil, nil, nil, spec) assert.Equal(t, test.expectError, err != nil) diff --git a/pkg/cri/server/service_linux.go b/pkg/cri/server/service_linux.go index 020e37397..4b3c0bbe0 100644 --- a/pkg/cri/server/service_linux.go +++ b/pkg/cri/server/service_linux.go @@ -19,6 +19,7 @@ package server import ( "fmt" + "github.com/container-orchestrated-devices/container-device-interface/pkg/cdi" "github.com/containerd/containerd/pkg/cap" "github.com/containerd/containerd/pkg/userns" cni "github.com/containerd/go-cni" @@ -87,6 +88,14 @@ func (c *criService) initPlatform() (err error) { } } + if c.config.EnableCDI { + reg := cdi.GetRegistry() + err = reg.Configure(cdi.WithSpecDirs(c.config.CDISpecDirs...)) + if err != nil { + return fmt.Errorf("failed to configure CDI registry") + } + } + return nil } From 643dc16565ca20fac9314ee00d0540623191953b Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Wed, 12 Oct 2022 13:43:13 +0300 Subject: [PATCH 3/4] improve CDI logging Added logging of found CDI devices. Fixed test failures caused by the change. Signed-off-by: Ed Bartosh --- pkg/cri/opts/spec_linux.go | 2 ++ pkg/cri/sbserver/container_create_linux_test.go | 4 +++- pkg/cri/server/container_create_linux_test.go | 4 +++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pkg/cri/opts/spec_linux.go b/pkg/cri/opts/spec_linux.go index 8db346cd9..8547b6864 100644 --- a/pkg/cri/opts/spec_linux.go +++ b/pkg/cri/opts/spec_linux.go @@ -743,6 +743,8 @@ func WithCDI(annotations map[string]string) oci.SpecOpts { return nil } + log.G(ctx).Infof("container %v: CDI devices: %v", c.ID, cdiDevices) + registry := cdi.GetRegistry() if err = registry.Refresh(); err != nil { // We don't consider registry refresh failure a fatal error. diff --git a/pkg/cri/sbserver/container_create_linux_test.go b/pkg/cri/sbserver/container_create_linux_test.go index 252f3dd66..88eb28738 100644 --- a/pkg/cri/sbserver/container_create_linux_test.go +++ b/pkg/cri/sbserver/container_create_linux_test.go @@ -1548,6 +1548,8 @@ func TestCDIInjections(t *testing.T) { containerConfig, sandboxConfig, imageConfig, specCheck := getCreateContainerTestData() ociRuntime := config.Runtime{} c := newTestCRIService() + testContainer := &containers.Container{ID: "64ddfe361f0099f8d59075398feeb3dcb3863b6851df7b946744755066c03e9d"} + ctx := context.Background() for _, test := range []struct { description string @@ -1653,7 +1655,7 @@ containerEdits: require.NoError(t, err) injectFun := customopts.WithCDI(test.annotations) - err = injectFun(nil, nil, nil, spec) + err = injectFun(ctx, nil, testContainer, spec) assert.Equal(t, test.expectError, err != nil) if err != nil { diff --git a/pkg/cri/server/container_create_linux_test.go b/pkg/cri/server/container_create_linux_test.go index 483d728f1..e4d7d0931 100644 --- a/pkg/cri/server/container_create_linux_test.go +++ b/pkg/cri/server/container_create_linux_test.go @@ -1548,6 +1548,8 @@ func TestCDIInjections(t *testing.T) { containerConfig, sandboxConfig, imageConfig, specCheck := getCreateContainerTestData() ociRuntime := config.Runtime{} c := newTestCRIService() + testContainer := &containers.Container{ID: "64ddfe361f0099f8d59075398feeb3dcb3863b6851df7b946744755066c03e9d"} + ctx := context.Background() for _, test := range []struct { description string @@ -1653,7 +1655,7 @@ containerEdits: require.NoError(t, err) injectFun := customopts.WithCDI(test.annotations) - err = injectFun(nil, nil, nil, spec) + err = injectFun(ctx, nil, testContainer, spec) assert.Equal(t, test.expectError, err != nil) if err != nil { From 347397cf2fc320cb3d96088da64f7abd56cc5e4b Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Wed, 12 Oct 2022 13:54:12 +0300 Subject: [PATCH 4/4] update go.mod and go.sum Signed-off-by: Ed Bartosh --- integration/client/go.mod | 12 ------------ integration/client/go.sum | 11 ----------- 2 files changed, 23 deletions(-) diff --git a/integration/client/go.mod b/integration/client/go.mod index 64837e082..74b33aeed 100644 --- a/integration/client/go.mod +++ b/integration/client/go.mod @@ -24,9 +24,7 @@ require github.com/AdaLogics/go-fuzz-headers v0.0.0-20220903154154-e8044f6e4c72 require ( github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20220912195655-e1f97a00006b // indirect github.com/Microsoft/go-winio v0.6.0 // indirect - github.com/blang/semver v3.5.1+incompatible // indirect github.com/cilium/ebpf v0.9.1 // indirect - github.com/container-orchestrated-devices/container-device-interface v0.5.1 // indirect github.com/containerd/console v1.0.3 // indirect github.com/containerd/continuity v0.3.0 // indirect github.com/containerd/fifo v1.0.0 // indirect @@ -35,14 +33,11 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-units v0.4.0 // indirect - github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/godbus/dbus/v5 v5.0.6 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/go-cmp v0.5.8 // indirect github.com/google/uuid v1.3.0 // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/klauspost/compress v1.15.9 // indirect github.com/moby/locker v1.0.1 // indirect @@ -50,15 +45,10 @@ require ( github.com/moby/sys/sequential v0.0.0-20220829095930-b22ba8a69b30 // indirect github.com/moby/sys/signal v0.7.0 // indirect github.com/opencontainers/runc v1.1.4 // indirect - github.com/opencontainers/runtime-tools v0.0.0-20190417131837-cd1349b7c47e // indirect github.com/opencontainers/selinux v1.10.2 // indirect github.com/pelletier/go-toml v1.9.3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect - github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect - github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect - github.com/xeipuuv/gojsonschema v1.2.0 // indirect go.opencensus.io v0.23.0 // indirect golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect golang.org/x/net v0.0.0-20220906165146-f3363e06e74c // indirect @@ -68,9 +58,7 @@ require ( google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 // indirect google.golang.org/grpc v1.47.0 // indirect google.golang.org/protobuf v1.28.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect ) // use the containerd module from this repository instead of downloading diff --git a/integration/client/go.sum b/integration/client/go.sum index e51ed3d60..75c957c26 100644 --- a/integration/client/go.sum +++ b/integration/client/go.sum @@ -97,7 +97,6 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= @@ -133,7 +132,6 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= -github.com/container-orchestrated-devices/container-device-interface v0.5.1 h1:nXIUTrlEgGcA/n2geY3J7yyaGGhkocSlMkKPS4Qp4c0= github.com/container-orchestrated-devices/container-device-interface v0.5.1/go.mod h1:ZToWfSyUH5l9Rk7/bjkUUkNLz4b1mE+CVUVafuikDPY= github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= @@ -241,7 +239,6 @@ github.com/frankban/quicktest v1.14.0 h1:+cqqvzZV87b4adx/5ayVOaYZ2CrvM4ejQvUdBzP github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= @@ -387,13 +384,11 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4Zs github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= @@ -543,7 +538,6 @@ github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.m github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/runtime-tools v0.0.0-20190417131837-cd1349b7c47e h1:2Tg49TNXSTIsX8AAtmo1aQ1IbfnoUFzkOp7p2iWygtc= github.com/opencontainers/runtime-tools v0.0.0-20190417131837-cd1349b7c47e/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= @@ -657,7 +651,6 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/tchap/go-patricia/v2 v2.3.1/go.mod h1:VZRHKAb53DLaG+nA9EaYYiaEx6YztwDlLElMsnSHD4k= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -672,11 +665,8 @@ github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5/go.mod h1:tw github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= @@ -1257,5 +1247,4 @@ sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZa sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=