fix shell issue + bugz

mine
derailed 2021-05-03 22:33:22 -06:00
parent a85a1eced1
commit 9f4ff32699
6 changed files with 57 additions and 31 deletions

2
go.mod
View File

@ -5,7 +5,7 @@ go 1.16
replace (
github.com/docker/distribution => github.com/docker/distribution v0.0.0-20191216044856-a8371794149d
github.com/docker/docker => github.com/moby/moby v17.12.0-ce-rc1.0.20200618181300-9dc6525e6118+incompatible
github.com/gdamore/tcell/v2 => github.com/derailed/tcell/v2 v2.2.1-rc.1
github.com/gdamore/tcell/v2 => github.com/derailed/tcell/v2 v2.2.1-rc.6
)
require (

4
go.sum
View File

@ -191,8 +191,8 @@ github.com/denisenkom/go-mssqldb v0.0.0-20191001013358-cfbb681360f0/go.mod h1:xb
github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0=
github.com/derailed/popeye v0.9.0 h1:0zP4BAzo94RUjrUkzgF962v0zL9B3xyopd7kU7tMxuc=
github.com/derailed/popeye v0.9.0/go.mod h1:g3hudQlbEEChCA7U44fA+utTM9xQpD4pINUMQaiq5Gs=
github.com/derailed/tcell/v2 v2.2.1-rc.1 h1:7VaxT1ydvWq5Ys/YASbPRO/02kzwdBOdzMLe2H1/Gds=
github.com/derailed/tcell/v2 v2.2.1-rc.1/go.mod h1:0qLNzFYW8f0XhbEkwYtmnT8HYs3o4kuMsdkLEUKfAX0=
github.com/derailed/tcell/v2 v2.2.1-rc.6 h1:4OYLuVMZKuw6j/1dTao2dPhoMAZVsb9uKG65yW749pM=
github.com/derailed/tcell/v2 v2.2.1-rc.6/go.mod h1:0qLNzFYW8f0XhbEkwYtmnT8HYs3o4kuMsdkLEUKfAX0=
github.com/derailed/tview v0.6.1 h1:dB+9bO7r6a1Yg1HE+XNJj61hioauJnGBFq2biC5bjAk=
github.com/derailed/tview v0.6.1/go.mod h1:5Wjopun0Jw3zxOFtafwc/GlrkFJix1hZz1oQetWpnwE=
github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=

View File

@ -76,7 +76,6 @@ func (c *Config) Refine(flags *genericclioptions.ConfigFlags, k9sFlags *Flags) e
if err != nil {
return err
}
if isSet(flags.Context) {
c.K9s.CurrentContext = *flags.Context
} else {
@ -91,10 +90,11 @@ func (c *Config) Refine(flags *genericclioptions.ConfigFlags, k9sFlags *Flags) e
return fmt.Errorf("The specified context %q does not exists in kubeconfig", c.K9s.CurrentContext)
}
c.K9s.CurrentCluster = context.Cluster
c.K9s.ActivateCluster()
var ns string
var override bool
if IsBoolSet(k9sFlags.AllNamespaces) {
if k9sFlags != nil && IsBoolSet(k9sFlags.AllNamespaces) {
ns, override = client.NamespaceAll, true
} else if isSet(flags.Namespace) {
ns, override = *flags.Namespace, true
@ -129,11 +129,19 @@ func (c *Config) CurrentCluster() *Cluster {
// ActiveNamespace returns the active namespace in the current cluster.
func (c *Config) ActiveNamespace() string {
if cl := c.CurrentCluster(); cl != nil {
if cl.Namespace != nil {
return cl.Namespace.Active
}
if c.K9s.Clusters == nil {
log.Warn().Msgf("No context detected returning default namespace")
return "default"
}
cl := c.CurrentCluster()
if cl == nil {
cl = NewCluster()
c.K9s.Clusters[c.K9s.CurrentCluster] = cl
}
if cl.Namespace != nil {
return cl.Namespace.Active
}
return "default"
}
@ -197,7 +205,9 @@ func (c *Config) GetConnection() client.Connection {
// SetConnection set an api server connection.
func (c *Config) SetConnection(conn client.Connection) {
c.client = conn
c.client.Config().OverrideNS = c.overrideNS
if c.client != nil && c.client.Config() != nil {
c.client.Config().OverrideNS = c.overrideNS
}
}
// Load K9s configuration from file

View File

@ -18,20 +18,20 @@ func init() {
}
func TestConfigRefine(t *testing.T) {
cfgFile, ctx, cluster, ns := "testdata/kubeconfig-test.yml", "test", "c1", "ns1"
cfgFile, ctx, cluster, ns := "testdata/kubeconfig-test.yml", "test2", "cluster2", "ns2"
uu := map[string]struct {
flags *genericclioptions.ConfigFlags
issue bool
context, cluster, namespace string
}{
"kubeconfig": {
"plain": {
flags: &genericclioptions.ConfigFlags{KubeConfig: &cfgFile},
issue: false,
context: "test",
cluster: "testCluster",
namespace: "testNS",
context: "test1",
cluster: "cluster1",
namespace: "ns1",
},
"override": {
"overrideNS": {
flags: &genericclioptions.ConfigFlags{
KubeConfig: &cfgFile,
Context: &ctx,
@ -62,8 +62,8 @@ func TestConfigRefine(t *testing.T) {
mk := NewMockKubeSettings()
m.When(mk.NamespaceNames(namespaces())).ThenReturn([]string{"default"})
cfg := config.NewConfig(mk)
err := cfg.Refine(u.flags)
err := cfg.Refine(u.flags, nil)
if u.issue {
assert.NotNil(t, err)
} else {

View File

@ -43,6 +43,13 @@ func NewK9s() *K9s {
}
}
func (k *K9s) ActivateCluster() {
if _, ok := k.Clusters[k.CurrentCluster]; ok {
return
}
k.Clusters[k.CurrentCluster] = NewCluster()
}
// OverrideRefreshRate set the refresh rate manually.
func (k *K9s) OverrideRefreshRate(r int) {
k.manualRefreshRate = r

View File

@ -1,20 +1,29 @@
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority: /Users/test/ca.crt
server: https://1.2.3.4:8443
name: testCluster
- cluster:
certificate-authority: /Users/test/ca.crt
server: https://1.2.3.4:8443
name: testCluster
contexts:
- context:
cluster: testCluster
user: testUser
namespace: testNS
name: test
current-context: test
- context:
cluster: cluster1
user: user1
namespace: ns1
name: test1
- context:
cluster: cluster2
user: user2
namespace: ns2
name: test2
current-context: test1
preferences: {}
users:
- name: testUser
user:
client-certificate: /Users/test/client.crt
client-key: /Users/test/client.key
- name: user1
user:
client-certificate: /Users/test/client.crt
client-key: /Users/test/client.key
- name: user2
user:
client-certificate: /Users/test/client.crt
client-key: /Users/test/client.key