mirror of
				https://github.com/NVIDIA/nvidia-container-toolkit
				synced 2025-06-26 18:18:24 +00:00 
			
		
		
		
	Add a Filter interface to the discover package
This change adds support for filtering entities by specifying a filter. This can be used, for example, to check whether a mount or device has a particular property and removing it from the set of discovered entities if it does not. Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
		
							parent
							
								
									624b9d8ee6
								
							
						
					
					
						commit
						bc8a73dde4
					
				
							
								
								
									
										53
									
								
								internal/discover/filter.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								internal/discover/filter.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | |||||||
|  | /** | ||||||
|  | # Copyright (c) 2022, NVIDIA CORPORATION.  All rights reserved. | ||||||
|  | # | ||||||
|  | # 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 discover | ||||||
|  | 
 | ||||||
|  | import "github.com/sirupsen/logrus" | ||||||
|  | 
 | ||||||
|  | // Filter defines an interface for filtering discovered entities
 | ||||||
|  | type Filter interface { | ||||||
|  | 	DeviceIsSelected(device Device) bool | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // filtered represents a filtered discoverer
 | ||||||
|  | type filtered struct { | ||||||
|  | 	Discover | ||||||
|  | 	logger *logrus.Logger | ||||||
|  | 	filter Filter | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Devices returns a filtered list of devices based on the specified filter.
 | ||||||
|  | func (d filtered) Devices() ([]Device, error) { | ||||||
|  | 	devices, err := d.Discover.Devices() | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if d.filter == nil { | ||||||
|  | 		return devices, nil | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	var selected []Device | ||||||
|  | 	for _, device := range devices { | ||||||
|  | 		if d.filter.DeviceIsSelected(device) { | ||||||
|  | 			selected = append(selected, device) | ||||||
|  | 		} | ||||||
|  | 		d.logger.Debugf("skipping device %v", device) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return selected, nil | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user