From c149e5792aa1af45b53f166de70dcafeabf74f97 Mon Sep 17 00:00:00 2001 From: Mike Lang Date: Tue, 1 Aug 2017 14:14:44 -0700 Subject: [PATCH] k8s probe: Fix a panic (nil pointer deref) when a cronjob has never been scheduled in which case cj.Status.LastScheduled is nil. New behaviour is to omit it from the map (and therefore the display) if it has never been scheduled. --- probe/kubernetes/cronjob.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/probe/kubernetes/cronjob.go b/probe/kubernetes/cronjob.go index a34db38ef..5e76aeee7 100644 --- a/probe/kubernetes/cronjob.go +++ b/probe/kubernetes/cronjob.go @@ -63,11 +63,14 @@ func (cj *cronJob) Selectors() ([]labels.Selector, error) { } func (cj *cronJob) GetNode() report.Node { - return cj.MetaNode(report.MakeCronJobNodeID(cj.UID())).WithLatests(map[string]string{ - NodeType: "CronJob", - Schedule: cj.Spec.Schedule, - Suspended: fmt.Sprint(cj.Spec.Suspend != nil && *cj.Spec.Suspend), // nil -> false - LastScheduled: cj.Status.LastScheduleTime.Format(time.RFC3339Nano), - ActiveJobs: fmt.Sprint(len(cj.jobs)), - }) + latest := map[string]string{ + NodeType: "CronJob", + Schedule: cj.Spec.Schedule, + Suspended: fmt.Sprint(cj.Spec.Suspend != nil && *cj.Spec.Suspend), // nil -> false + ActiveJobs: fmt.Sprint(len(cj.jobs)), + } + if cj.Status.LastScheduleTime != nil { + latest[LastScheduled] = cj.Status.LastScheduleTime.Format(time.RFC3339Nano) + } + return cj.MetaNode(report.MakeCronJobNodeID(cj.UID())).WithLatests(latest) }