Generate all device using merged transform

The nvcid api is extended to allow for merged device options to
be specified. If any options are specified, then a merged device
is generated.

Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
Evan Lezar
2023-03-17 11:47:31 +02:00
parent ba44c50f4e
commit fe37196788
5 changed files with 46 additions and 23 deletions

View File

@@ -33,8 +33,10 @@ type builder struct {
deviceSpecs []specs.Device
edits specs.ContainerEdits
format string
noSimplify bool
permissions os.FileMode
mergedDeviceOptions []transform.MergedDeviceOption
noSimplify bool
permissions os.FileMode
}
// newBuilder creates a new spec builder with the supplied options
@@ -95,6 +97,16 @@ func (o *builder) Build() (*spec, error) {
}
}
if len(o.mergedDeviceOptions) > 0 {
merge, err := transform.NewMergedDevice(o.mergedDeviceOptions...)
if err != nil {
return nil, fmt.Errorf("failed to create merged device transformer: %v", err)
}
if err := merge.Transform(raw); err != nil {
return nil, fmt.Errorf("failed to merge devices: %v", err)
}
}
s := spec{
Spec: raw,
format: o.format,
@@ -169,3 +181,10 @@ func WithPermissions(permissions os.FileMode) Option {
o.permissions = permissions
}
}
// WithMergedDeviceOptions sets the options for generating a merged device.
func WithMergedDeviceOptions(opts ...transform.MergedDeviceOption) Option {
return func(o *builder) {
o.mergedDeviceOptions = opts
}
}