-
Notifications
You must be signed in to change notification settings - Fork 8
/
ManifestUtil.go
77 lines (72 loc) · 2.16 KB
/
ManifestUtil.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package util
import (
"github.com/devtron-labs/common-lib/utils/k8s/commonBean"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
)
func GetPorts(manifest *unstructured.Unstructured, gvk schema.GroupVersionKind) []int64 {
ports := make([]int64, 0)
if gvk.Kind == commonBean.ServiceKind {
ports = append(ports, getPortsFromService(manifest)...)
}
if gvk.Kind == commonBean.EndPointsSlice {
ports = append(ports, getPortsFromEndPointsSlice(manifest)...)
}
if gvk.Kind == commonBean.EndpointsKind {
ports = append(ports, getPortsFromEndpointsKind(manifest)...)
}
return ports
}
func getPortsFromService(manifest *unstructured.Unstructured) []int64 {
var ports []int64
if manifest.Object["spec"] != nil {
spec := manifest.Object["spec"].(map[string]interface{})
if spec["ports"] != nil {
portList := spec["ports"].([]interface{})
for _, portItem := range portList {
if portItem.(map[string]interface{}) != nil {
_portNumber := portItem.(map[string]interface{})["port"]
portNumber := _portNumber.(int64)
if portNumber != 0 {
ports = append(ports, portNumber)
}
}
}
}
}
return ports
}
func getPortsFromEndPointsSlice(manifest *unstructured.Unstructured) []int64 {
var ports []int64
if manifest.Object["ports"] != nil {
endPointsSlicePorts := manifest.Object["ports"].([]interface{})
for _, val := range endPointsSlicePorts {
_portNumber := val.(map[string]interface{})["port"]
portNumber := _portNumber.(int64)
if portNumber != 0 {
ports = append(ports, portNumber)
}
}
}
return ports
}
func getPortsFromEndpointsKind(manifest *unstructured.Unstructured) []int64 {
var ports []int64
if manifest.Object["subsets"] != nil {
subsets := manifest.Object["subsets"].([]interface{})
for _, subset := range subsets {
subsetObj := subset.(map[string]interface{})
if subsetObj != nil {
portsIfs := subsetObj["ports"].([]interface{})
for _, portsIf := range portsIfs {
portsIfObj := portsIf.(map[string]interface{})
if portsIfObj != nil {
port := portsIfObj["port"].(int64)
ports = append(ports, port)
}
}
}
}
}
return ports
}