mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-28 01:31:17 +00:00
Merge pull request #1438 from weaveworks/1430-filter-kube-system-containers
Filter out docker containers for pods in the kube-system namespace
This commit is contained in:
@@ -31,16 +31,9 @@ var ContainerRenderer = MakeFilter(
|
||||
return !ok || state != docker.StateDeleted
|
||||
},
|
||||
MakeReduce(
|
||||
MakeFilter(
|
||||
func(n report.Node) bool {
|
||||
// Drop unconnected pseudo nodes (could appear due to filtering)
|
||||
_, isConnected := n.Latest.Lookup(IsConnected)
|
||||
return n.Topology != Pseudo || isConnected
|
||||
},
|
||||
MakeMap(
|
||||
MapProcess2Container,
|
||||
ProcessRenderer,
|
||||
),
|
||||
MakeMap(
|
||||
MapProcess2Container,
|
||||
ProcessRenderer,
|
||||
),
|
||||
|
||||
// This mapper brings in short lived connections by joining with container IPs.
|
||||
|
||||
@@ -95,7 +95,7 @@ func (f *Filter) render(rpt report.Report, dct Decorator) (report.Nodes, int) {
|
||||
inDegrees := map[string]int{}
|
||||
filtered := 0
|
||||
for id, node := range f.Renderer.Render(rpt, dct) {
|
||||
if f.FilterFunc(node) {
|
||||
if node.Topology == Pseudo || f.FilterFunc(node) {
|
||||
output[id] = node
|
||||
inDegrees[id] = 0
|
||||
} else {
|
||||
@@ -150,17 +150,6 @@ func Complement(f FilterFunc) FilterFunc {
|
||||
return func(node report.Node) bool { return !f(node) }
|
||||
}
|
||||
|
||||
// FilterPseudo produces a renderer that removes pseudo nodes from the given
|
||||
// renderer
|
||||
func FilterPseudo(r Renderer) Renderer {
|
||||
return MakeFilter(
|
||||
func(node report.Node) bool {
|
||||
return node.Topology != Pseudo
|
||||
},
|
||||
r,
|
||||
)
|
||||
}
|
||||
|
||||
// FilterUnconnected produces a renderer that filters unconnected nodes
|
||||
// from the given renderer
|
||||
func FilterUnconnected(r Renderer) Renderer {
|
||||
@@ -228,7 +217,7 @@ func IsApplication(n report.Node) bool {
|
||||
if roleLabel == "system" {
|
||||
return false
|
||||
}
|
||||
namespace, _ := n.Latest.Lookup(kubernetes.Namespace)
|
||||
namespace, _ := n.Latest.Lookup(docker.LabelPrefix + "io.kubernetes.pod.namespace")
|
||||
if namespace == "kube-system" {
|
||||
return false
|
||||
}
|
||||
@@ -262,9 +251,6 @@ func FilterEmpty(topology string, r Renderer) Renderer {
|
||||
// topology.
|
||||
func HasChildren(topology string) FilterFunc {
|
||||
return func(n report.Node) bool {
|
||||
if n.Topology == Pseudo {
|
||||
return true
|
||||
}
|
||||
count := 0
|
||||
n.Children.ForEach(func(child report.Node) {
|
||||
if child.Topology == topology {
|
||||
@@ -278,8 +264,8 @@ func HasChildren(topology string) FilterFunc {
|
||||
// IsNamespace checks if the node is a pod/service in the specified namespace
|
||||
func IsNamespace(namespace string) FilterFunc {
|
||||
return func(n report.Node) bool {
|
||||
gotNamespace, ok := n.Latest.Lookup(kubernetes.Namespace)
|
||||
return !ok || namespace == gotNamespace
|
||||
gotNamespace, _ := n.Latest.Lookup(kubernetes.Namespace)
|
||||
return namespace == gotNamespace
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -124,18 +124,3 @@ func TestFilterUnconnectedSelf(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestFilterPseudo(t *testing.T) {
|
||||
// Test pseudonodes are removed
|
||||
{
|
||||
nodes := report.Nodes{
|
||||
"foo": report.MakeNode("foo"),
|
||||
"bar": report.MakeNode("bar").WithTopology(render.Pseudo),
|
||||
}
|
||||
renderer := mockRenderer{Nodes: nodes}
|
||||
have := renderer.Render(report.MakeReport(), render.FilterPseudo)
|
||||
if _, ok := have["bar"]; ok {
|
||||
t.Error("expected pseudonode to be removed")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,16 +27,9 @@ var PodRenderer = ConditionalRenderer(renderKubernetesTopologies,
|
||||
return (!ok || state != kubernetes.StateDeleted)
|
||||
},
|
||||
MakeReduce(
|
||||
MakeFilter(
|
||||
func(n report.Node) bool {
|
||||
// Drop unconnected pseudo nodes (could appear due to filtering)
|
||||
_, isConnected := n.Latest.Lookup(IsConnected)
|
||||
return n.Topology != Pseudo || isConnected
|
||||
},
|
||||
ColorConnected(MakeMap(
|
||||
MapContainer2Pod,
|
||||
ContainerWithImageNameRenderer,
|
||||
)),
|
||||
MakeMap(
|
||||
MapContainer2Pod,
|
||||
ContainerWithImageNameRenderer,
|
||||
),
|
||||
SelectPod,
|
||||
),
|
||||
|
||||
@@ -3,7 +3,6 @@ package render_test
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/weaveworks/scope/probe/docker"
|
||||
"github.com/weaveworks/scope/probe/kubernetes"
|
||||
"github.com/weaveworks/scope/render"
|
||||
"github.com/weaveworks/scope/render/expected"
|
||||
@@ -20,22 +19,20 @@ func TestPodRenderer(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func filterNonKubeSystem(renderer render.Renderer) render.Renderer {
|
||||
return render.MakeFilter(render.Complement(render.IsNamespace("kube-system")), renderer)
|
||||
}
|
||||
|
||||
func TestPodFilterRenderer(t *testing.T) {
|
||||
// tag on containers or pod namespace in the topology and ensure
|
||||
// it is filtered out correctly.
|
||||
input := fixture.Report.Copy()
|
||||
input.Pod.Nodes[fixture.ClientPodNodeID] = input.Pod.Nodes[fixture.ClientPodNodeID].WithLatests(map[string]string{
|
||||
kubernetes.PodID: "kube-system/foo",
|
||||
kubernetes.Namespace: "kube-system",
|
||||
kubernetes.PodName: "foo",
|
||||
})
|
||||
input.Container.Nodes[fixture.ClientContainerNodeID] = input.Container.Nodes[fixture.ClientContainerNodeID].WithLatests(map[string]string{
|
||||
docker.LabelPrefix + "io.kubernetes.pod.name": "kube-system/foo",
|
||||
})
|
||||
have := Prune(render.PodRenderer.Render(input, render.FilterApplication))
|
||||
have := Prune(render.PodRenderer.Render(input, filterNonKubeSystem))
|
||||
want := Prune(expected.RenderedPods.Copy())
|
||||
delete(want, fixture.ClientPodNodeID)
|
||||
delete(want, fixture.ClientContainerNodeID)
|
||||
if !reflect.DeepEqual(want, have) {
|
||||
t.Error(test.Diff(want, have))
|
||||
}
|
||||
@@ -53,12 +50,13 @@ func TestPodServiceFilterRenderer(t *testing.T) {
|
||||
// tag on containers or pod namespace in the topology and ensure
|
||||
// it is filtered out correctly.
|
||||
input := fixture.Report.Copy()
|
||||
have := Prune(render.PodServiceRenderer.Render(input, render.FilterSystem))
|
||||
input.Service.Nodes[fixture.ServiceNodeID] = input.Service.Nodes[fixture.ServiceNodeID].WithLatests(map[string]string{
|
||||
kubernetes.Namespace: "kube-system",
|
||||
})
|
||||
have := Prune(render.PodServiceRenderer.Render(input, filterNonKubeSystem))
|
||||
want := Prune(expected.RenderedPodServices.Copy())
|
||||
delete(want, fixture.ServiceNodeID)
|
||||
delete(want, expected.UnmanagedServerID)
|
||||
delete(want, render.IncomingInternetID)
|
||||
delete(want, render.OutgoingInternetID)
|
||||
if !reflect.DeepEqual(want, have) {
|
||||
t.Error(test.Diff(want, have))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user