diff --git a/app/api_topologies.go b/app/api_topologies.go index 60ac6d2a0..4f94d8823 100644 --- a/app/api_topologies.go +++ b/app/api_topologies.go @@ -29,6 +29,7 @@ const ( podsID = "pods" replicaSetsID = "replica-sets" deploymentsID = "deployments" + daemonsetsID = "daemonsets" servicesID = "services" hostsID = "hosts" weaveID = "weave" @@ -118,7 +119,7 @@ func updateKubeFilters(rpt report.Report, topologies []APITopologyDesc) []APITop sort.Strings(ns) topologies = append([]APITopologyDesc{}, topologies...) // Make a copy so we can make changes safely for i, t := range topologies { - if t.id == containersID || t.id == podsID || t.id == servicesID || t.id == deploymentsID || t.id == replicaSetsID { + if t.id == containersID || t.id == podsID || t.id == servicesID || t.id == deploymentsID || t.id == replicaSetsID || t.id == daemonsetsID { topologies[i] = mergeTopologyFilters(t, []APITopologyOptionGroup{ namespaceFilters(ns, "All Namespaces"), }) @@ -258,6 +259,14 @@ func MakeRegistry() *Registry { Options: []APITopologyOptionGroup{unmanagedFilter}, HideIfEmpty: true, }, + APITopologyDesc{ + id: daemonsetsID, + parent: podsID, + renderer: render.DaemonSetRenderer, + Name: "daemonsets", + Options: []APITopologyOptionGroup{unmanagedFilter}, + HideIfEmpty: true, + }, APITopologyDesc{ id: servicesID, parent: podsID, diff --git a/render/detailed/summary.go b/render/detailed/summary.go index aa8c4e3da..f76118629 100644 --- a/render/detailed/summary.go +++ b/render/detailed/summary.go @@ -92,6 +92,7 @@ var primaryAPITopology = map[string]string{ report.Pod: "pods", report.ReplicaSet: "replica-sets", report.Deployment: "deployments", + report.DaemonSet: "daemonsets", report.Service: "services", report.ECSTask: "ecs-tasks", report.ECSService: "ecs-services", diff --git a/render/pod.go b/render/pod.go index 81b59847c..8cbf73723 100644 --- a/render/pod.go +++ b/render/pod.go @@ -96,6 +96,21 @@ var ReplicaSetRenderer = ConditionalRenderer(renderKubernetesTopologies, ), ) +// DaemonSetRenderer is a Renderer which produces a renderable kubernetes daemonsets +// graph by merging the pods graph and the daemonsets topology. +var DaemonSetRenderer = ConditionalRenderer(renderKubernetesTopologies, + MakeMap( + PropagateSingleMetrics(report.Pod), + MakeReduce( + MakeMap( + Map2Parent(report.DaemonSet, "", nil), + PodRenderer, + ), + SelectDaemonSet, + ), + ), +) + func mapPodCounts(parent, original report.Node) report.Node { // When mapping ReplicaSets to Deployments, we want to propagate the Pods counter if count, ok := original.Counters.Lookup(report.Pod); ok {