Files
weave-scope/probe/kubernetes/daemonset.go
Roland Schilter 3de06b5a09 Support controls in more k8s topologies (#3110)
* Refactor: func has already access to probeID

* Allow controls for more k8s topologies

Controls for nodes generally need to know about the probe that is in
control of them.

This PR appends the probe ID info to k8s topologies CronJob, DaemonSet,
Service, and StatefulSet. Therefore allowing plugins to append controls.

* Remove superfluous error check

* Add some tests to verify controls allowance
2018-03-16 12:39:57 -07:00

55 lines
1.3 KiB
Go

package kubernetes
import (
"fmt"
apiv1beta1 "k8s.io/api/extensions/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"github.com/weaveworks/scope/report"
)
// These constants are keys used in node metadata
const (
MisscheduledReplicas = report.KubernetesMisscheduledReplicas
)
// DaemonSet represents a Kubernetes daemonset
type DaemonSet interface {
Meta
Selector() (labels.Selector, error)
GetNode(probeID string) report.Node
}
type daemonSet struct {
*apiv1beta1.DaemonSet
Meta
}
// NewDaemonSet creates a new daemonset
func NewDaemonSet(d *apiv1beta1.DaemonSet) DaemonSet {
return &daemonSet{
DaemonSet: d,
Meta: meta{d.ObjectMeta},
}
}
func (d *daemonSet) Selector() (labels.Selector, error) {
selector, err := metav1.LabelSelectorAsSelector(d.Spec.Selector)
if err != nil {
return nil, err
}
return selector, nil
}
func (d *daemonSet) GetNode(probeID string) report.Node {
return d.MetaNode(report.MakeDaemonSetNodeID(d.UID())).WithLatests(map[string]string{
DesiredReplicas: fmt.Sprint(d.Status.DesiredNumberScheduled),
Replicas: fmt.Sprint(d.Status.CurrentNumberScheduled),
MisscheduledReplicas: fmt.Sprint(d.Status.NumberMisscheduled),
NodeType: "DaemonSet",
report.ControlProbeID: probeID,
})
}