Files
weave-scope/probe/kubernetes/deployment.go
Bryan Boreham 17c1aaa131 chore(probe): for Kubernetes 1.16 move to 'v1' APIs
Scope will no longer work with Kubernetes 1.8 and below.

For CronJob there is no 'v1' as yet, but we can remove the alpha
version.
2019-09-21 15:52:34 +00:00

66 lines
1.9 KiB
Go

package kubernetes
import (
"fmt"
"github.com/weaveworks/scope/report"
apiappsv1 "k8s.io/api/apps/v1"
apiv1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
)
// These constants are keys used in node metadata
const (
UpdatedReplicas = report.KubernetesUpdatedReplicas
AvailableReplicas = report.KubernetesAvailableReplicas
UnavailableReplicas = report.KubernetesUnavailableReplicas
Strategy = report.KubernetesStrategy
)
// Deployment represents a Kubernetes deployment
type Deployment interface {
Meta
Selector() (labels.Selector, error)
GetNode(probeID string) report.Node
}
type deployment struct {
*apiappsv1.Deployment
Meta
Node *apiv1.Node
}
// NewDeployment creates a new Deployment
func NewDeployment(d *apiappsv1.Deployment) Deployment {
return &deployment{Deployment: d, Meta: meta{d.ObjectMeta}}
}
func (d *deployment) Selector() (labels.Selector, error) {
selector, err := metav1.LabelSelectorAsSelector(d.Spec.Selector)
if err != nil {
return nil, err
}
return selector, nil
}
func (d *deployment) GetNode(probeID string) report.Node {
// Spec.Replicas can be omitted, and the pointer will be nil. It defaults to 1.
desiredReplicas := 1
if d.Spec.Replicas != nil {
desiredReplicas = int(*d.Spec.Replicas)
}
return d.MetaNode(report.MakeDeploymentNodeID(d.UID())).WithLatests(map[string]string{
ObservedGeneration: fmt.Sprint(d.Status.ObservedGeneration),
DesiredReplicas: fmt.Sprint(desiredReplicas),
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,
NodeType: "Deployment",
}).WithLatestActiveControls(ScaleUp, ScaleDown, Describe)
}