k9s/internal/view/registrar.go

217 lines
4.9 KiB
Go

package view
import (
"strings"
"github.com/derailed/k9s/internal/config"
"github.com/derailed/k9s/internal/dao"
"github.com/rs/zerolog/log"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
)
var aliases = config.NewAliases()
func ToResource(o *unstructured.Unstructured, obj interface{}) error {
return runtime.DefaultUnstructuredConverter.FromUnstructured(o.Object, &obj)
}
func showCRD(app *App, ns, resource, selection string) {
log.Debug().Msgf("Launching CRD %q -- %q -- %q", ns, resource, selection)
tokens := strings.Split(selection, ".")
_ = tokens
panic("NYI")
// if !app.gotoResource(tokens[0]) {
// app.Flash().Errf("Goto %s failed", tokens[0])
// }
}
func loadAliases() error {
if err := aliases.Load(); err != nil {
return err
}
for _, gvr := range dao.AllGVRs() {
meta, err := dao.MetaFor(gvr)
if err != nil {
return err
}
if _, ok := aliases.Alias[meta.Kind]; ok {
continue
}
aliases.Define(string(gvr), strings.ToLower(meta.Kind), meta.Name)
if meta.SingularName != "" {
aliases.Define(string(gvr), meta.SingularName)
}
if meta.ShortNames != nil {
aliases.Define(string(gvr), meta.ShortNames...)
}
}
return nil
}
func loadCustomViewers() MetaViewers {
m := make(MetaViewers, 30)
coreRes(m)
miscRes(m)
appsRes(m)
rbacRes(m)
extRes(m)
netRes(m)
batchRes(m)
return m
}
func coreRes(vv MetaViewers) {
vv["v1/namespaces"] = MetaViewer{
viewerFn: NewNamespace,
}
vv["v1/pods"] = MetaViewer{
viewerFn: NewPod,
}
vv["v1/services"] = MetaViewer{
viewerFn: NewService,
}
vv["v1/nodes"] = MetaViewer{
viewerFn: NewNode,
}
vv["v1/secrets"] = MetaViewer{
viewerFn: NewSecret,
}
// vv["v1/serviceaccounts"] = MetaViewer{
// listFn: resource.NewServiceAccountList,
// enterFn: showSAPolicy,
// }
// vv["v1/configmaps"] = MetaViewer{
// listFn: resource.NewConfigMapList,
// }
// vv["v1/persistentvolumes"] = MetaViewer{
// listFn: resource.NewPersistentVolumeList,
// }
// vv["v1/persistentvolumeclaims"] = MetaViewer{
// listFn: resource.NewPersistentVolumeClaimList,
// }
// vv["v1/endpoints"] = MetaViewer{
// listFn: resource.NewEndpointsList,
// }
// vv["v1/events"] = MetaViewer{
// listFn: resource.NewEventList,
// }
// vv["v1/replicationcontrollers"] = MetaViewer{
// viewFn: NewReplicationController,
// listFn: resource.NewReplicationControllerList,
// }
}
func miscRes(vv MetaViewers) {
vv["contexts"] = MetaViewer{
viewerFn: NewContext,
}
vv["containers"] = MetaViewer{
viewerFn: NewContainer,
}
vv["portforwards"] = MetaViewer{
viewerFn: NewPortForward,
}
vv["screendumps"] = MetaViewer{
viewerFn: NewScreenDump,
}
// vv["storage.k8s.io/v1/storageclasses"] = MetaViewer{
// listFn: resource.NewStorageClassList,
// }
// vv["users"] = MetaViewer{
// viewFn: NewSubject,
// }
// vv["groups"] = MetaViewer{
// viewFn: NewSubject,
// }
vv["benchmarks"] = MetaViewer{
viewerFn: NewBenchmark,
}
vv["aliases"] = MetaViewer{
viewerFn: NewAlias,
}
}
func appsRes(vv MetaViewers) {
vv["apps/v1/deployments"] = MetaViewer{
viewerFn: NewDeploy,
}
vv["apps/v1/replicasets"] = MetaViewer{
viewerFn: NewReplicaSet,
}
vv["apps/v1/statefulsets"] = MetaViewer{
viewerFn: NewStatefulSet,
}
vv["apps/v1/daemonsets"] = MetaViewer{
viewerFn: NewDaemonSet,
}
vv["extensions/v1beta1/daemonsets"] = MetaViewer{
viewerFn: NewDaemonSet,
}
}
func rbacRes(vv MetaViewers) {
vv["rbac"] = MetaViewer{
enterFn: showRBAC,
}
vv["rbac.authorization.k8s.io/v1/clusterroles"] = MetaViewer{
enterFn: showRBAC,
}
vv["rbac.authorization.k8s.io/v1/roles"] = MetaViewer{
enterFn: showRBAC,
}
vv["rbac.authorization.k8s.io/v1/clusterrolebindings"] = MetaViewer{
enterFn: showRBAC,
}
vv["rbac.authorization.k8s.io/v1/rolebindings"] = MetaViewer{
enterFn: showRBAC,
}
}
func extRes(vv MetaViewers) {
// vv["apiextensions.k8s.io/v1/customresourcedefinitions"] = MetaViewer{
// listFn: resource.NewCustomResourceDefinitionList,
// enterFn: showCRD,
// }
// vv["apiextensions.k8s.io/v1beta1/customresourcedefinitions"] = MetaViewer{
// listFn: resource.NewCustomResourceDefinitionList,
// enterFn: showCRD,
// }
}
func netRes(vv MetaViewers) {
// vv["networking.k8s.io/v1/networkpolicies"] = MetaViewer{
// listFn: resource.NewNetworkPolicyList,
// }
// vv["extensions/v1beta1/ingresses"] = MetaViewer{
// listFn: resource.NewIngressList,
// }
}
func batchRes(vv MetaViewers) {
vv["batch/v1beta1/cronjobs"] = MetaViewer{
viewerFn: NewCronJob,
}
vv["batch/v1/jobs"] = MetaViewer{
viewerFn: NewJob,
}
}
// BOZO!!
// func policyRes(vv MetaViewers) {
// vv["policy/v1beta1/poddisruptionbudgets"] = MetaViewer{
// listFn: resource.NewPDBList,
// }
// }
// func autoscalingRes(vv MetaViewers) {
// vv["autoscaling/v1/horizontalpodautoscalers"] = MetaViewer{
// listFn: resource.NewHorizontalPodAutoscalerV1List,
// }
// }