Skip to content

Commit fff258f

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

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
@@ -281,35 +281,31 @@ func (c *Cache) highestPrioritySpecDir() (string, int) {
281281
// WriteSpec writes a Spec file with the given content into the highest
282282
// priority Spec directory. If name has a "json" or "yaml" extension it
283283
// choses the encoding. Otherwise the default YAML encoding is used.
284+
//
285+
// Deprecated: use producer.NewSpecWriter instead.
284286
func (c *Cache) WriteSpec(raw *cdi.Spec, name string) error {
285287
var (
286288
specDir string
287-
prio int
288-
spec *Spec
289289
err error
290290
)
291-
specDir, prio = c.highestPrioritySpecDir()
291+
specDir, _ = c.highestPrioritySpecDir()
292292
if specDir == "" {
293293
return errors.New("no Spec directories to write to")
294294
}
295295

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

305302
p, err := producer.NewSpecWriter(
306-
producer.WithSpecFormat(producer.SpecFormatYAML),
307303
producer.WithOverwrite(true),
308304
)
309305
if err != nil {
310306
return err
311307
}
312-
if _, err := p.Save(spec.Spec, spec.path); err != nil {
308+
if _, err := p.Save(raw, path); err != nil {
313309
return err
314310
}
315311
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
)
@@ -157,22 +157,11 @@ func MinimumRequiredVersion(spec *cdi.Spec) (string, error) {
157157

158158
// Validate the Spec.
159159
func (s *Spec) validate() (map[string]*Device, error) {
160-
if err := cdi.ValidateVersion(s.Spec); err != nil {
161-
return nil, err
162-
}
163-
if err := parser.ValidateVendorName(s.vendor); err != nil {
164-
return nil, err
165-
}
166-
if err := parser.ValidateClassName(s.class); err != nil {
167-
return nil, err
168-
}
169-
if err := validation.ValidateSpecAnnotations(s.Kind, s.Annotations); err != nil {
170-
return nil, err
171-
}
172-
if err := s.edits().Validate(); err != nil {
160+
if err := producer.DefaultValidator.Validate(s.Spec); err != nil {
173161
return nil, err
174162
}
175163

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

0 commit comments

Comments
 (0)