Skip to content

Commit 7475ce9

Browse files
author
Oleg Sucharevich
authored
allow to overwrite namespace and service account (#5)
* allow overwriting namespace and service account when running stevedore with --context (-c) flag * update readme
1 parent ad28041 commit 7475ce9

File tree

5 files changed

+76
-30
lines changed

5 files changed

+76
-30
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ OPTIONS:
2222
--context value, -c value Add spesific cluster
2323
--api-host value Codefresh API host (default: "http://g.codefresh.io/") [$CODEFRESH_URL]
2424
--token value Codefresh API Token [$CODEFRESH_TOKEN]
25-
--config value Kubernetes config file to be used as input (default: "/Users/oleg/.kube/config") [$KUBECONFIG]
25+
--config value Kubernetes config file to be used as input (default: "") [$KUBECONFIG]
2626
```
2727

2828
# Run as docker container

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.1.2
1+
1.1.3

pkg/cmd/cmd.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ func SetupCli() *cli.App {
1414
app.Name = "Stevedore"
1515
app.Description = "Integrate your connected clusters to your Codefresh account"
1616
app.Email = "[email protected]"
17-
app.Version = "1.1.2"
17+
app.Version = "1.1.3"
1818
setupCommands(app)
1919
return app
2020
}
@@ -63,6 +63,18 @@ func setupCommands(app *cli.App) {
6363
Value: "https://g.codefresh.io/",
6464
EnvVar: "CODEFRESH_URL",
6565
},
66+
cli.StringFlag{
67+
Name: "namespace",
68+
Usage: "Which namespace to use while adding cluster to Codefresh (only with --context)",
69+
Value: "default",
70+
EnvVar: "NAMESPACE",
71+
},
72+
cli.StringFlag{
73+
Name: "serviceaccount",
74+
Usage: "Which service account to use while adding cluster to Codefresh (only with --context)",
75+
Value: "default",
76+
EnvVar: "SERVICE_ACCOUNT",
77+
},
6678
},
6779
},
6880
}

pkg/kubernetes/kubernetes.go

Lines changed: 60 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
type (
1717
API interface {
1818
GoOverAllContexts()
19-
GoOverContextByName(string)
19+
GoOverContextByName(string, string, string)
2020
GoOverCurrentContext()
2121
}
2222

@@ -35,56 +35,66 @@ func getDefaultOverride() clientcmd.ConfigOverrides {
3535
}
3636
}
3737

38-
func goOverContext(contextName string, config clientcmd.ClientConfig, logger *log.Entry, codefresh codefresh.API, r reporter.Reporter) error {
39-
clientCnf, e := config.ClientConfig()
38+
type getOverContextOptions struct {
39+
name string
40+
namespace string
41+
serviceaccount string
42+
config clientcmd.ClientConfig
43+
logger *log.Entry
44+
codefresh codefresh.API
45+
reporter reporter.Reporter
46+
}
47+
48+
func goOverContext(options *getOverContextOptions) error {
49+
clientCnf, e := options.config.ClientConfig()
4050
if e != nil {
4151
message := fmt.Sprintf("Failed to create config with error:\n%s", e)
42-
logger.Warn(message)
52+
options.logger.Warn(message)
4353
return e
4454
}
45-
logger.Info("Created config for context")
55+
options.logger.Info("Created config for context")
4656

47-
logger.Info("Creating rest client")
57+
options.logger.Info("Creating rest client")
4858
clientset, e := kubeConfig.NewForConfig(clientCnf)
4959
if e != nil {
5060
message := fmt.Sprintf("Failed to create kubernetes client with error:\n%s", e)
51-
logger.Warn(message)
61+
options.logger.Warn(message)
5262
return e
5363
}
54-
logger.Info("Created client set for context")
64+
options.logger.Info("Created client set for context")
5565

56-
logger.Info("Fetching service account from cluster")
57-
sa, e := clientset.CoreV1().ServiceAccounts("default").Get("default", metav1.GetOptions{})
66+
options.logger.Info("Fetching service account from cluster")
67+
sa, e := clientset.CoreV1().ServiceAccounts(options.namespace).Get(options.serviceaccount, metav1.GetOptions{})
5868
if e != nil {
5969
message := fmt.Sprintf("Failed to get service account token with error:\n%s", e)
60-
logger.Warn(message)
70+
options.logger.Warn(message)
6171
return e
6272
}
6373
secretName := string(sa.Secrets[0].Name)
6474
namespace := sa.Namespace
65-
logger.WithFields(log.Fields{
75+
options.logger.WithFields(log.Fields{
6676
"secret_name": secretName,
6777
"namespace": namespace,
6878
}).Info(fmt.Sprint("Found service account accisiated with secret"))
6979

70-
logger.Info("Fetching secret from cluster")
80+
options.logger.Info("Fetching secret from cluster")
7181
secret, e := clientset.CoreV1().Secrets(namespace).Get(secretName, metav1.GetOptions{})
7282
if e != nil {
7383
message := fmt.Sprintf("Failed to get secrets with error:\n%s", e)
74-
logger.Warn(message)
84+
options.logger.Warn(message)
7585
return e
7686
}
77-
logger.Info(fmt.Sprint("Found secret"))
87+
options.logger.Info(fmt.Sprint("Found secret"))
7888

79-
logger.Info(fmt.Sprint("Creating cluster in Codefresh"))
80-
result, e := codefresh.Create(clientCnf.Host, contextName, secret.Data["token"], secret.Data["ca.crt"])
89+
options.logger.Info(fmt.Sprint("Creating cluster in Codefresh"))
90+
result, e := options.codefresh.Create(clientCnf.Host, options.name, secret.Data["token"], secret.Data["ca.crt"])
8191
if e != nil {
8292
message := fmt.Sprintf("Failed to add cluster with error:\n%s", e)
83-
logger.Error(message)
93+
options.logger.Error(message)
8494
return e
8595
}
86-
r.AddToReport(contextName, reporter.SUCCESS, string(result))
87-
logger.Info(fmt.Sprint("Cluster added!"))
96+
options.reporter.AddToReport(options.name, reporter.SUCCESS, string(result))
97+
options.logger.Info(fmt.Sprint("Cluster added!"))
8898
return nil
8999
}
90100

@@ -98,21 +108,39 @@ func (kube *kubernetes) GoOverAllContexts() {
98108
logger.Info("Creating config")
99109
override := getDefaultOverride()
100110
config := clientcmd.NewNonInteractiveClientConfig(*kube.config, contextName, &override, nil)
101-
err := goOverContext(contextName, config, logger, kube.codefresh, kube.reporter)
111+
options := &getOverContextOptions{
112+
name: contextName,
113+
config: config,
114+
logger: logger,
115+
codefresh: kube.codefresh,
116+
reporter: kube.reporter,
117+
}
118+
err := goOverContext(options)
102119
if err != nil {
103120
kube.reporter.AddToReport(contextName, reporter.FAILED, err.Error())
104121
continue
105122
}
106123
}
107124
}
108125

109-
func (kube *kubernetes) GoOverContextByName(contextName string) {
126+
func (kube *kubernetes) GoOverContextByName(contextName string, namespace string, serviceaccount string) {
110127
override := getDefaultOverride()
111128
config := clientcmd.NewNonInteractiveClientConfig(*kube.config, contextName, &override, nil)
112129
logger := log.WithFields(log.Fields{
113-
"context_name": contextName,
130+
"context_name": contextName,
131+
"namespace": namespace,
132+
"serviceaccount": serviceaccount,
114133
})
115-
err := goOverContext(contextName, config, logger, kube.codefresh, kube.reporter)
134+
options := &getOverContextOptions{
135+
name: contextName,
136+
config: config,
137+
logger: logger,
138+
codefresh: kube.codefresh,
139+
reporter: kube.reporter,
140+
namespace: namespace,
141+
serviceaccount: serviceaccount,
142+
}
143+
err := goOverContext(options)
116144
if err != nil {
117145
kube.reporter.AddToReport(contextName, reporter.FAILED, err.Error())
118146
}
@@ -129,8 +157,14 @@ func (kube *kubernetes) GoOverCurrentContext() {
129157
logger := log.WithFields(log.Fields{
130158
"context_name": contextName,
131159
})
132-
133-
err = goOverContext(contextName, config, logger, kube.codefresh, kube.reporter)
160+
options := &getOverContextOptions{
161+
name: contextName,
162+
config: config,
163+
logger: logger,
164+
codefresh: kube.codefresh,
165+
reporter: kube.reporter,
166+
}
167+
err = goOverContext(options)
134168
if err != nil {
135169
kube.reporter.AddToReport(contextName, reporter.FAILED, err.Error())
136170
}

stevedore/stevedore.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func Init(c *cli.Context) {
1717
if runOnAllContexts {
1818
kubernetesAPI.GoOverAllContexts()
1919
} else if runOnContext != "" {
20-
kubernetesAPI.GoOverContextByName(runOnContext)
20+
kubernetesAPI.GoOverContextByName(runOnContext, c.String("namespace"), c.String("serviceaccount"))
2121
} else {
2222
kubernetesAPI.GoOverCurrentContext()
2323
}

0 commit comments

Comments
 (0)