Skip to content

Commit 08fb223

Browse files
committed
Use producer validation in cache
Signed-off-by: Evan Lezar <[email protected]>
1 parent 537b984 commit 08fb223

File tree

3 files changed

+17
-45
lines changed

3 files changed

+17
-45
lines changed

pkg/cdi/cache.go

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -282,35 +282,31 @@ func (c *Cache) highestPrioritySpecDir() (string, int) {
282282
// WriteSpec writes a Spec file with the given content into the highest
283283
// priority Spec directory. If name has a "json" or "yaml" extension it
284284
// choses the encoding. Otherwise the default YAML encoding is used.
285+
//
286+
// Deprecated: use producer.NewSpecWriter instead.
285287
func (c *Cache) WriteSpec(raw *cdi.Spec, name string) error {
286288
var (
287289
specDir string
288-
prio int
289-
spec *Spec
290290
err error
291291
)
292-
specDir, prio = c.highestPrioritySpecDir()
292+
specDir, _ = c.highestPrioritySpecDir()
293293
if specDir == "" {
294294
return errors.New("no Spec directories to write to")
295295
}
296296

297297
path := filepath.Join(specDir, name)
298-
299-
// We call newSpec to perform the required validation.
300-
// This also sets the extension of the path.
301-
spec, err = newSpec(raw, path, prio)
302-
if err != nil {
303-
return err
298+
if ext := filepath.Ext(path); ext != ".yaml" && ext != ".json" {
299+
path += defaultSpecExt
304300
}
301+
path = filepath.Clean(path)
305302

306303
p, err := producer.NewSpecWriter(
307-
producer.WithSpecFormat(producer.SpecFormatYAML),
308304
producer.WithOverwrite(true),
309305
)
310306
if err != nil {
311307
return err
312308
}
313-
if _, err := p.Save(spec.Spec, spec.path); err != nil {
309+
if _, err := p.Save(raw, path); err != nil {
314310
return err
315311
}
316312
return nil

pkg/cdi/device.go

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,8 @@
1717
package cdi
1818

1919
import (
20-
"fmt"
21-
2220
oci "github.com/opencontainers/runtime-spec/specs-go"
23-
"tags.cncf.io/container-device-interface/internal/validation"
24-
"tags.cncf.io/container-device-interface/pkg/parser"
21+
"tags.cncf.io/container-device-interface/api/producer"
2522
cdi "tags.cncf.io/container-device-interface/specs-go"
2623
)
2724

@@ -52,6 +49,9 @@ func (d *Device) GetSpec() *Spec {
5249

5350
// GetQualifiedName returns the qualified name for this device.
5451
func (d *Device) GetQualifiedName() string {
52+
if d.spec == nil {
53+
return d.Name
54+
}
5555
return d.spec.Kind + "=" + d.Name
5656
}
5757

@@ -67,22 +67,9 @@ func (d *Device) edits() *ContainerEdits {
6767

6868
// Validate the device.
6969
func (d *Device) validate() error {
70-
if err := parser.ValidateDeviceName(d.Name); err != nil {
71-
return err
72-
}
73-
name := d.Name
70+
var kind string
7471
if d.spec != nil {
75-
name = d.GetQualifiedName()
76-
}
77-
if err := validation.ValidateSpecAnnotations(name, d.Annotations); err != nil {
78-
return err
79-
}
80-
edits := d.edits()
81-
if edits.isEmpty() {
82-
return fmt.Errorf("invalid device, empty device edits")
83-
}
84-
if err := edits.Validate(); err != nil {
85-
return fmt.Errorf("invalid device %q: %w", d.Name, err)
72+
kind = d.spec.Kind
8673
}
87-
return nil
74+
return producer.DefaultValidator.ValidateDevice(d.Device, kind)
8875
}

pkg/cdi/spec.go

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import (
2626
oci "github.com/opencontainers/runtime-spec/specs-go"
2727
"sigs.k8s.io/yaml"
2828

29-
"tags.cncf.io/container-device-interface/internal/validation"
29+
"tags.cncf.io/container-device-interface/api/producer"
3030
"tags.cncf.io/container-device-interface/pkg/parser"
3131
cdi "tags.cncf.io/container-device-interface/specs-go"
3232
)
@@ -161,22 +161,11 @@ func MinimumRequiredVersion(spec *cdi.Spec) (string, error) {
161161

162162
// Validate the Spec.
163163
func (s *Spec) validate() (map[string]*Device, error) {
164-
if err := cdi.ValidateVersion(s.Spec); err != nil {
165-
return nil, err
166-
}
167-
if err := parser.ValidateVendorName(s.vendor); err != nil {
168-
return nil, err
169-
}
170-
if err := parser.ValidateClassName(s.class); err != nil {
171-
return nil, err
172-
}
173-
if err := validation.ValidateSpecAnnotations(s.Kind, s.Annotations); err != nil {
174-
return nil, err
175-
}
176-
if err := s.edits().Validate(); err != nil {
164+
if err := producer.DefaultValidator.Validate(s.Spec); err != nil {
177165
return nil, err
178166
}
179167

168+
// We construct a list of devices associated with the spec.
180169
devices := make(map[string]*Device)
181170
for _, d := range s.Devices {
182171
dev, err := newDevice(s, d)

0 commit comments

Comments
 (0)