k9s/internal/view/dp.go

60 lines
1.5 KiB
Go

package view
import (
"github.com/derailed/k9s/internal/k8s"
"github.com/derailed/k9s/internal/resource"
"github.com/derailed/k9s/internal/ui"
v1 "k8s.io/api/apps/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
const scaleDialogKey = "scale"
// Deploy represents a deployment view.
type Deploy struct {
*LogResource
scalableResource *ScalableResource
restartableResource *RestartableResource
}
// NewDeploy returns a new deployment view.
func NewDeploy(title, gvr string, list resource.List) ResourceViewer {
l := NewLogResource(title, gvr, list)
d := Deploy{
LogResource: l,
scalableResource: newScalableResourceForParent(l.Resource),
restartableResource: newRestartableResourceForParent(l.Resource),
}
d.extraActionsFn = d.extraActions
d.enterFn = d.showPods
return &d
}
func (d *Deploy) extraActions(aa ui.KeyActions) {
d.LogResource.extraActions(aa)
d.scalableResource.extraActions(aa)
d.restartableResource.extraActions(aa)
aa[ui.KeyShiftD] = ui.NewKeyAction("Sort Desired", d.sortColCmd(1, false), false)
aa[ui.KeyShiftC] = ui.NewKeyAction("Sort Current", d.sortColCmd(2, false), false)
}
func (d *Deploy) showPods(app *App, _, res, sel string) {
ns, n := namespaced(sel)
dep, err := k8s.NewDeployment(app.Conn()).Get(ns, n)
if err != nil {
app.Flash().Err(err)
return
}
dp := dep.(*v1.Deployment)
l, err := metav1.LabelSelectorAsSelector(dp.Spec.Selector)
if err != nil {
app.Flash().Err(err)
return
}
showPods(app, ns, l.String(), "", d.backCmd)
}