You've already forked watchtower
							
							
				mirror of
				https://github.com/containrrr/watchtower.git
				synced 2025-10-31 00:17:44 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package filters
 | |
| 
 | |
| import t "github.com/containrrr/watchtower/pkg/types"
 | |
| 
 | |
| // WatchtowerContainersFilter filters only watchtower containers
 | |
| func WatchtowerContainersFilter(c t.FilterableContainer) bool { return c.IsWatchtower() }
 | |
| 
 | |
| // NoFilter will not filter out any containers
 | |
| func NoFilter(t.FilterableContainer) bool { return true }
 | |
| 
 | |
| // FilterByNames returns all containers that match the specified name
 | |
| func FilterByNames(names []string, baseFilter t.Filter) t.Filter {
 | |
| 	if len(names) == 0 {
 | |
| 		return baseFilter
 | |
| 	}
 | |
| 
 | |
| 	return func(c t.FilterableContainer) bool {
 | |
| 		for _, name := range names {
 | |
| 			if (name == c.Name()) || (name == c.Name()[1:]) {
 | |
| 				return baseFilter(c)
 | |
| 			}
 | |
| 		}
 | |
| 		return false
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // FilterByEnableLabel returns all containers that have the enabled label set
 | |
| func FilterByEnableLabel(baseFilter t.Filter) t.Filter {
 | |
| 	return func(c t.FilterableContainer) bool {
 | |
| 		// If label filtering is enabled, containers should only be considered
 | |
| 		// if the label is specifically set.
 | |
| 		_, ok := c.Enabled()
 | |
| 		if !ok {
 | |
| 			return false
 | |
| 		}
 | |
| 
 | |
| 		return baseFilter(c)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // FilterByDisabledLabel returns all containers that have the enabled label set to disable
 | |
| func FilterByDisabledLabel(baseFilter t.Filter) t.Filter {
 | |
| 	return func(c t.FilterableContainer) bool {
 | |
| 		enabledLabel, ok := c.Enabled()
 | |
| 		if ok && !enabledLabel {
 | |
| 			// If the label has been set and it demands a disable
 | |
| 			return false
 | |
| 		}
 | |
| 
 | |
| 		return baseFilter(c)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // FilterByScope returns all containers that belongs to a specific scope
 | |
| func FilterByScope(scope string, baseFilter t.Filter) t.Filter {
 | |
| 	if scope == "" {
 | |
| 		return baseFilter
 | |
| 	}
 | |
| 
 | |
| 	return func(c t.FilterableContainer) bool {
 | |
| 		containerScope, ok := c.Scope()
 | |
| 		if ok && containerScope == scope {
 | |
| 			return baseFilter(c)
 | |
| 		}
 | |
| 
 | |
| 		return false
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // BuildFilter creates the needed filter of containers
 | |
| func BuildFilter(names []string, enableLabel bool, scope string) t.Filter {
 | |
| 	filter := NoFilter
 | |
| 	filter = FilterByNames(names, filter)
 | |
| 	if enableLabel {
 | |
| 		// If label filtering is enabled, containers should only be considered
 | |
| 		// if the label is specifically set.
 | |
| 		filter = FilterByEnableLabel(filter)
 | |
| 	}
 | |
| 	if scope != "" {
 | |
| 		// If a scope has been defined, containers should only be considered
 | |
| 		// if the scope is specifically set.
 | |
| 		filter = FilterByScope(scope, filter)
 | |
| 	}
 | |
| 	filter = FilterByDisabledLabel(filter)
 | |
| 	return filter
 | |
| }
 |