summaryrefslogtreecommitdiff
path: root/vendor/github.com/container-orchestrated-devices/container-device-interface/pkg/cdi/device.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/container-orchestrated-devices/container-device-interface/pkg/cdi/device.go')
-rw-r--r--vendor/github.com/container-orchestrated-devices/container-device-interface/pkg/cdi/device.go74
1 files changed, 74 insertions, 0 deletions
diff --git a/vendor/github.com/container-orchestrated-devices/container-device-interface/pkg/cdi/device.go b/vendor/github.com/container-orchestrated-devices/container-device-interface/pkg/cdi/device.go
new file mode 100644
index 000000000..84b71429c
--- /dev/null
+++ b/vendor/github.com/container-orchestrated-devices/container-device-interface/pkg/cdi/device.go
@@ -0,0 +1,74 @@
+/*
+ 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 (
+ cdi "github.com/container-orchestrated-devices/container-device-interface/specs-go"
+ oci "github.com/opencontainers/runtime-spec/specs-go"
+ "github.com/pkg/errors"
+)
+
+// Device represents a CDI device of a Spec.
+type Device struct {
+ *cdi.Device
+ spec *Spec
+}
+
+// Create a new Device, associate it with the given Spec.
+func newDevice(spec *Spec, d cdi.Device) (*Device, error) {
+ dev := &Device{
+ Device: &d,
+ spec: spec,
+ }
+
+ if err := dev.validate(); err != nil {
+ return nil, err
+ }
+
+ return dev, nil
+}
+
+// GetSpec returns the Spec this device is defined in.
+func (d *Device) GetSpec() *Spec {
+ return d.spec
+}
+
+// GetQualifiedName returns the qualified name for this device.
+func (d *Device) GetQualifiedName() string {
+ return QualifiedName(d.spec.GetVendor(), d.spec.GetClass(), d.Name)
+}
+
+// ApplyEdits applies the device-speific container edits to an OCI Spec.
+func (d *Device) ApplyEdits(ociSpec *oci.Spec) error {
+ e := ContainerEdits{&d.ContainerEdits}
+ return e.Apply(ociSpec)
+}
+
+// Validate the device.
+func (d *Device) validate() error {
+ if err := ValidateDeviceName(d.Name); err != nil {
+ return err
+ }
+ edits := ContainerEdits{&d.ContainerEdits}
+ if edits.isEmpty() {
+ return errors.Errorf("invalid device, empty device edits")
+ }
+ if err := edits.Validate(); err != nil {
+ return errors.Wrapf(err, "invalid device %q", d.Name)
+ }
+ return nil
+}