Skip to content

Commit 1a541d8

Browse files
committed
Delete kubeconfig file for the given kubecontext
1 parent f389b5a commit 1a541d8

File tree

6 files changed

+64
-27
lines changed

6 files changed

+64
-27
lines changed

cmd/generate.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55
"fmt"
66
"os"
77

8+
"github.com/arunvelsriram/kube-tmuxp/pkg/filesystem"
9+
"github.com/arunvelsriram/kube-tmuxp/pkg/kubeconfig"
810
"github.com/arunvelsriram/kube-tmuxp/pkg/kubetmuxp"
911
"github.com/spf13/cobra"
1012
)
@@ -20,14 +22,19 @@ var generateCmd = &cobra.Command{
2022
os.Exit(1)
2123
}
2224

23-
kubetmuxpCfg := kubetmuxp.NewConfig(bufio.NewReader(reader))
25+
bufioReader := bufio.NewReader(reader)
26+
kubeCfg := kubeconfig.New(filesystem.Default{})
27+
kubetmuxpCfg := kubetmuxp.New(bufioReader, kubeCfg)
2428
err = kubetmuxpCfg.Load()
2529
if err != nil {
2630
fmt.Println(err)
2731
os.Exit(1)
2832
}
2933

30-
kubetmuxpCfg.Process()
34+
if err = kubetmuxpCfg.Process(); err != nil {
35+
fmt.Println(err)
36+
os.Exit(1)
37+
}
3138
},
3239
}
3340

pkg/filesystem/filesystem.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@ package filesystem
22

33
import "os"
44

5-
// FileSystem abcd
5+
// FileSystem represents a filesystem
66
type FileSystem interface {
77
Remove(file string) error
88
}
99

10-
type defaultFS struct{}
10+
// Default represents the Operating System's filesystem
11+
type Default struct{}
1112

