Skip to content

Commit 53d9832

Browse files
committed
Merge with master
2 parents 008b581 + 4c450ca commit 53d9832

File tree

11 files changed

+1682
-253
lines changed

11 files changed

+1682
-253
lines changed

CHANGELOG.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Customize Kubernetes Change Context (KUBECONFIG)
2222
| Image name | Size |
2323
|------------|------|
2424
| `devopscorner/k8s-context:latest` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/latest.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=latest) ![default-aws-cli](https://img.shields.io/static/v1?label=latest&message=default&color=brightgreen) ![latest-aws-cli](https://img.shields.io/static/v1?label=latest&message=alpine&color=orange) |
25-
| `devopscorner/k8s-context:1.1.4` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/1.1.4.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=1.1.4) ![latest-1.1.4](https://img.shields.io/static/v1?label=latest&message=1.1.4&color=orange) |
25+
| `devopscorner/k8s-context:1.1.5` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/1.1.5.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=1.1.5) ![latest-1.1.5](https://img.shields.io/static/v1?label=latest&message=1.1.5&color=orange) |
2626
| `devopscorner/k8s-context:alpine` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/alpine.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=alpine) |
2727
| `devopscorner/k8s-context:alpine-latest` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/alpine-latest.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=alpine-latest) |
2828
| `devopscorner/k8s-context:alpine-3.16` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/alpine-3.16.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=alpine-3.16) |
@@ -37,12 +37,22 @@ Customize Kubernetes Change Context (KUBECONFIG)
3737
| Image name | Size |
3838
|------------|------|
3939
| `devopscorner/k8s-context:1.1.3` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/1.1.3.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=1.1.3) |
40+
| `devopscorner/k8s-context:1.1.4` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/1.1.4.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=1.1.4) |
4041
| `devopscorner/k8s-context:alpine-3.15` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/alpine-3.15.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=alpine-3.15) |
4142
| `devopscorner/k8s-context:go1.19-alpine3.15` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/go1.19-alpine3.15.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=go1.19-alpine3.15) |
4243
| `devopscorner/k8s-context:go1.19.3-alpine3.15` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/go1.19.3-alpine3.15.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=go1.19.3-alpine3.15) |
4344

4445
---
4546

47+
### version 1.1.5
48+
49+
- Remove `select`, merged into `switch`
50+
- Remove `show`
51+
- Refactoring `load` to have `list` capabilities
52+
- Switch interactive mode with change context
53+
54+
---
55+
4656
### version 1.1.4
4757

4858
- Fixing interactive mode for
@@ -84,4 +94,4 @@ Customize Kubernetes Change Context (KUBECONFIG)
8494
- Upgrade gomod, using GO `1.19.5`
8595
- Dockerfile Alpine-3.15 using `golang:1.19.3-alpine3.15`
8696
- Dockerfile Alpine-3.16 using `golang:1.19.5-alpine3.16`
87-
- Dockerfile Alpine-3.17 using `golang:1.19.5-alpine3.17`
97+
- Dockerfile Alpine-3.17 using `golang:1.19.5-alpine3.17`

