forked from weaveworks/scope
/
deployment.go
59 lines (51 loc) · 1.71 KB
/
deployment.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package kubernetes
import (
"fmt"
"github.com/weaveworks/scope/report"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/labels"
)
// These constants are keys used in node metadata
const (
UpdatedReplicas = "kubernetes_updated_replicas"
AvailableReplicas = "kubernetes_available_replicas"
UnavailableReplicas = "kubernetes_unavailable_replicas"
Strategy = "kubernetes_strategy"
)
// Deployment represents a Kubernetes deployment
type Deployment interface {
Meta
Selector() labels.Selector
GetNode(probeID string) report.Node
}
type deployment struct {
*extensions.Deployment
Meta
Node *api.Node
}
// NewDeployment creates a new Deployment
func NewDeployment(d *extensions.Deployment) Deployment {
return &deployment{Deployment: d, Meta: meta{d.ObjectMeta}}
}
func (d *deployment) Selector() labels.Selector {
selector, err := unversioned.LabelSelectorAsSelector(d.Spec.Selector)
if err != nil {
// TODO(paulbellamy): Remove the panic!
panic(err)
}
return selector
}
func (d *deployment) GetNode(probeID string) report.Node {
return d.MetaNode(report.MakeDeploymentNodeID(d.UID())).WithLatests(map[string]string{
ObservedGeneration: fmt.Sprint(d.Status.ObservedGeneration),
DesiredReplicas: fmt.Sprint(d.Spec.Replicas),
Replicas: fmt.Sprint(d.Status.Replicas),
UpdatedReplicas: fmt.Sprint(d.Status.UpdatedReplicas),
AvailableReplicas: fmt.Sprint(d.Status.AvailableReplicas),
UnavailableReplicas: fmt.Sprint(d.Status.UnavailableReplicas),
Strategy: string(d.Spec.Strategy.Type),
report.ControlProbeID: probeID,
}).WithLatestActiveControls(ScaleUp, ScaleDown)
}