probe/kubernetes: Propagate errors in getting label selectors

This commit is contained in:
Mike Lang
2017-05-19 14:59:06 -07:00
parent 3aa4a676dd
commit c0751cd4e2
5 changed files with 33 additions and 22 deletions

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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()),
))