12-
// Remove abcd
13-
func (d *defaultFS) Remove(file string) error {
13+
// Remove removes a file from Default filesystem
14+
func (Default) Remove(file string) error {
1415
if err := os.Remove(file); err != nil {
1516
return err
1617
}

pkg/kubeconfig/kubeconfig.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
package kubeconfig
22

33
import (
4+
"fmt"
5+
"os"
6+
"path"
7+
48
"github.com/arunvelsriram/kube-tmuxp/pkg/filesystem"
9+
homedir "github.com/mitchellh/go-homedir"
510
)
611

712
// KubeConfig exposes methods to perform actions on kubeconfig
813
type KubeConfig struct {
914
filesystem filesystem.FileSystem
15+
dir string
1016
}
1117

12-
// Delete deletes the given kubeconfig file
13-
func (k *KubeConfig) Delete(file string) error {
18+
// Delete deletes the kubeconfig file for the given context
19+
func (k *KubeConfig) Delete(context string) error {
20+
file := path.Join(k.dir, context)
21+
1422
if err := k.filesystem.Remove(file); err != nil {
1523
return err
1624
}
@@ -20,7 +28,15 @@ func (k *KubeConfig) Delete(file string) error {
2028

2129
// New returns a new KubeConfig
2230
func New(fs filesystem.FileSystem) KubeConfig {
31+
home, err := homedir.Dir()
32+
if err != nil {
33+
fmt.Println(err)
34+
os.Exit(1)
35+
}
36+
kubeConfigsDir := path.Join(home, ".kube/configs")
37+
2338
return KubeConfig{
2439
filesystem: fs,
40+
dir: kubeConfigsDir,
2541
}
2642
}

pkg/kubeconfig/kubeconfig_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ func TestDelete(t *testing.T) {
2323
ctrl := gomock.NewController(t)
2424
defer ctrl.Finish()
2525
mockFS := mock.NewFileSystem(ctrl)
26-
mockFS.EXPECT().Remove("kubeconfig.yaml").Return(nil)
26+
mockFS.EXPECT().Remove("/Users/arunvelsriram/.kube/configs/context-name").Return(nil)
2727

2828
cfg := kubeconfig.New(mockFS)
29-
err := cfg.Delete("kubeconfig.yaml")
29+
err := cfg.Delete("context-name")
3030

3131
assert.Nil(t, err)
3232
})
@@ -35,10 +35,10 @@ func TestDelete(t *testing.T) {
3535
ctrl := gomock.NewController(t)
3636
defer ctrl.Finish()
3737
mockFS := mock.NewFileSystem(ctrl)
38-
mockFS.EXPECT().Remove("kubeconfig.yaml").Return(fmt.Errorf("some error"))
38+
mockFS.EXPECT().Remove("/Users/arunvelsriram/.kube/configs/context-name").Return(fmt.Errorf("some error"))
3939

4040
cfg := kubeconfig.New(mockFS)
41-
err := cfg.Delete("kubeconfig.yaml")
41+
err := cfg.Delete("context-name")
4242

4343
assert.EqualError(t, err, "some error")
4444
})

pkg/kubetmuxp/kubetmuxp.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package kubetmuxp
22

33
import (
4-
"fmt"
54
"io"
65
"io/ioutil"
76

7+
"github.com/arunvelsriram/kube-tmuxp/pkg/kubeconfig"
88
yaml "gopkg.in/yaml.v2"
99
)
1010

11-
// Envs abcd
11+
// Envs reprensents environemnt variables
1212
type Envs map[string]string
1313

1414
//Cluster represents a Kubernetes cluster
@@ -36,6 +36,7 @@ type Projects []Project
3636
type Config struct {
3737
Projects `yaml:"projects"`
3838
reader io.Reader
39+
kubeCfg kubeconfig.KubeConfig
3940
}
4041

4142
// Load constructs kube-tmuxp config from given file
@@ -57,16 +58,19 @@ func (c *Config) Load() error {
5758
func (c *Config) Process() error {
5859
for _, project := range c.Projects {
5960
for _, cluster := range project.Clusters {
60-
fmt.Println(cluster)
61+
if err := c.kubeCfg.Delete(cluster.Context); err != nil {
62+
return err
63+
}
6164
}
6265
}
6366

6467
return nil
6568
}
6669

67-
// NewConfig creates a new Config
68-
func NewConfig(reader io.Reader) Config {
70+
// New creates a new kube-tmuxp Config
71+
func New(reader io.Reader, kubeCfg kubeconfig.KubeConfig) Config {
6972
return Config{
70-
reader: reader,
73+
reader: reader,
74+
kubeCfg: kubeCfg,
7175
}
7276
}

pkg/kubetmuxp/kubetmuxp_test.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,20 @@ import (
55
"strings"
66
"testing"
77

8+
"github.com/arunvelsriram/kube-tmuxp/pkg/filesystem"
9+
"github.com/arunvelsriram/kube-tmuxp/pkg/kubeconfig"
810
"github.com/arunvelsriram/kube-tmuxp/pkg/kubetmuxp"
911
"github.com/stretchr/testify/assert"
1012
)
1113

12-
func TestNewConfig(t *testing.T) {
14+
func TestNew(t *testing.T) {
1315
var reader io.Reader
14-
cfg := kubetmuxp.NewConfig(reader)
16+
var fs filesystem.FileSystem
17+
kubeCfg := kubeconfig.New(fs)
1518

16-
assert.NotNil(t, cfg)
19+
kubetmuxpCfg := kubetmuxp.New(reader, kubeCfg)
20+
21+
assert.NotNil(t, kubetmuxpCfg)
1722
}
1823

1924
func TestLoadConfig(t *testing.T) {
@@ -29,9 +34,11 @@ projects:
2934
envs:
3035
TEST_ENV: test-value`
3136
reader := strings.NewReader(content)
37+
var fs filesystem.FileSystem
38+
kubeCfg := kubeconfig.New(fs)
39+
kubetmuxpCfg := kubetmuxp.New(reader, kubeCfg)
3240

33-
cfg := kubetmuxp.NewConfig(reader)
34-
err := cfg.Load()
41+
err := kubetmuxpCfg.Load()
3542

3643
expectedProjects := kubetmuxp.Projects{
3744
{
@@ -51,16 +58,18 @@ projects:
5158
}
5259

5360
assert.Nil(t, err)
54-
assert.Equal(t, cfg.Projects, expectedProjects)
61+
assert.Equal(t, kubetmuxpCfg.Projects, expectedProjects)
5562
})
5663

5764
t.Run("should return error if loading fails", func(t *testing.T) {
5865
reader := strings.NewReader("invalid yaml")
66+
var fs filesystem.FileSystem
67+
kubeCfg := kubeconfig.New(fs)
68+
kubetmuxpCfg := kubetmuxp.New(reader, kubeCfg)
5969

60-
cfg := kubetmuxp.NewConfig(reader)
61-
err := cfg.Load()
70+
err := kubetmuxpCfg.Load()
6271

6372
assert.NotNil(t, err)
64-
assert.Equal(t, cfg.Projects, kubetmuxp.Projects(nil))
73+
assert.Equal(t, kubetmuxpCfg.Projects, kubetmuxp.Projects(nil))
6574
})
6675
}

0 commit comments

Comments
 (0)