-
Notifications
You must be signed in to change notification settings - Fork 129
/
node_util.go
84 lines (64 loc) · 1.75 KB
/
node_util.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
78
79
80
81
82
83
84
package util
import (
v1 "k8s.io/api/core/v1"
"github.com/armadaproject/armada/internal/common/util"
)
func GetPodsOnNodes(pods []*v1.Pod, nodes []*v1.Node) []*v1.Pod {
nodeSet := make(map[string]*v1.Node)
for _, node := range nodes {
nodeSet[node.Name] = node
}
podsOnNodes := []*v1.Pod{}
for _, pod := range pods {
if _, presentOnNode := nodeSet[pod.Spec.NodeName]; presentOnNode {
podsOnNodes = append(podsOnNodes, pod)
}
}
return podsOnNodes
}
func ExtractNodeNames(nodes []*v1.Node) []string {
nodeNames := make([]string, 0, len(nodes))
for _, node := range nodes {
nodeNames = append(nodeNames, node.Name)
}
return nodeNames
}
func RemoveNodesFromList(list1 []*v1.Node, list2 []*v1.Node) []*v1.Node {
nodesToRemove := ExtractNodeNames(list2)
nodesToRemoveSet := util.StringListToSet(nodesToRemove)
remainingNodes := []*v1.Node{}
for _, node := range list1 {
if !nodesToRemoveSet[node.Name] {
remainingNodes = append(remainingNodes, node)
}
}
return remainingNodes
}
func MergeNodeList(list1 []*v1.Node, list2 []*v1.Node) []*v1.Node {
nodeNames := ExtractNodeNames(list1)
nodeNamesSet := util.StringListToSet(nodeNames)
allNodes := list1
for _, node := range list2 {
if !nodeNamesSet[node.Name] {
allNodes = append(allNodes, node)
}
}
return allNodes
}
func FilterNodes(nodes []*v1.Node, filter func(node *v1.Node) bool) []*v1.Node {
filteredNodes := make([]*v1.Node, 0, len(nodes))
for _, node := range nodes {
if filter(node) {
filteredNodes = append(filteredNodes, node)
}
}
return filteredNodes
}
func IsReady(node *v1.Node) bool {
for _, condition := range node.Status.Conditions {
if condition.Type == v1.NodeReady && condition.Status == v1.ConditionTrue {
return true
}
}
return false
}