mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2024-11-30 00:11:59 +00:00
63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
|
/**
|
||
|
# Copyright 2024 NVIDIA CORPORATION
|
||
|
#
|
||
|
# 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 devices
|
||
|
|
||
|
type builder struct {
|
||
|
asMap devices
|
||
|
filter func(string) bool
|
||
|
}
|
||
|
|
||
|
// New creates a new devices struct with the specified options.
|
||
|
func New(opts ...Option) Devices {
|
||
|
b := &builder{}
|
||
|
for _, opt := range opts {
|
||
|
opt(b)
|
||
|
}
|
||
|
|
||
|
if b.filter == nil {
|
||
|
b.filter = func(string) bool { return false }
|
||
|
}
|
||
|
|
||
|
devices := make(devices)
|
||
|
for k, v := range b.asMap {
|
||
|
if b.filter(string(k)) {
|
||
|
continue
|
||
|
}
|
||
|
devices[k] = v
|
||
|
}
|
||
|
return devices
|
||
|
}
|
||
|
|
||
|
type Option func(*builder)
|
||
|
|
||
|
// WithDeviceToMajor specifies an explicit device name to major number map.
|
||
|
func WithDeviceToMajor(deviceToMajor map[string]int) Option {
|
||
|
return func(b *builder) {
|
||
|
b.asMap = make(devices)
|
||
|
for name, major := range deviceToMajor {
|
||
|
b.asMap[Name(name)] = Major(major)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// WithFilter specifies a filter to exclude devices.
|
||
|
func WithFilter(filter func(string) bool) Option {
|
||
|
return func(b *builder) {
|
||
|
b.filter = filter
|
||
|
}
|
||
|
}
|