diff --git a/render/detailed/parents.go b/render/detailed/parents.go index 8e347add8..0692c39fa 100644 --- a/render/detailed/parents.go +++ b/render/detailed/parents.go @@ -25,6 +25,8 @@ var ( report.Pod: kubernetesParentLabel, report.Deployment: kubernetesParentLabel, report.DaemonSet: kubernetesParentLabel, + report.StatefulSet: kubernetesParentLabel, + report.CronJob: kubernetesParentLabel, report.Service: kubernetesParentLabel, report.ECSTask: latestLookup(awsecs.TaskFamily), report.ECSService: ecsServiceParentLabel, diff --git a/render/detailed/summary.go b/render/detailed/summary.go index 2ef25f264..91a1f541d 100644 --- a/render/detailed/summary.go +++ b/render/detailed/summary.go @@ -68,6 +68,8 @@ var renderers = map[string]func(NodeSummary, report.Node) (NodeSummary, bool){ report.Service: podGroupNodeSummary, report.Deployment: podGroupNodeSummary, report.DaemonSet: podGroupNodeSummary, + report.StatefulSet: podGroupNodeSummary, + report.CronJob: podGroupNodeSummary, report.ECSTask: ecsTaskNodeSummary, report.ECSService: ecsServiceNodeSummary, report.SwarmService: swarmServiceNodeSummary, @@ -90,6 +92,8 @@ var primaryAPITopology = map[string]string{ report.Pod: "pods", report.Deployment: "kube-controllers", report.DaemonSet: "kube-controllers", + report.StatefulSet: "kube-controllers", + report.CronJob: "kube-controllers", report.Service: "services", report.ECSTask: "ecs-tasks", report.ECSService: "ecs-services", @@ -256,8 +260,10 @@ func podNodeSummary(base NodeSummary, n report.Node) (NodeSummary, bool) { } var podGroupNodeTypeName = map[string]string{ - report.Deployment: "Deployment", - report.DaemonSet: "Daemon Set", + report.Deployment: "Deployment", + report.DaemonSet: "Daemon Set", + report.StatefulSet: "Stateful Set", + report.CronJob: "Cron Job", } func podGroupNodeSummary(base NodeSummary, n report.Node) (NodeSummary, bool) { diff --git a/render/selectors.go b/render/selectors.go index 3733c3a6a..cf990fe6a 100644 --- a/render/selectors.go +++ b/render/selectors.go @@ -31,6 +31,8 @@ var ( SelectService = TopologySelector(report.Service) SelectDeployment = TopologySelector(report.Deployment) SelectDaemonSet = TopologySelector(report.DaemonSet) + SelectStatefulSet = TopologySelector(report.StatefulSet) + SelectCronJob = TopologySelector(report.CronJob) SelectECSTask = TopologySelector(report.ECSTask) SelectECSService = TopologySelector(report.ECSService) SelectSwarmService = TopologySelector(report.SwarmService) diff --git a/report/id.go b/report/id.go index 108d95143..b0a9aa323 100644 --- a/report/id.go +++ b/report/id.go @@ -131,6 +131,18 @@ var ( // ParseDaemonSetNodeID parses a daemon set node ID ParseDaemonSetNodeID = parseSingleComponentID("daemonset") + // MakeStatefulSetNodeID produces a replica set node ID from its composite parts. + MakeStatefulSetNodeID = makeSingleComponentID("statefulset") + + // ParseStatefulSetNodeID parses a daemon set node ID + ParseStatefulSetNodeID = parseSingleComponentID("statefulset") + + // MakeCronJobNodeID produces a replica set node ID from its composite parts. + MakeCronJobNodeID = makeSingleComponentID("cronjob") + + // ParseCronJobNodeID parses a daemon set node ID + ParseCronJobNodeID = parseSingleComponentID("cronjob") + // MakeECSTaskNodeID produces a replica set node ID from its composite parts. MakeECSTaskNodeID = makeSingleComponentID("ecs_task") diff --git a/report/report.go b/report/report.go index 7fb95ec95..5d8d3e7e1 100644 --- a/report/report.go +++ b/report/report.go @@ -20,6 +20,8 @@ const ( Deployment = "deployment" ReplicaSet = "replica_set" DaemonSet = "daemon_set" + StatefulSet = "stateful_set" + CronJob = "cron_job" ContainerImage = "container_image" Host = "host" Overlay = "overlay" @@ -83,6 +85,16 @@ type Report struct { // present. DaemonSet Topology + // StatefulSet nodes represent all Kubernetes Stateful Sets running on hosts running probes. + // Metadata includes things like Stateful Set id, name, etc. Edges are not + // present. + StatefulSet Topology + + // CronJob nodes represent all Kubernetes Cron Jobs running on hosts running probes. + // Metadata includes things like Cron Job id, name, etc. Edges are not + // present. + CronJob Topology + // ContainerImages nodes represent all Docker containers images on // hosts running probes. Metadata includes things like image id, name etc. // Edges are not present. @@ -177,6 +189,14 @@ func MakeReport() Report { WithShape(Pentagon). WithLabel("daemonset", "daemonsets"), + StatefulSet: MakeTopology(). + WithShape(Triangle). + WithLabel("stateful set", "stateful sets"), + + CronJob: MakeTopology(). + WithShape(Triangle). + WithLabel("cron job", "cron jobs"), + Overlay: MakeTopology(). WithShape(Circle). WithLabel("peer", "peers"), @@ -212,6 +232,8 @@ func (r *Report) TopologyMap() map[string]*Topology { Deployment: &r.Deployment, ReplicaSet: &r.ReplicaSet, DaemonSet: &r.DaemonSet, + StatefulSet: &r.StatefulSet, + CronJob: &r.CronJob, Host: &r.Host, Overlay: &r.Overlay, ECSTask: &r.ECSTask, @@ -275,6 +297,8 @@ func (r *Report) WalkPairedTopologies(o *Report, f func(*Topology, *Topology)) { f(&r.Deployment, &o.Deployment) f(&r.ReplicaSet, &o.ReplicaSet) f(&r.DaemonSet, &o.DaemonSet) + f(&r.StatefulSet, &o.StatefulSet) + f(&r.CronJob, &o.CronJob) f(&r.Host, &o.Host) f(&r.Overlay, &o.Overlay) f(&r.ECSTask, &o.ECSTask)