From c0751cd4e25e652b3df8fa7f8b1d8deb7fe76769 Mon Sep 17 00:00:00 2001 From: Mike Lang Date: Fri, 19 May 2017 14:59:06 -0700 Subject: [PATCH] probe/kubernetes: Propagate errors in getting label selectors --- probe/kubernetes/daemonset.go | 9 ++++----- probe/kubernetes/deployment.go | 9 ++++----- probe/kubernetes/replica_set.go | 9 ++++----- probe/kubernetes/replication_controller.go | 9 +++++---- probe/kubernetes/reporter.go | 19 ++++++++++++++++--- 5 files changed, 33 insertions(+), 22 deletions(-) diff --git a/probe/kubernetes/daemonset.go b/probe/kubernetes/daemonset.go index b0dccd364..4e93e7a8b 100644 --- a/probe/kubernetes/daemonset.go +++ b/probe/kubernetes/daemonset.go @@ -18,7 +18,7 @@ const ( // DaemonSet represents a Kubernetes daemonset type DaemonSet interface { Meta - Selector() labels.Selector + Selector() (labels.Selector, error) GetNode() report.Node } @@ -35,13 +35,12 @@ func NewDaemonSet(d *extensions.DaemonSet) DaemonSet { } } -func (d *daemonSet) Selector() labels.Selector { +func (d *daemonSet) Selector() (labels.Selector, error) { selector, err := unversioned.LabelSelectorAsSelector(d.Spec.Selector) if err != nil { - // TODO(paulbellamy): Remove the panic! - panic(err) + return nil, err } - return selector + return selector, nil } func (d *daemonSet) GetNode() report.Node { diff --git a/probe/kubernetes/deployment.go b/probe/kubernetes/deployment.go index 77c785022..f67553b70 100644 --- a/probe/kubernetes/deployment.go +++ b/probe/kubernetes/deployment.go @@ -21,7 +21,7 @@ const ( // Deployment represents a Kubernetes deployment type Deployment interface { Meta - Selector() labels.Selector + Selector() (labels.Selector, error) GetNode(probeID string) report.Node } @@ -36,13 +36,12 @@ func NewDeployment(d *extensions.Deployment) Deployment { return &deployment{Deployment: d, Meta: meta{d.ObjectMeta}} } -func (d *deployment) Selector() labels.Selector { +func (d *deployment) Selector() (labels.Selector, error) { selector, err := unversioned.LabelSelectorAsSelector(d.Spec.Selector) if err != nil { - // TODO(paulbellamy): Remove the panic! - panic(err) + return nil, err } - return selector + return selector, nil } func (d *deployment) GetNode(probeID string) report.Node { diff --git a/probe/kubernetes/replica_set.go b/probe/kubernetes/replica_set.go index 745c5e992..50f8148dc 100644 --- a/probe/kubernetes/replica_set.go +++ b/probe/kubernetes/replica_set.go @@ -18,7 +18,7 @@ const ( // ReplicaSet represents a Kubernetes replica set type ReplicaSet interface { Meta - Selector() labels.Selector + Selector() (labels.Selector, error) AddParent(topology, id string) GetNode(probeID string) report.Node } @@ -39,13 +39,12 @@ func NewReplicaSet(r *extensions.ReplicaSet) ReplicaSet { } } -func (r *replicaSet) Selector() labels.Selector { +func (r *replicaSet) Selector() (labels.Selector, error) { selector, err := unversioned.LabelSelectorAsSelector(r.Spec.Selector) if err != nil { - // TODO(paulbellamy): Remove the panic! - panic(err) + return nil, err } - return selector + return selector, nil } func (r *replicaSet) AddParent(topology, id string) { diff --git a/probe/kubernetes/replication_controller.go b/probe/kubernetes/replication_controller.go index 016bd4dde..49794be0b 100644 --- a/probe/kubernetes/replication_controller.go +++ b/probe/kubernetes/replication_controller.go @@ -11,11 +11,12 @@ import ( // ReplicationController represents a Kubernetes replication controller type ReplicationController interface { Meta - Selector() labels.Selector + Selector() (labels.Selector, error) AddParent(topology, id string) GetNode(probeID string) report.Node } +// replicationController implements both ReplicationController and ReplicaSet type replicationController struct { *api.ReplicationController Meta @@ -32,11 +33,11 @@ func NewReplicationController(r *api.ReplicationController) ReplicationControlle } } -func (r *replicationController) Selector() labels.Selector { +func (r *replicationController) Selector() (labels.Selector, error) { if r.Spec.Selector == nil { - return labels.Nothing() + return labels.Nothing(), nil } - return labels.SelectorFromSet(labels.Set(r.Spec.Selector)) + return labels.SelectorFromSet(labels.Set(r.Spec.Selector)), nil } func (r *replicationController) AddParent(topology, id string) { diff --git a/probe/kubernetes/reporter.go b/probe/kubernetes/reporter.go index f0c3d4c3c..ad79f728b 100644 --- a/probe/kubernetes/reporter.go +++ b/probe/kubernetes/reporter.go @@ -317,9 +317,14 @@ func (r *Reporter) replicaSetTopology(probeID string, deployments []Deployment) result.Controls.AddControls(ScalingControls) for _, deployment := range deployments { + selector, err := deployment.Selector() + if err != nil { + return result, replicaSets, err + } + selectors = append(selectors, match( deployment.Namespace(), - deployment.Selector(), + selector, report.Deployment, report.MakeDeploymentNodeID(deployment.UID()), )) @@ -392,17 +397,25 @@ func (r *Reporter) podTopology(services []Service, replicaSets []ReplicaSet, dae )) } for _, replicaSet := range replicaSets { + selector, err := replicaSet.Selector() + if err != nil { + return pods, err + } selectors = append(selectors, match( replicaSet.Namespace(), - replicaSet.Selector(), + selector, report.ReplicaSet, report.MakeReplicaSetNodeID(replicaSet.UID()), )) } for _, daemonSet := range daemonSets { + selector, err := daemonSet.Selector() + if err != nil { + return pods, err + } selectors = append(selectors, match( daemonSet.Namespace(), - daemonSet.Selector(), + selector, report.DaemonSet, report.MakeDaemonSetNodeID(daemonSet.UID()), ))