Skip to content

Commit a93eba3

Browse files
author
Oleg Sucharevich
authored
Add behind-firewall and name-overwrite flags (#7)
* Add behind-firewall and name-overwrite flags
1 parent 7475ce9 commit a93eba3

File tree

5 files changed

+109
-64
lines changed

5 files changed

+109
-64
lines changed

VERSION

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

pkg/cmd/cmd.go

Lines changed: 10 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.3"
17+
app.Version = "1.1.4"
1818
setupCommands(app)
1919
return app
2020
}
@@ -75,6 +75,15 @@ func setupCommands(app *cli.App) {
7575
Value: "default",
7676
EnvVar: "SERVICE_ACCOUNT",
7777
},
78+
cli.BoolFlag{
79+
Name: "behind-firewall, b",
80+
Usage: "Spesify whenever the cluster is behined firewall (only with --context)",
81+
},
82+
cli.StringFlag{
83+
Name: "name-overwrite",
84+
Usage: "Spesify under which name save the cluster in Codefresh, default is the same name as the context (only with --context)",
85+
EnvVar: "NAME_OVERWRITE",
86+
},
7887
},
7988
},
8089
}

pkg/codefresh/codefresh.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
type (
1313
API interface {
1414
Test(*requestPayload) error
15-
Create(string, string, []byte, []byte) ([]byte, error)
15+
Create(string, string, []byte, []byte, bool) ([]byte, error)
1616
}
1717

1818
codefreshAPI struct {
@@ -27,6 +27,7 @@ type (
2727
Selector string `json:"selector"`
2828
ServiceAccountToken []byte `json:"serviceAccountToken"`
2929
Host string `json:"host"`
30+
BehinedFirewall bool `json:"behindFirewall"`
3031
}
3132
)
3233

@@ -55,7 +56,7 @@ func (api *codefreshAPI) Test(payload *requestPayload) error {
5556
return nil
5657
}
5758

58-
func (api *codefreshAPI) Create(host string, name string, saToken []byte, crt []byte) ([]byte, error) {
59+
func (api *codefreshAPI) Create(host string, name string, saToken []byte, crt []byte, bf bool) ([]byte, error) {
5960
url := api.baseURL + "api/clusters/local/cluster"
6061
payload := &requestPayload{
6162
Type: "sat",
@@ -64,12 +65,15 @@ func (api *codefreshAPI) Create(host string, name string, saToken []byte, crt []
6465
Selector: name,
6566
ServiceAccountToken: saToken,
6667
ClientCa: crt,
68+
BehinedFirewall: bf,
6769
}
6870
mar, _ := json.Marshal(payload)
6971
p := strings.NewReader(string(mar))
70-
err := api.Test(payload)
71-
if err != nil {
72-
return nil, err
72+
if bf == false {
73+
err := api.Test(payload)
74+
if err != nil {
75+
return nil, err
76+
}
7377
}
7478
req, err := http.NewRequest("POST", url, p)
7579
if err != nil {

pkg/kubernetes/kubernetes.go

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

@@ -36,64 +36,78 @@ func getDefaultOverride() clientcmd.ConfigOverrides {
3636
}
3737

3838
type getOverContextOptions struct {
39-
name string
39+
contextName string
4040
namespace string
4141
serviceaccount string
4242
config clientcmd.ClientConfig
4343
logger *log.Entry
4444
codefresh codefresh.API
4545
reporter reporter.Reporter
46+
behindFirewall bool
47+
name string
4648
}
4749

4850
func goOverContext(options *getOverContextOptions) error {
49-
clientCnf, e := options.config.ClientConfig()
50-
if e != nil {
51-
message := fmt.Sprintf("Failed to create config with error:\n%s", e)
52-
options.logger.Warn(message)
53-
return e
54-
}
55-
options.logger.Info("Created config for context")
51+
var host string
52+
var ca []byte
53+
var token []byte
54+
if options.behindFirewall == false {
55+
clientCnf, e := options.config.ClientConfig()
56+
if e != nil {
57+
message := fmt.Sprintf("Failed to create config with error:\n%s", e)
58+
options.logger.Warn(message)
59+
return e
60+
}
61+
options.logger.Info("Created config for context")
62+
host = clientCnf.Host
5663

57-
options.logger.Info("Creating rest client")
58-
clientset, e := kubeConfig.NewForConfig(clientCnf)
59-
if e != nil {
60-
message := fmt.Sprintf("Failed to create kubernetes client with error:\n%s", e)
61-
options.logger.Warn(message)
62-
return e
63-
}
64-
options.logger.Info("Created client set for context")
64+
options.logger.Info("Creating rest client")
65+
clientset, e := kubeConfig.NewForConfig(clientCnf)
66+
if e != nil {
67+
message := fmt.Sprintf("Failed to create kubernetes client with error:\n%s", e)
68+
options.logger.Warn(message)
69+
return e
70+
}
71+
options.logger.Info("Created client set for context")
6572

66-
options.logger.Info("Fetching service account from cluster")
67-
sa, e := clientset.CoreV1().ServiceAccounts(options.namespace).Get(options.serviceaccount, metav1.GetOptions{})
68-
if e != nil {
69-
message := fmt.Sprintf("Failed to get service account token with error:\n%s", e)
70-
options.logger.Warn(message)
71-
return e
72-
}
73-
secretName := string(sa.Secrets[0].Name)
74-
namespace := sa.Namespace
75-
options.logger.WithFields(log.Fields{
76-
"secret_name": secretName,
77-
"namespace": namespace,
78-
}).Info(fmt.Sprint("Found service account accisiated with secret"))
73+
options.logger.Info("Fetching service account from cluster")
74+
sa, e := clientset.CoreV1().ServiceAccounts(options.namespace).Get(options.serviceaccount, metav1.GetOptions{})
75+
if e != nil {
76+
message := fmt.Sprintf("Failed to get service account token with error:\n%s", e)
77+
options.logger.Warn(message)
78+
return e
79+
}
80+
secretName := string(sa.Secrets[0].Name)
81+
namespace := sa.Namespace
82+
options.logger.WithFields(log.Fields{
83+
"secret_name": secretName,
84+
"namespace": namespace,
85+
}).Info(fmt.Sprint("Found service account accisiated with secret"))
7986

80-
options.logger.Info("Fetching secret from cluster")
81-
secret, e := clientset.CoreV1().Secrets(namespace).Get(secretName, metav1.GetOptions{})
82-
if e != nil {
83-
message := fmt.Sprintf("Failed to get secrets with error:\n%s", e)
84-
options.logger.Warn(message)
85-
return e
87+
options.logger.Info("Fetching secret from cluster")
88+
secret, e := clientset.CoreV1().Secrets(namespace).Get(secretName, metav1.GetOptions{})
89+
if e != nil {
90+
message := fmt.Sprintf("Failed to get secrets with error:\n%s", e)
91+
options.logger.Warn(message)
92+
return e
93+
}
94+
token = secret.Data["token"]
95+
ca = secret.Data["ca.crt"]
96+
options.logger.Info(fmt.Sprint("Found secret"))
97+
} else {
98+
host = ""
99+
token = nil
100+
ca = nil
86101
}
87-
options.logger.Info(fmt.Sprint("Found secret"))
88102

89103
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"])
104+
result, e := options.codefresh.Create(host, options.name, token, ca, options.behindFirewall)
91105
if e != nil {
92106
message := fmt.Sprintf("Failed to add cluster with error:\n%s", e)
93107
options.logger.Error(message)
94108
return e
95109
}
96-
options.reporter.AddToReport(options.name, reporter.SUCCESS, string(result))
110+
options.reporter.AddToReport(options.contextName, reporter.SUCCESS, string(result))
97111
options.logger.Info(fmt.Sprint("Cluster added!"))
98112
return nil
99113
}
@@ -109,11 +123,13 @@ func (kube *kubernetes) GoOverAllContexts() {
109123
override := getDefaultOverride()
110124
config := clientcmd.NewNonInteractiveClientConfig(*kube.config, contextName, &override, nil)
111125
options := &getOverContextOptions{
112-
name: contextName,
113-
config: config,
114-
logger: logger,
115-
codefresh: kube.codefresh,
116-
reporter: kube.reporter,
126+
contextName: contextName,
127+
config: config,
128+
logger: logger,
129+
codefresh: kube.codefresh,
130+
reporter: kube.reporter,
131+
behindFirewall: false,
132+
name: contextName,
117133
}
118134
err := goOverContext(options)
119135
if err != nil {
@@ -123,22 +139,30 @@ func (kube *kubernetes) GoOverAllContexts() {
123139
}
124140
}
125141

126-
func (kube *kubernetes) GoOverContextByName(contextName string, namespace string, serviceaccount string) {
127-
override := getDefaultOverride()
128-
config := clientcmd.NewNonInteractiveClientConfig(*kube.config, contextName, &override, nil)
142+
func (kube *kubernetes) GoOverContextByName(contextName string, namespace string, serviceaccount string, bf bool, name string) {
143+
var override clientcmd.ConfigOverrides
144+
var config clientcmd.ClientConfig
145+
if bf == false {
146+
override = getDefaultOverride()
147+
config = clientcmd.NewNonInteractiveClientConfig(*kube.config, contextName, &override, nil)
148+
}
129149
logger := log.WithFields(log.Fields{
130-
"context_name": contextName,
131-
"namespace": namespace,
132-
"serviceaccount": serviceaccount,
150+
"context_name": contextName,
151+
"namespace": namespace,
152+
"serviceaccount": serviceaccount,
153+
"behind_firewall": bf,
154+
"name": name,
133155
})
134156
options := &getOverContextOptions{
135-
name: contextName,
157+
contextName: contextName,
136158
config: config,
137159
logger: logger,
138160
codefresh: kube.codefresh,
139161
reporter: kube.reporter,
140162
namespace: namespace,
141163
serviceaccount: serviceaccount,
164+
behindFirewall: bf,
165+
name: name,
142166
}
143167
err := goOverContext(options)
144168
if err != nil {
@@ -158,11 +182,13 @@ func (kube *kubernetes) GoOverCurrentContext() {
158182
"context_name": contextName,
159183
})
160184
options := &getOverContextOptions{
161-
name: contextName,
162-
config: config,
163-
logger: logger,
164-
codefresh: kube.codefresh,
165-
reporter: kube.reporter,
185+
contextName: contextName,
186+
config: config,
187+
logger: logger,
188+
codefresh: kube.codefresh,
189+
reporter: kube.reporter,
190+
behindFirewall: false,
191+
name: contextName,
166192
}
167193
err = goOverContext(options)
168194
if err != nil {

stevedore/stevedore.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,21 @@ import (
99
)
1010

1111
func Init(c *cli.Context) {
12+
var name string
1213
codefreshAPI := codefresh.NewCodefreshAPI(c.String("api-host"), c.String("token"))
1314
reporter := reporter.NewReporter()
1415
kubernetesAPI := kubernetes.NewKubernetesAPI(c.String("config"), codefreshAPI, reporter)
1516
runOnAllContexts := c.IsSet("all")
1617
runOnContext := c.String("context")
18+
if c.IsSet("name-overwrite") {
19+
name = c.String("name-overwrite")
20+
} else {
21+
name = runOnContext
22+
}
1723
if runOnAllContexts {
1824
kubernetesAPI.GoOverAllContexts()
1925
} else if runOnContext != "" {
20-
kubernetesAPI.GoOverContextByName(runOnContext, c.String("namespace"), c.String("serviceaccount"))
26+
kubernetesAPI.GoOverContextByName(runOnContext, c.String("namespace"), c.String("serviceaccount"), c.Bool("behind-firewall"), name)
2127
} else {
2228
kubernetesAPI.GoOverCurrentContext()
2329
}

0 commit comments

Comments
 (0)