Add ability to configure CDI kind with 'nvidia-ctk cdi generate'

Signed-off-by: Christopher Desiniotis <cdesiniotis@nvidia.com>
This commit is contained in:
Christopher Desiniotis 2023-03-27 23:12:00 -07:00
parent 92d82ceaee
commit 7f5c9abc1e

View File

@ -49,6 +49,9 @@ type config struct {
targetDriverRoot string targetDriverRoot string
nvidiaCTKPath string nvidiaCTKPath string
mode string mode string
kind string
vendor string
class string
} }
// NewCommand constructs a generate-cdi command with the specified logger // NewCommand constructs a generate-cdi command with the specified logger
@ -116,6 +119,13 @@ func (m command) build() *cli.Command {
Value: "", Value: "",
Destination: &cfg.targetDriverRoot, Destination: &cfg.targetDriverRoot,
}, },
&cli.StringFlag{
Name: "kind",
Aliases: []string{"cdi-kind"},
Usage: "the vendor string to use for the generated CDI specification.",
Value: "nvidia.com/gpu",
Destination: &cfg.kind,
},
} }
return &c return &c
@ -161,6 +171,16 @@ func (m command) validateFlags(c *cli.Context, cfg *config) error {
} }
} }
vendor, class := cdi.ParseQualifier(cfg.kind)
if err := cdi.ValidateVendorName(vendor); err != nil {
return fmt.Errorf("invalid CDI vendor name: %v", err)
}
if err := cdi.ValidateClassName(class); err != nil {
return fmt.Errorf("invalid CDI class name: %v", err)
}
cfg.vendor = vendor
cfg.class = class
return nil return nil
} }
@ -236,8 +256,8 @@ func (m command) generateSpec(cfg *config) (spec.Interface, error) {
} }
spec, err := spec.New( spec, err := spec.New(
spec.WithVendor("nvidia.com"), spec.WithVendor(cfg.vendor),
spec.WithClass("gpu"), spec.WithClass(cfg.class),
spec.WithDeviceSpecs(deviceSpecs), spec.WithDeviceSpecs(deviceSpecs),
spec.WithEdits(*commonEdits.ContainerEdits), spec.WithEdits(*commonEdits.ContainerEdits),
spec.WithFormat(cfg.format), spec.WithFormat(cfg.format),