Skip to content

Commit ee7f5b9

Browse files
Merge pull request #7 from Bisnode/token_handling_correction
Fixed token lookup since token moved out from kubeconfig
2 parents aa187de + fa6bf66 commit ee7f5b9

File tree

8 files changed

+154
-90
lines changed

8 files changed

+154
-90
lines changed

cmd/create_secret.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
)
2828

2929
var container string
30+
var app string
3031

3132
// secretCmd represents the secret command
3233
var createSecretCmd = &cobra.Command{
@@ -51,7 +52,7 @@ kubectl tbac create secret my-secret --container opa -d "USER=foo" -d "PWD=bar"
5152
`,
5253

5354
Run: func(cmd *cobra.Command, args []string) {
54-
clientSet, err := util.CreateClientSet()
55+
clientSet, err := util.CreateClientSet(&Context)
5556
if err != nil {
5657
fmt.Printf("Failed to create clientSet: %v\n", err)
5758
os.Exit(1)
@@ -65,13 +66,18 @@ kubectl tbac create secret my-secret --container opa -d "USER=foo" -d "PWD=bar"
6566
// CreateSecret creates a secret in teams namespace
6667
func CreateSecret(clientSet kubernetes.Interface, secretName, container *string, data []string) (err error) {
6768
secretsClient := clientSet.CoreV1().Secrets(Namespace)
69+
appLabel := *secretName
70+
71+
if app != "" {
72+
appLabel = app
73+
}
6874

6975
newSecret := &v1.Secret{
7076
ObjectMeta: metav1.ObjectMeta{
7177
Name: *secretName + "-" + *container,
7278
Namespace: Namespace,
7379
Labels: map[string]string{
74-
"app": *secretName,
80+
"app": appLabel,
7581
"tbac.bisnode.com/container": *container,
7682
"tbac.bisnode.com/sandbox": fmt.Sprintf("%v", sandbox),
7783
},
@@ -96,4 +102,5 @@ func init() {
96102
createCmd.AddCommand(createSecretCmd)
97103
createSecretCmd.Flags().StringArrayVarP(&data, "data", "d", []string{}, "Data to add to secret")
98104
createSecretCmd.Flags().StringVarP(&container, "container", "c", "default", "Which container to create secret for. Only set this if you want to create a secret for a sidecar. (Default: \"default\"")
105+
createSecretCmd.Flags().StringVarP(&app, "app", "a", "", "Set the app label different than the secret name. Note that the app label must match the app label on the service that should use this secret.")
99106
}

cmd/delete_secret.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ kubectl tbac delete secret my-secret"
4343
kubectl tbac delete secret my-secret --namespace team-platform"
4444
`,
4545
Run: func(cmd *cobra.Command, args []string) {
46-
clientSet, err := util.CreateClientSet()
46+
clientSet, err := util.CreateClientSet(&Context)
4747
if err != nil {
4848
fmt.Printf("Failed to create clientSet: %v\n", err)
4949
os.Exit(1)

cmd/get_secret.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ var getSecretCmd = &cobra.Command{
4545
Short: "Get a list of secrets or describe one.",
4646
Long: `List secrets in team namespace or describe one.`,
4747
Run: func(cmd *cobra.Command, args []string) {
48-
clientSet, err := util.CreateClientSet()
48+
clientSet, err := util.CreateClientSet(&Context)
4949
if err != nil {
5050
fmt.Printf("Failed to create clientSet: %v\n", err)
5151
os.Exit(1)
@@ -102,6 +102,10 @@ func GetSecretList(clientSet kubernetes.Interface) (secrets []string, err error)
102102
for _, s := range secretList.Items {
103103
secrets = append(secrets, s.Name)
104104
}
105+
106+
if len(secretList.Items) == 0 {
107+
fmt.Println("No resources found.")
108+
}
105109
return secrets, nil
106110
}
107111

@@ -114,10 +118,20 @@ func GetSecretDescription(clientSet kubernetes.Interface, secretName string) (se
114118
CoreV1().
115119
Secrets(Namespace).
116120
List(listOpts)
121+
117122
if err != nil {
118123
fmt.Printf("Failed to list secrets in namespace %v: %v\n", Namespace, err.Error())
119124
return nil, err
120125
}
126+
127+
// Due to an issue with the ListOptions filters in
128+
// kubernetes fake-client that is used for testing
129+
// we cannot check for exactly one result
130+
if len(secrets.Items) < 1 {
131+
err := fmt.Errorf("Secret not found: %v/%v\n", Namespace, secretName)
132+
return nil, err
133+
}
134+
121135
data := make(map[string][]byte)
122136
for k, v := range secrets.Items[0].Data {
123137
data[k] = v

cmd/patch_secret.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ kubectl tbac patch secret my-secret --namespace team-platform -d "USER=foo" -d "
5151
kubectl tbac patch secret my-secret --remove-data USERNAME --remove-data PASSWORD
5252
`,
5353
Run: func(cmd *cobra.Command, args []string) {
54-
clientSet, err := util.CreateClientSet()
54+
clientSet, err := util.CreateClientSet(&Context)
5555
if err != nil {
5656
fmt.Printf("Failed to create clientSet: %v\n", err)
5757
os.Exit(1)
@@ -115,6 +115,10 @@ func PatchSecret(clientSet kubernetes.Interface, secretName *string, removeData,
115115
}
116116
}
117117

118+
if patchSecret.Data == nil {
119+
patchSecret.Data = make(map[string][]byte)
120+
}
121+
118122
for k, v := range util.AssembleInputData(*updateData) {
119123
patchSecret.Data[k] = v
120124
}

cmd/root.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ import (
2727
// Namespace in kubernetes.
2828
var Namespace string
2929

30+
// Context name
31+
var Context string
32+
3033
var (
3134
cfgFile string
3235
verbose bool
@@ -63,6 +66,7 @@ func init() {
6366
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "verbose output")
6467
rootCmd.PersistentFlags().BoolVarP(&sandbox, "sandbox", "s", false, "Set if you want to work in a sandbox Namespace.")
6568
rootCmd.PersistentFlags().StringVarP(&Namespace, "namespace", "n", "", "Namespace to create secret in. Usually only needed when member of more than one team.")
69+
rootCmd.PersistentFlags().StringVarP(&Context, "context", "", "", "Set context name.")
6670

6771
// Hide flags
6872
rootCmd.PersistentFlags().MarkHidden("lab")
@@ -81,7 +85,7 @@ func identifyTeam() {
8185
} else {
8286
matchPrefix := "sec-tbac-team-"
8387
trimPrefix := "sec-tbac-"
84-
teams = util.WhoAmI(&matchPrefix, &trimPrefix)
88+
teams = util.WhoAmI(&matchPrefix, &trimPrefix, &Context)
8589
}
8690

8791
if len(teams) == 1 {

go.mod

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,19 @@ module github.com/Bisnode/kubectl-tbac
33
go 1.14
44

55
require (
6+
cloud.google.com/go v0.38.0 // indirect
67
github.com/Azure/go-autorest v11.1.2+incompatible // indirect
7-
github.com/coreos/etcd v3.3.10+incompatible
8-
github.com/dgrijalva/jwt-go v3.2.0+incompatible
8+
github.com/Azure/go-autorest/autorest v0.9.0 // indirect
9+
github.com/Bisnode/kubectl-login v1.1.0
910
github.com/golang/protobuf v1.3.5 // indirect
10-
github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8 // indirect
11-
github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7 // indirect
11+
github.com/gophercloud/gophercloud v0.1.0 // indirect
12+
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect
1213
github.com/imdario/mergo v0.3.9 // indirect
1314
github.com/json-iterator/go v1.1.9 // indirect
14-
github.com/mitchellh/go-homedir v1.1.0
1515
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
1616
github.com/pkg/errors v0.9.1
17-
github.com/prometheus/client_golang v0.9.3
17+
github.com/skratchdot/open-golang v0.0.0-20190402232053-79abb63cd66e // indirect
1818
github.com/spf13/cobra v0.0.7
19-
github.com/spf13/viper v1.6.2
2019
github.com/stretchr/testify v1.4.0
2120
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59 // indirect
2221
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect
@@ -25,8 +24,10 @@ require (
2524
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect
2625
google.golang.org/appengine v1.6.5 // indirect
2726
k8s.io/api v0.15.11
28-
k8s.io/apimachinery v0.15.11
29-
k8s.io/client-go v0.15.11
27+
k8s.io/apimachinery v0.17.0
28+
k8s.io/client-go v11.0.0+incompatible
3029
k8s.io/utils v0.0.0-20200327001022-6496210b90e8 // indirect
3130
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e // indirect
3231
)
32+
33+
replace k8s.io/client-go => k8s.io/client-go v0.15.11

0 commit comments

Comments
 (0)