diff --git a/go.mod b/go.mod index ebe8485d..a83cccfb 100644 --- a/go.mod +++ b/go.mod @@ -13,8 +13,8 @@ require ( github.com/urfave/cli/v2 v2.27.2 golang.org/x/mod v0.18.0 golang.org/x/sys v0.21.0 - tags.cncf.io/container-device-interface v0.7.2 - tags.cncf.io/container-device-interface/specs-go v0.7.0 + tags.cncf.io/container-device-interface v0.8.0 + tags.cncf.io/container-device-interface/specs-go v0.8.0 ) require ( diff --git a/go.sum b/go.sum index 0cf58698..7fa7ab49 100644 --- a/go.sum +++ b/go.sum @@ -86,7 +86,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= -tags.cncf.io/container-device-interface v0.7.2 h1:MLqGnWfOr1wB7m08ieI4YJ3IoLKKozEnnNYBtacDPQU= -tags.cncf.io/container-device-interface v0.7.2/go.mod h1:Xb1PvXv2BhfNb3tla4r9JL129ck1Lxv9KuU6eVOfKto= -tags.cncf.io/container-device-interface/specs-go v0.7.0 h1:w/maMGVeLP6TIQJVYT5pbqTi8SCw/iHZ+n4ignuGHqg= -tags.cncf.io/container-device-interface/specs-go v0.7.0/go.mod h1:hMAwAbMZyBLdmYqWgYcKH0F/yctNpV3P35f+/088A80= +tags.cncf.io/container-device-interface v0.8.0 h1:8bCFo/g9WODjWx3m6EYl3GfUG31eKJbaggyBDxEldRc= +tags.cncf.io/container-device-interface v0.8.0/go.mod h1:Apb7N4VdILW0EVdEMRYXIDVRZfNJZ+kmEUss2kRRQ6Y= +tags.cncf.io/container-device-interface/specs-go v0.8.0 h1:QYGFzGxvYK/ZLMrjhvY0RjpUavIn4KcmRmVP/JjdBTA= +tags.cncf.io/container-device-interface/specs-go v0.8.0/go.mod h1:BhJIkjjPh4qpys+qm4DAYtUyryaTDg9zris+AczXyws= diff --git a/vendor/modules.txt b/vendor/modules.txt index d4b21741..0fe4e32d 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -83,12 +83,12 @@ gopkg.in/yaml.v3 # sigs.k8s.io/yaml v1.3.0 ## explicit; go 1.12 sigs.k8s.io/yaml -# tags.cncf.io/container-device-interface v0.7.2 +# tags.cncf.io/container-device-interface v0.8.0 ## explicit; go 1.20 tags.cncf.io/container-device-interface/internal/validation tags.cncf.io/container-device-interface/internal/validation/k8s tags.cncf.io/container-device-interface/pkg/cdi tags.cncf.io/container-device-interface/pkg/parser -# tags.cncf.io/container-device-interface/specs-go v0.7.0 +# tags.cncf.io/container-device-interface/specs-go v0.8.0 ## explicit; go 1.19 tags.cncf.io/container-device-interface/specs-go diff --git a/vendor/tags.cncf.io/container-device-interface/pkg/cdi/container-edits.go b/vendor/tags.cncf.io/container-device-interface/pkg/cdi/container-edits.go index e5b50db1..70791666 100644 --- a/vendor/tags.cncf.io/container-device-interface/pkg/cdi/container-edits.go +++ b/vendor/tags.cncf.io/container-device-interface/pkg/cdi/container-edits.go @@ -89,7 +89,7 @@ func (e *ContainerEdits) Apply(spec *oci.Spec) error { if err != nil { return err } - dev := d.ToOCI() + dev := dn.toOCI() if dev.UID == nil && spec.Process != nil { if uid := spec.Process.User.UID; uid > 0 { dev.UID = &uid @@ -116,29 +116,30 @@ func (e *ContainerEdits) Apply(spec *oci.Spec) error { if len(e.Mounts) > 0 { for _, m := range e.Mounts { specgen.RemoveMount(m.ContainerPath) - specgen.AddMount(m.ToOCI()) + specgen.AddMount((&Mount{m}).toOCI()) } sortMounts(&specgen) } for _, h := range e.Hooks { + ociHook := (&Hook{h}).toOCI() switch h.HookName { case PrestartHook: - specgen.AddPreStartHook(h.ToOCI()) + specgen.AddPreStartHook(ociHook) case PoststartHook: - specgen.AddPostStartHook(h.ToOCI()) + specgen.AddPostStartHook(ociHook) case PoststopHook: - specgen.AddPostStopHook(h.ToOCI()) + specgen.AddPostStopHook(ociHook) // TODO: Maybe runtime-tools/generate should be updated with these... case CreateRuntimeHook: ensureOCIHooks(spec) - spec.Hooks.CreateRuntime = append(spec.Hooks.CreateRuntime, h.ToOCI()) + spec.Hooks.CreateRuntime = append(spec.Hooks.CreateRuntime, ociHook) case CreateContainerHook: ensureOCIHooks(spec) - spec.Hooks.CreateContainer = append(spec.Hooks.CreateContainer, h.ToOCI()) + spec.Hooks.CreateContainer = append(spec.Hooks.CreateContainer, ociHook) case StartContainerHook: ensureOCIHooks(spec) - spec.Hooks.StartContainer = append(spec.Hooks.StartContainer, h.ToOCI()) + spec.Hooks.StartContainer = append(spec.Hooks.StartContainer, ociHook) default: return fmt.Errorf("unknown hook name %q", h.HookName) } @@ -148,7 +149,7 @@ func (e *ContainerEdits) Apply(spec *oci.Spec) error { // The specgen is missing functionality to set all parameters so we // just piggy-back on it to initialize all structs and the copy over. specgen.SetLinuxIntelRdtClosID(e.IntelRdt.ClosID) - spec.Linux.IntelRdt = e.IntelRdt.ToOCI() + spec.Linux.IntelRdt = (&IntelRdt{e.IntelRdt}).toOCI() } for _, additionalGID := range e.AdditionalGIDs { @@ -186,7 +187,7 @@ func (e *ContainerEdits) Validate() error { } } if e.IntelRdt != nil { - if err := ValidateIntelRdt(e.IntelRdt); err != nil { + if err := (&IntelRdt{e.IntelRdt}).Validate(); err != nil { return err } } @@ -321,8 +322,21 @@ func (m *Mount) Validate() error { return nil } +// IntelRdt is a CDI IntelRdt wrapper. +// This is used for validation and conversion to OCI specifications. +type IntelRdt struct { + *specs.IntelRdt +} + // ValidateIntelRdt validates the IntelRdt configuration. +// +// Deprecated: ValidateIntelRdt is deprecated use IntelRdt.Validate() instead. func ValidateIntelRdt(i *specs.IntelRdt) error { + return (&IntelRdt{i}).Validate() +} + +// Validate validates the IntelRdt configuration. +func (i *IntelRdt) Validate() error { // ClosID must be a valid Linux filename if len(i.ClosID) >= 4096 || i.ClosID == "." || i.ClosID == ".." || strings.ContainsAny(i.ClosID, "/\n") { return errors.New("invalid ClosID") diff --git a/vendor/tags.cncf.io/container-device-interface/pkg/cdi/oci.go b/vendor/tags.cncf.io/container-device-interface/pkg/cdi/oci.go new file mode 100644 index 00000000..4d62c41f --- /dev/null +++ b/vendor/tags.cncf.io/container-device-interface/pkg/cdi/oci.go @@ -0,0 +1,65 @@ +/* +Copyright © 2021 The CDI Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cdi + +import ( + spec "github.com/opencontainers/runtime-spec/specs-go" +) + +// toOCI returns the opencontainers runtime Spec Hook for this Hook. +func (h *Hook) toOCI() spec.Hook { + return spec.Hook{ + Path: h.Path, + Args: h.Args, + Env: h.Env, + Timeout: h.Timeout, + } +} + +// toOCI returns the opencontainers runtime Spec Mount for this Mount. +func (m *Mount) toOCI() spec.Mount { + return spec.Mount{ + Source: m.HostPath, + Destination: m.ContainerPath, + Options: m.Options, + Type: m.Type, + } +} + +// toOCI returns the opencontainers runtime Spec LinuxDevice for this DeviceNode. +func (d *DeviceNode) toOCI() spec.LinuxDevice { + return spec.LinuxDevice{ + Path: d.Path, + Type: d.Type, + Major: d.Major, + Minor: d.Minor, + FileMode: d.FileMode, + UID: d.UID, + GID: d.GID, + } +} + +// toOCI returns the opencontainers runtime Spec LinuxIntelRdt for this IntelRdt config. +func (i *IntelRdt) toOCI() *spec.LinuxIntelRdt { + return &spec.LinuxIntelRdt{ + ClosID: i.ClosID, + L3CacheSchema: i.L3CacheSchema, + MemBwSchema: i.MemBwSchema, + EnableCMT: i.EnableCMT, + EnableMBM: i.EnableMBM, + } +} diff --git a/vendor/tags.cncf.io/container-device-interface/pkg/cdi/version.go b/vendor/tags.cncf.io/container-device-interface/pkg/cdi/version.go index e2266944..9ca91267 100644 --- a/vendor/tags.cncf.io/container-device-interface/pkg/cdi/version.go +++ b/vendor/tags.cncf.io/container-device-interface/pkg/cdi/version.go @@ -40,6 +40,7 @@ const ( v050 version = "v0.5.0" v060 version = "v0.6.0" v070 version = "v0.7.0" + v080 version = "v0.8.0" // vEarliest is the earliest supported version of the CDI specification vEarliest version = v030 @@ -56,6 +57,7 @@ var validSpecVersions = requiredVersionMap{ v050: requiresV050, v060: requiresV060, v070: requiresV070, + v080: requiresV080, } // MinimumRequiredVersion determines the minimum spec version for the input spec. @@ -120,6 +122,13 @@ func (r requiredVersionMap) requiredVersion(spec *cdi.Spec) version { return minVersion } +// requiresV080 returns true if the spec uses v0.8.0 features. +// Since the v0.8.0 spec bump was due to the removed .ToOCI functions on the +// spec types, there are explicit spec changes. +func requiresV080(_ *cdi.Spec) bool { + return false +} + // requiresV070 returns true if the spec uses v0.7.0 features func requiresV070(spec *cdi.Spec) bool { if spec.ContainerEdits.IntelRdt != nil { diff --git a/vendor/tags.cncf.io/container-device-interface/specs-go/config.go b/vendor/tags.cncf.io/container-device-interface/specs-go/config.go index a311ffa1..d6d6302f 100644 --- a/vendor/tags.cncf.io/container-device-interface/specs-go/config.go +++ b/vendor/tags.cncf.io/container-device-interface/specs-go/config.go @@ -3,7 +3,7 @@ package specs import "os" // CurrentVersion is the current version of the Spec. -const CurrentVersion = "0.7.0" +const CurrentVersion = "0.8.0" // Spec is the base configuration for CDI type Spec struct { diff --git a/vendor/tags.cncf.io/container-device-interface/specs-go/oci.go b/vendor/tags.cncf.io/container-device-interface/specs-go/oci.go index 1b4d576b..ce485cb2 100644 --- a/vendor/tags.cncf.io/container-device-interface/specs-go/oci.go +++ b/vendor/tags.cncf.io/container-device-interface/specs-go/oci.go @@ -1,49 +1,56 @@ +/* +Copyright © 2021 The CDI Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + package specs -import ( - spec "github.com/opencontainers/runtime-spec/specs-go" -) +import "errors" + +// errDeprecated is returned for the ToOCI functions below. +// This should provide better guidance for user when migrating from the API +// below to the APIs provided in the cdi package. +var errDeprecated = errors.New("deprecated; Use cdi package functions instead") // ToOCI returns the opencontainers runtime Spec Hook for this Hook. -func (h *Hook) ToOCI() spec.Hook { - return spec.Hook{ - Path: h.Path, - Args: h.Args, - Env: h.Env, - Timeout: h.Timeout, - } +// +// Deprecated: This function has been moved to tags.cncf.io/container-device-interface/pkg/cdi.Hook.toOCI +// and made private. +func (h *Hook) ToOCI() error { + return errDeprecated } // ToOCI returns the opencontainers runtime Spec Mount for this Mount. -func (m *Mount) ToOCI() spec.Mount { - return spec.Mount{ - Source: m.HostPath, - Destination: m.ContainerPath, - Options: m.Options, - Type: m.Type, - } +// +// Deprecated: This function has been moved to tags.cncf.io/container-device-interface/pkg/cdi.Mount.toOCI +// and made private. +func (m *Mount) ToOCI() error { + return errDeprecated } // ToOCI returns the opencontainers runtime Spec LinuxDevice for this DeviceNode. -func (d *DeviceNode) ToOCI() spec.LinuxDevice { - return spec.LinuxDevice{ - Path: d.Path, - Type: d.Type, - Major: d.Major, - Minor: d.Minor, - FileMode: d.FileMode, - UID: d.UID, - GID: d.GID, - } +// +// Deprecated: This function has been moved to tags.cncf.io/container-device-interface/pkg/cdi.DeviceNode.toOCI +// and made private. +func (d *DeviceNode) ToOCI() error { + return errDeprecated } // ToOCI returns the opencontainers runtime Spec LinuxIntelRdt for this IntelRdt config. -func (i *IntelRdt) ToOCI() *spec.LinuxIntelRdt { - return &spec.LinuxIntelRdt{ - ClosID: i.ClosID, - L3CacheSchema: i.L3CacheSchema, - MemBwSchema: i.MemBwSchema, - EnableCMT: i.EnableCMT, - EnableMBM: i.EnableMBM, - } +// +// Deprecated: This function has been moved to tags.cncf.io/container-device-interface/pkg/cdi.IntelRdt.toOCI +// and made private. +func (i *IntelRdt) ToOCI() error { + return errDeprecated }