Skip to content

Commit 298b191

Browse files
committed
iterate through podSpecNode kinds and filter managed nodes
1 parent da1c400 commit 298b191

File tree

1 file changed

+30
-9
lines changed

1 file changed

+30
-9
lines changed

pkg/api/kubegraph/analysis/podspec.go

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
osgraph "github.com/openshift/origin/pkg/api/graph"
99
kubeedges "github.com/openshift/origin/pkg/api/kubegraph"
1010
kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes"
11+
deploygraph "github.com/openshift/origin/pkg/deploy/graph"
1112
"k8s.io/kubernetes/pkg/util/sets"
1213
)
1314

@@ -85,7 +86,7 @@ func FindMissingLivenessProbes(g osgraph.Graph, f osgraph.Namer, setProbeCommand
8586

8687
for _, uncastPodSpecNode := range g.NodesByKind(kubegraph.PodSpecNodeKind) {
8788
podSpecNode := uncastPodSpecNode.(*kubegraph.PodSpecNode)
88-
podsWithoutLivenessProbes := CheckForLivenessProbes(g, podSpecNode)
89+
podsWithoutLivenessProbes := CheckForLivenessProbes(podSpecNode)
8990

9091
topLevelNode := osgraph.GetTopLevelContainerNode(g, podSpecNode)
9192
topLevelString := f.ResourceName(topLevelNode)
@@ -118,7 +119,9 @@ func FindMissingLivenessProbes(g osgraph.Graph, f osgraph.Namer, setProbeCommand
118119
return markers
119120
}
120121

121-
func CheckForLivenessProbes(g osgraph.Graph, podSpecNode *kubegraph.PodSpecNode) []*kubegraph.PodSpecNode {
122+
// CheckForLivenessProbes iterates through all of the containers in a podSpecNode until it finds one
123+
// with a liveness probe set. The list of nodes whose containers have no liveness probe set is returned.
124+
func CheckForLivenessProbes(podSpecNode *kubegraph.PodSpecNode) []*kubegraph.PodSpecNode {
122125
noLivenessProbes := []*kubegraph.PodSpecNode{}
123126

124127
hasLivenessProbe := false
@@ -184,17 +187,35 @@ func CheckMissingMountedSecrets(g osgraph.Graph, podSpecNode *kubegraph.PodSpecN
184187
return missingSecrets
185188
}
186189

190+
// findNodesManagedByController returns a list of nodes that have "controllerRef" edge kinds directed at them
187191
func findNodesManagedByController(g osgraph.Graph) []graph.Node {
188-
nodeFilter := osgraph.NodesOfKind()
189-
edgeFilter := osgraph.EdgesOfKind(kubeedges.ManagedByControllerEdgeKind)
190-
191-
subGraph := g.Subgraph(nodeFilter, edgeFilter)
192192
managedNodes := []graph.Node{}
193193

194-
// ignore all nodes "controlled" by another node
195-
for _, edge := range subGraph.Edges() {
196-
managedNodes = append(managedNodes, edge.To())
194+
// find and append nodes of ManagedByController and
195+
// Deployment edge kinds, ignoring top-level nodes.
196+
for _, node := range g.NodesByKind(kubegraph.PodSpecNodeKind) {
197+
topLevelNode := osgraph.GetTopLevelContainerNode(g, node)
198+
managedNodes = append(managedNodes, findManagedNodes(g, topLevelNode, g.To(topLevelNode), false)...)
199+
}
200+
return managedNodes
201+
}
202+
203+
// findManagedNodes traverses up from a podSpecNode until it finds parents with no "controllerRef" edge kinds
204+
func findManagedNodes(g osgraph.Graph, node graph.Node, parents []graph.Node, previousEdgeValid bool) []graph.Node {
205+
managedNodes := []graph.Node{}
206+
for _, parent := range parents {
207+
edge := g.Edge(parent, node)
208+
kinds := g.EdgeKinds(edge)
209+
210+
validEdge := kinds.HasAny(kubeedges.ManagedByControllerEdgeKind, deploygraph.DeploymentEdgeKind)
211+
if validEdge && !isNodeInList(node, managedNodes) {
212+
managedNodes = append(managedNodes, node)
213+
managedNodes = append(managedNodes, findManagedNodes(g, parent, g.To(parent), validEdge)...)
214+
} else if previousEdgeValid {
215+
return managedNodes
216+
}
197217
}
218+
198219
return managedNodes
199220
}
200221

0 commit comments

Comments
 (0)