mine
derailed 2020-06-03 14:50:58 -06:00
parent 48317abc2a
commit e1a5dd510f
10 changed files with 43 additions and 18 deletions

View File

@ -90,13 +90,13 @@ K9s is available on Linux, macOS and Windows platforms.
You can run k9s as a Docker container by mounting your `KUBECONFIG`:
```shell
docker run --rm -it -v $KUBECONFIG:/root/.kube/config derailed/k9s
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s
```
For default path it would be:
```shell
docker run --rm -it -v ~/.kube/config:/root/.kube/config derailed/k9s
docker run --rm -it -v ~/.kube/config:/root/.kube/config quay.io/derailed/k9s
```
---
@ -242,7 +242,7 @@ K9s uses aliases to navigate most K8s resources.
> NOTE: This is still in flux and will change while in pre-release stage!
```yaml
# config.yml
# $HOME/.k9s/config.yml
k9s:
# Represents ui poll intervals. Default 2secs
refreshRate: 2
@ -272,7 +272,7 @@ K9s uses aliases to navigate most K8s resources.
currentCluster: minikube
# Persists per cluster preferences for favorite namespaces and view.
clusters:
cooln:
coolio:
namespace:
active: coolio
favorites:
@ -295,7 +295,7 @@ K9s uses aliases to navigate most K8s resources.
memory: 100Mi
# The IP Address to use when launching a port-forward.
portForwardAddress: 1.2.3.4
minikube:
kind:
namespace:
active: all
favorites:

View File

@ -35,8 +35,8 @@ func Colorize(s string, c Paint) string {
return fmt.Sprintf(colorFmt, c, s)
}
// AnsiColorize colors a string.
func AnsiColorize(s string, c int) string {
// ANSIColorize colors a string.
func ANSIColorize(s string, c int) string {
return fmt.Sprintf(ansiColorFmt, c, s)
}
@ -56,5 +56,5 @@ func Highlight(bb []byte, ii []int, c int) []byte {
}
func colorizeByte(b byte, color int) []byte {
return []byte(AnsiColorize(string(b), color))
return []byte(ANSIColorize(string(b), color))
}

View File

@ -42,8 +42,9 @@ func (c *CronJob) Run(path string) error {
// BOZO!! Factory resource??
ctx, cancel := context.WithTimeout(context.Background(), client.CallTimeout)
defer cancel()
o, err := c.Factory.Get("batch/v1/cronjobs", path, true, labels.Everything())
o, err := c.Factory.Get("batch/v1beta1/cronjobs", path, true, labels.Everything())
if err != nil {
return err
}

View File

@ -78,15 +78,15 @@ func (l *LogItem) IsEmpty() bool {
func (l *LogItem) Render(c int, showTime bool) []byte {
bb := make([]byte, 0, 30+len(l.Bytes)+len(l.Info()))
if showTime {
bb = append(bb, color.AnsiColorize(fmt.Sprintf("%-30s ", l.Timestamp), 106)...)
bb = append(bb, color.ANSIColorize(fmt.Sprintf("%-30s ", l.Timestamp), 106)...)
}
if l.Pod != "" {
bb = append(bb, []byte(color.AnsiColorize(l.Pod, c))...)
bb = append(bb, []byte(color.ANSIColorize(l.Pod, c))...)
bb = append(bb, ':')
}
if !l.SingleContainer && l.Container != "" {
bb = append(bb, []byte(color.AnsiColorize(l.Container, c))...)
bb = append(bb, []byte(color.ANSIColorize(l.Container, c))...)
bb = append(bb, ' ')
}
bb = append(bb, []byte(tview.Escape(string(l.Bytes)))...)

View File

@ -37,6 +37,7 @@ type Table struct {
refreshRate time.Duration
instance string
mx sync.RWMutex
labelFilter string
}
// NewTable returns a new table model.
@ -48,6 +49,11 @@ func NewTable(gvr client.GVR) *Table {
}
}
// SetLabelFilter sets the labels filter.
func (t *Table) SetLabelFilter(f string) {
t.labelFilter = f
}
// SetInstance sets a single entry table.
func (t *Table) SetInstance(path string) {
t.instance = path
@ -228,6 +234,9 @@ func (t *Table) list(ctx context.Context, a dao.Accessor) ([]runtime.Object, err
func (t *Table) reconcile(ctx context.Context) error {
meta := t.resourceMeta()
if t.labelFilter != "" {
ctx = context.WithValue(ctx, internal.KeyLabels, t.labelFilter)
}
var (
oo []runtime.Object
err error

View File

@ -62,6 +62,7 @@ type mockModel struct{}
var _ ui.Tabular = &mockModel{}
func (t *mockModel) SetInstance(string) {}
func (t *mockModel) SetLabelFilter(string) {}
func (t *mockModel) Empty() bool { return false }
func (t *mockModel) HasMetrics() bool { return true }
func (t *mockModel) Peek() render.TableData { return makeTableData() }

View File

@ -55,6 +55,9 @@ type Tabular interface {
// SetInstance sets parent resource path.
SetInstance(string)
// SetLabelFilter sets the label filter.
SetLabelFilter(string)
// Empty returns true if model has no data.
Empty() bool

View File

@ -99,12 +99,12 @@ type mockModel struct{}
var _ ui.Tabular = (*mockModel)(nil)
var _ ui.Suggester = (*mockModel)(nil)
func (t *mockModel) CurrentSuggestion() (string, bool) { return "", false }
func (t *mockModel) NextSuggestion() (string, bool) { return "", false }
func (t *mockModel) PrevSuggestion() (string, bool) { return "", false }
func (t *mockModel) ClearSuggestions() {}
func (t *mockModel) CurrentSuggestion() (string, bool) { return "", false }
func (t *mockModel) NextSuggestion() (string, bool) { return "", false }
func (t *mockModel) PrevSuggestion() (string, bool) { return "", false }
func (t *mockModel) ClearSuggestions() {}
func (t *mockModel) SetInstance(string) {}
func (t *mockModel) SetLabelFilter(string) {}
func (t *mockModel) Empty() bool { return false }
func (t *mockModel) HasMetrics() bool { return true }
func (t *mockModel) Peek() render.TableData { return makeTableData() }

View File

@ -140,10 +140,20 @@ func (b *Browser) Stop() {
}
// BufferChanged indicates the buffer was changed.
func (b *Browser) BufferChanged(s string) {}
func (b *Browser) BufferChanged(s string) {
if ui.IsLabelSelector(s) {
b.GetModel().SetLabelFilter(ui.TrimLabelSelector(s))
} else {
b.GetModel().SetLabelFilter("")
}
}
// BufferActive indicates the buff activity changed.
func (b *Browser) BufferActive(state bool, k model.BufferKind) {
if state {
return
}
b.GetModel().Refresh(b.defaultContext())
b.app.QueueUpdateDraw(func() {
b.Update(b.GetModel().Peek())
if b.GetRowCount() > 1 {

View File

@ -93,6 +93,7 @@ type mockTableModel struct{}
var _ ui.Tabular = (*mockTableModel)(nil)
func (t *mockTableModel) SetInstance(string) {}
func (t *mockTableModel) SetLabelFilter(string) {}
func (t *mockTableModel) Empty() bool { return false }
func (t *mockTableModel) HasMetrics() bool { return true }
func (t *mockTableModel) Peek() render.TableData { return makeTableData() }