|
8 | 8 | osgraph "github.com/openshift/origin/pkg/api/graph"
|
9 | 9 | kubeedges "github.com/openshift/origin/pkg/api/kubegraph"
|
10 | 10 | kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes"
|
| 11 | + deploygraph "github.com/openshift/origin/pkg/deploy/graph" |
11 | 12 | "k8s.io/kubernetes/pkg/util/sets"
|
12 | 13 | )
|
13 | 14 |
|
@@ -85,7 +86,7 @@ func FindMissingLivenessProbes(g osgraph.Graph, f osgraph.Namer, setProbeCommand
|
85 | 86 |
|
86 | 87 | for _, uncastPodSpecNode := range g.NodesByKind(kubegraph.PodSpecNodeKind) {
|
87 | 88 | podSpecNode := uncastPodSpecNode.(*kubegraph.PodSpecNode)
|
88 |
| - podsWithoutLivenessProbes := CheckForLivenessProbes(g, podSpecNode) |
| 89 | + podsWithoutLivenessProbes := CheckForLivenessProbes(podSpecNode) |
89 | 90 |
|
90 | 91 | topLevelNode := osgraph.GetTopLevelContainerNode(g, podSpecNode)
|
91 | 92 | topLevelString := f.ResourceName(topLevelNode)
|
@@ -118,7 +119,9 @@ func FindMissingLivenessProbes(g osgraph.Graph, f osgraph.Namer, setProbeCommand
|
118 | 119 | return markers
|
119 | 120 | }
|
120 | 121 |
|
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 { |
122 | 125 | noLivenessProbes := []*kubegraph.PodSpecNode{}
|
123 | 126 |
|
124 | 127 | hasLivenessProbe := false
|
@@ -184,17 +187,35 @@ func CheckMissingMountedSecrets(g osgraph.Graph, podSpecNode *kubegraph.PodSpecN
|
184 | 187 | return missingSecrets
|
185 | 188 | }
|
186 | 189 |
|
| 190 | +// findNodesManagedByController returns a list of nodes that have "controllerRef" edge kinds directed at them |
187 | 191 | func findNodesManagedByController(g osgraph.Graph) []graph.Node {
|
188 |
| - nodeFilter := osgraph.NodesOfKind() |
189 |
| - edgeFilter := osgraph.EdgesOfKind(kubeedges.ManagedByControllerEdgeKind) |
190 |
| - |
191 |
| - subGraph := g.Subgraph(nodeFilter, edgeFilter) |
192 | 192 | managedNodes := []graph.Node{}
|
193 | 193 |
|
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 | + } |
197 | 217 | }
|
| 218 | + |
198 | 219 | return managedNodes
|
199 | 220 | }
|
200 | 221 |
|
|
0 commit comments