Merge pull request #3274 from weaveworks/kubernetes-tagger

Enable Kubernetes objects to be reported just once in a cluster
This commit is contained in:
Bryan Boreham
2018-10-19 16:48:37 +01:00
committed by GitHub
6 changed files with 71 additions and 17 deletions
+32 -8
View File
@@ -53,14 +53,16 @@ var PodRenderer = Memoise(ConditionalRenderer(renderKubernetesTopologies,
},
MakeReduce(
PropagateSingleMetrics(report.Container,
Map2Parent{topologies: []string{report.Pod}, noParentsPseudoID: UnmanagedID,
chainRenderer: MakeFilter(
ComposeFilterFuncs(
IsRunning,
Complement(isPauseContainer),
),
ContainerWithImageNameRenderer,
)},
MakeMap(propagatePodHost,
Map2Parent{topologies: []string{report.Pod}, noParentsPseudoID: UnmanagedID,
chainRenderer: MakeFilter(
ComposeFilterFuncs(
IsRunning,
Complement(isPauseContainer),
),
ContainerWithImageNameRenderer,
)},
),
),
ConnectionJoin(MapPod2IP, report.Pod),
KubernetesVolumesRenderer,
@@ -68,6 +70,28 @@ var PodRenderer = Memoise(ConditionalRenderer(renderKubernetesTopologies,
),
))
// Pods are not tagged with a Host parent, but their container children are.
// If n doesn't already have a host, copy it from one of the children
func propagatePodHost(n report.Node) report.Node {
if n.Topology != report.Pod {
return n
} else if _, found := n.Parents.Lookup(report.Host); found {
return n
}
done := false
n.Children.ForEach(func(child report.Node) {
if !done {
if hosts, found := child.Parents.Lookup(report.Host); found {
for _, h := range hosts {
n = n.WithParent(report.Host, h)
}
done = true
}
}
})
return n
}
// PodServiceRenderer is a Renderer which produces a renderable kubernetes services
// graph by merging the pods graph and the services topology.
//