mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	Refactor publish/expose filter to remove duplication
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
This commit is contained in:
		
							parent
							
								
									12485d62ee
								
							
						
					
					
						commit
						af0d9bdfe4
					
				
					 1 changed files with 23 additions and 38 deletions
				
			
		| 
						 | 
				
			
			@ -333,49 +333,13 @@ func (daemon *Daemon) foldFilter(config *types.ContainerListOptions) (*listConte
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	publishFilter := map[nat.Port]bool{}
 | 
			
		||||
	err = psFilters.WalkValues("publish", func(value string) error {
 | 
			
		||||
		if strings.Contains(value, ":") {
 | 
			
		||||
			return fmt.Errorf("filter for 'publish' should not contain ':': %v", value)
 | 
			
		||||
		}
 | 
			
		||||
		//support two formats, original format <portnum>/[<proto>] or <startport-endport>/[<proto>]
 | 
			
		||||
		proto, port := nat.SplitProtoPort(value)
 | 
			
		||||
		start, end, err := nat.ParsePortRange(port)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return fmt.Errorf("error while looking up for publish %v: %s", value, err)
 | 
			
		||||
		}
 | 
			
		||||
		for i := start; i <= end; i++ {
 | 
			
		||||
			p, err := nat.NewPort(proto, strconv.FormatUint(i, 10))
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return fmt.Errorf("error while looking up for publish %v: %s", value, err)
 | 
			
		||||
			}
 | 
			
		||||
			publishFilter[p] = true
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	})
 | 
			
		||||
	err = psFilters.WalkValues("publish", portOp("publish", publishFilter))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	exposeFilter := map[nat.Port]bool{}
 | 
			
		||||
	err = psFilters.WalkValues("expose", func(value string) error {
 | 
			
		||||
		if strings.Contains(value, ":") {
 | 
			
		||||
			return fmt.Errorf("filter for 'expose' should not contain ':': %v", value)
 | 
			
		||||
		}
 | 
			
		||||
		//support two formats, original format <portnum>/[<proto>] or <startport-endport>/[<proto>]
 | 
			
		||||
		proto, port := nat.SplitProtoPort(value)
 | 
			
		||||
		start, end, err := nat.ParsePortRange(port)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return fmt.Errorf("error while looking up for 'expose' %v: %s", value, err)
 | 
			
		||||
		}
 | 
			
		||||
		for i := start; i <= end; i++ {
 | 
			
		||||
			p, err := nat.NewPort(proto, strconv.FormatUint(i, 10))
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return fmt.Errorf("error while looking up for 'expose' %v: %s", value, err)
 | 
			
		||||
			}
 | 
			
		||||
			exposeFilter[p] = true
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	})
 | 
			
		||||
	err = psFilters.WalkValues("expose", portOp("expose", exposeFilter))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -395,6 +359,27 @@ func (daemon *Daemon) foldFilter(config *types.ContainerListOptions) (*listConte
 | 
			
		|||
		names:                daemon.nameIndex.GetAll(),
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
func portOp(key string, filter map[nat.Port]bool) func(value string) error {
 | 
			
		||||
	return func(value string) error {
 | 
			
		||||
		if strings.Contains(value, ":") {
 | 
			
		||||
			return fmt.Errorf("filter for '%s' should not contain ':': %s", key, value)
 | 
			
		||||
		}
 | 
			
		||||
		//support two formats, original format <portnum>/[<proto>] or <startport-endport>/[<proto>]
 | 
			
		||||
		proto, port := nat.SplitProtoPort(value)
 | 
			
		||||
		start, end, err := nat.ParsePortRange(port)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return fmt.Errorf("error while looking up for %s %s: %s", key, value, err)
 | 
			
		||||
		}
 | 
			
		||||
		for i := start; i <= end; i++ {
 | 
			
		||||
			p, err := nat.NewPort(proto, strconv.FormatUint(i, 10))
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return fmt.Errorf("error while looking up for %s %s: %s", key, value, err)
 | 
			
		||||
			}
 | 
			
		||||
			filter[p] = true
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// includeContainerInList decides whether a container should be included in the output or not based in the filter.
 | 
			
		||||
// It also decides if the iteration should be stopped or not.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue