k9s/internal/dao/alias.go

65 lines
1.1 KiB
Go

package dao
import (
"strings"
"github.com/derailed/k9s/internal/config"
)
// Alias tracks standard and custom command aliases.
type Alias struct {
config.Aliases
factory Factory
}
// NewAlias returns a new set of aliases.
func NewAlias(f Factory) *Alias {
return &Alias{
Aliases: config.NewAliases(),
factory: f,
}
}
// ClearAliases remove all aliases.
func (a *Alias) Clear() {
for k := range a.Alias {
delete(a.Alias, k)
}
}
// Ensure makes sure alias are loaded.
func (a *Alias) Ensure() (config.Alias, error) {
if len(a.Alias) == 0 {
if err := LoadResources(a.factory); err != nil {
return config.Alias{}, err
}
return a.Alias, a.load()
}
return a.Alias, nil
}
func (a *Alias) load() error {
if err := a.Load(); err != nil {
return err
}
for _, gvr := range AllGVRs() {
meta, err := MetaFor(gvr)
if err != nil {
return err
}
if _, ok := a.Alias[meta.Kind]; ok {
continue
}
a.Define(string(gvr), strings.ToLower(meta.Kind), meta.Name)
if meta.SingularName != "" {
a.Define(string(gvr), meta.SingularName)
}
if meta.ShortNames != nil {
a.Define(string(gvr), meta.ShortNames...)
}
}
return nil
}