README.md

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Customize Kubernetes Change Context (KUBECONFIG)
2525
| Image name | Size |
2626
|------------|------|
2727
| `devopscorner/k8s-context:latest` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/latest.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=latest) ![default-aws-cli](https://img.shields.io/static/v1?label=latest&message=default&color=brightgreen) ![latest-aws-cli](https://img.shields.io/static/v1?label=latest&message=alpine&color=orange) |
28-
| `devopscorner/k8s-context:1.1.4` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/1.1.4.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=1.1.4) ![latest-1.1.4](https://img.shields.io/static/v1?label=latest&message=1.1.4&color=orange) |
28+
| `devopscorner/k8s-context:1.1.5` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/1.1.5.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=1.1.5) ![latest-1.1.5](https://img.shields.io/static/v1?label=latest&message=1.1.5&color=orange) |
2929
| `devopscorner/k8s-context:alpine` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/alpine.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=alpine) |
3030
| `devopscorner/k8s-context:alpine-latest` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/alpine-latest.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=alpine-latest) |
3131
| `devopscorner/k8s-context:alpine-3.16` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/alpine-3.16.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=alpine-3.16) |
@@ -40,6 +40,7 @@ Customize Kubernetes Change Context (KUBECONFIG)
4040
| Image name | Size |
4141
|------------|------|
4242
| `devopscorner/k8s-context:1.1.3` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/1.1.3.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=1.1.3) |
43+
| `devopscorner/k8s-context:1.1.4` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/1.1.4.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=1.1.4) |
4344
| `devopscorner/k8s-context:alpine-3.15` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/alpine-3.15.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=alpine-3.15) |
4445
| `devopscorner/k8s-context:go1.19-alpine3.15` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/go1.19-alpine3.15.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=go1.19-alpine3.15) |
4546
| `devopscorner/k8s-context:go1.19.3-alpine3.15` | [![docker image size](https://img.shields.io/docker/image-size/devopscorner/k8s-context/go1.19.3-alpine3.15.svg?label=Image%20size&logo=docker)](https://hub.docker.com/repository/docker/devopscorner/k8s-context/tags?page=1&ordering=last_updated&name=go1.19.3-alpine3.15) |
@@ -66,12 +67,10 @@ Available Commands:
6667
completion Generate the autocompletion script for the specified shell
6768
get Get Kubernetes resources (ns, svc, deploy, po)
6869
help Help about any command
69-
list List the available contexts in the kubeconfig file
70+
list List all available Kubernetes contexts
7071
load Load a kubeconfig file
7172
merge Merge multiple kubeconfig files
72-
select Select a context from the kubeconfig file
73-
show Show the current context
74-
switch Switch to a different context
73+
switch Switch to different context
7574
version Print the version number of k8s-context
7675
7776
Flags:
@@ -163,13 +162,19 @@ Use "k8s-context [command] --help" for more information about a command.
163162
./k8s-context merge $HOME/.kube/config $HOME/.kube/config-staging-dev $HOME/.kube/config-staging-uat $HOME/.kube/config-staging-qa
164163
```
165164
166-
- List All KUBECONFIG Files Inside `~/.kube` Folder -- Interactive Mode
165+
- Discovery All KUBECONFIG Files Inside `~/.kube` Folder -- Interactive Mode
167166
```
168167
./k8s-context load
169168
---
170169
Select a kubeconfig file: [Use arrows to move, type to filter]
171170
> /home/devopscorner/.kube/.switch_tmp/config.1072356766.tmp
172171
/home/devopscorner/.kube/.switch_tmp/config.3841581520.tmp
172+
173+
Available Kubernetes contexts:
174+
arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-lab
175+
arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-dev-staging
176+
arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-uat-staging
177+
arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-production
173178
```
174179
175180
- List Context(s) -- Interactive Mode
@@ -180,42 +185,36 @@ Use "k8s-context [command] --help" for more information about a command.
180185
-- or --
181186
182187
## Default KUBECONFIG path (`/.kube/config`) ##
183-
./k8s-context lists
188+
./k8s-context list
184189
---
185190
arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-lab
186191
187192
## Spesific Kubeconfig ##
188-
./k8s-context lists -l $HOME/.kube/config-cluster
193+
./k8s-context list -l $HOME/.kube/config-cluster
189194
---
190195
Available Kubernetes contexts:
191196
arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-dev-staging
192197
arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-uat-staging
193198
```
194199
195-
- Select Context(s) -- Interactive Mode
200+
- Switch (select) Context(s) -- Interactive Mode
196201
```
197202
## Default KUBECONFIG path (`/.kube/config`) ##
198-
./k8s-context select
203+
./k8s-context switch
199204
---
200205
? Select a context [Use arrows to move, type to filter]
201206
> arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-lab
202207
208+
> Changed context to: arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-dev-staging
209+
203210
## Spesific Kubeconfig ##
204-
./k8s-context select -l $HOME/.kube/config-cluster
211+
./k8s-context switch -l $HOME/.kube/config-cluster
205212
---
206213
? Select a context [Use arrows to move, type to filter]
207214
> arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-dev-staging
208215
arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorfner-uat-staging
209-
```
210-
211-
- Show Context (Current Context)
212-
```
213-
KUBECONFIG=$HOME/.kube/config
214-
kubectl config get-contexts
215-
216-
-- or --
217216
218-
./k8s-context show
217+
> Changed context to: arn:aws:eks:ap-southeast-1:YOUR_AWS_ACCOUNT:cluster/devopscorner-dev-staging
219218
```
220219
221220
- Run Spesific KUBECONFIG

clone.json

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,11 @@
11
{
2-
"count": 4331,
3-
"uniques": 299,
2+
"count": 4300,
3+
"uniques": 301,
44
"clones": [
5-
{
6-
"timestamp": "2023-03-08T00:00:00Z",
7-
"count": 138,
8-
"uniques": 86
9-
},
10-
{
11-
"timestamp": "2023-03-09T00:00:00Z",
12-
"count": 311,
13-
"uniques": 131
14-
},
155
{
166
"timestamp": "2023-03-10T00:00:00Z",
17-
"count": 314,
18-
"uniques": 123
7+
"count": 119,
8+
"uniques": 67
199
},
2010
{
2111
"timestamp": "2023-03-11T00:00:00Z",
@@ -74,8 +64,18 @@
7464
},
7565
{
7666
"timestamp": "2023-03-22T00:00:00Z",
77-
"count": 156,
78-
"uniques": 95
67+
"count": 314,
68+
"uniques": 135
69+
},
70+
{
71+
"timestamp": "2023-03-23T00:00:00Z",
72+
"count": 286,
73+
"uniques": 133
74+
},
75+
{
76+
"timestamp": "2023-03-24T00:00:00Z",
77+
"count": 169,
78+
"uniques": 97
7979
}
8080
]
8181
}

src/features/context.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package features
22

33
import (
4+
"errors"
45
"fmt"
6+
"io/ioutil"
57

68
"github.com/AlecAivazis/survey/v2"
79
"k8s.io/client-go/kubernetes"
@@ -160,3 +162,34 @@ func ShowContext(kc *KubeConfig) error {
160162

161163
return nil
162164
}
165+
166+
func ChangeKubeconfigContext(kubeconfigPath string, contextName string) error {
167+
// Load the Kubernetes configuration file.
168+
kubeconfigBytes, err := ioutil.ReadFile(kubeconfigPath)
169+
if err != nil {
170+
return err
171+
}
172+
173+
// Parse the configuration file into an API object.
174+
kubeconfig, err := clientcmd.Load(kubeconfigBytes)
175+
if err != nil {
176+
return err
177+
}
178+
179+
// Check if the specified context exists.
180+
if _, ok := kubeconfig.Contexts[contextName]; !ok {
181+
return errors.New("context does not exist in the Kubernetes configuration file")
182+
}
183+
184+
// Change the current context to the new context.
185+
kubeconfig.CurrentContext = contextName
186+
187+
// Write the modified configuration back to the file.
188+
err = clientcmd.ModifyConfig(clientcmd.NewDefaultPathOptions(), *kubeconfig, true)
189+
if err != nil {
190+
return err
191+
}
192+
193+
fmt.Printf("\n> Changed context to: %s\n", kubeconfig.CurrentContext)
194+
return nil
195+
}

0 commit comments

Comments
 (0)