...

Source file src/github.com/linkerd/linkerd2/pkg/util/parsing.go

Documentation: github.com/linkerd/linkerd2/pkg/util

     1  package util
     2  
     3  import (
     4  	"strings"
     5  
     6  	log "github.com/sirupsen/logrus"
     7  	corev1 "k8s.io/api/core/v1"
     8  )
     9  
    10  // ParsePorts parses the given ports string into a map of ports;
    11  // this includes converting port ranges into separate ports
    12  func ParsePorts(portsString string) map[uint32]struct{} {
    13  	opaquePorts := make(map[uint32]struct{})
    14  	if portsString != "" {
    15  		portRanges := GetPortRanges(portsString)
    16  		for _, pr := range portRanges {
    17  			portsRange, err := ParsePortRange(pr)
    18  			if err != nil {
    19  				log.Warnf("Invalid port range [%v]: %s", pr, err)
    20  				continue
    21  			}
    22  			for i := portsRange.LowerBound; i <= portsRange.UpperBound; i++ {
    23  				opaquePorts[uint32(i)] = struct{}{}
    24  			}
    25  
    26  		}
    27  	}
    28  	return opaquePorts
    29  }
    30  
    31  // ParseContainerOpaquePorts parses the opaque ports annotation into a list of
    32  // port ranges, including validating port ranges and converting named ports
    33  // into their port number equivalents.
    34  func ParseContainerOpaquePorts(override string, namedPorts map[string]int32) []PortRange {
    35  	portRanges := GetPortRanges(override)
    36  	var values []PortRange
    37  	for _, pr := range portRanges {
    38  		port, named := namedPorts[pr]
    39  		if named {
    40  			values = append(values, PortRange{UpperBound: int(port), LowerBound: int(port)})
    41  		} else {
    42  			pr, err := ParsePortRange(pr)
    43  			if err != nil {
    44  				log.Warnf("Invalid port range [%v]: %s", pr, err)
    45  				continue
    46  			}
    47  			values = append(values, pr)
    48  		}
    49  	}
    50  	return values
    51  }
    52  
    53  func GetNamedPorts(containers []corev1.Container) map[string]int32 {
    54  	namedPorts := make(map[string]int32)
    55  	for _, container := range containers {
    56  		for _, p := range container.Ports {
    57  			if p.Name != "" {
    58  				namedPorts[p.Name] = p.ContainerPort
    59  			}
    60  		}
    61  	}
    62  
    63  	return namedPorts
    64  }
    65  
    66  // GetPortRanges gets port ranges from an override annotation
    67  func GetPortRanges(override string) []string {
    68  	var ports []string
    69  	for _, port := range strings.Split(strings.TrimSuffix(override, ","), ",") {
    70  		ports = append(ports, strings.TrimSpace(port))
    71  	}
    72  
    73  	return ports
    74  }
    75  
    76  // ContainsString checks if a string collections contains the given string.
    77  func ContainsString(str string, collection []string) bool {
    78  	for _, e := range collection {
    79  		if str == e {
    80  			return true
    81  		}
    82  	}
    83  	return false
    84  }
    85  

View as plain text