...
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
11
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
32
33
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
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
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