@@ -19,66 +19,122 @@ import (
19
19
20
20
var baseCodefreshURL = "https://g.codefresh.io/"
21
21
22
- func create (cli * cli.Context ) {
22
+ func getConfigOrDie () * api.Config {
23
+ return clientcmd .GetConfigFromFileOrDie (kubeConfigPath )
24
+ }
23
25
24
- cnf := clientcmd .GetConfigFromFileOrDie (kubeConfigPath )
25
- c := * cnf
26
- override := clientcmd.ConfigOverrides {
26
+ func getDefaultOverride () clientcmd.ConfigOverrides {
27
+ return clientcmd.ConfigOverrides {
27
28
ClusterInfo : api.Cluster {
28
29
Server : "" ,
29
30
},
30
31
}
31
- for contextName := range c .Contexts {
32
- logger := log .WithFields (log.Fields {
33
- "context_name" : contextName ,
34
- })
35
- logger .Info ("Found context" )
36
- config := clientcmd .NewNonInteractiveClientConfig (c , contextName , & override , nil )
37
- clientCnf , e := config .ClientConfig ()
38
-
39
- if e != nil {
40
- msg := fmt .Sprintf ("Failed to create config with error:\n %s\n \n " , e )
41
- logger .Warn (msg )
42
- continue
43
- }
44
- logger .Info ("Created config for context" )
32
+ }
33
+ func create (cli * cli.Context ) {
34
+ cnf := getConfigOrDie ()
35
+ c := * cnf
36
+ if runOnAllContexts {
37
+ goOverAllContexts (c )
38
+ } else if runOnContext != "" {
39
+ getOverContextByName (c , runOnContext )
40
+ } else {
41
+ goOverCurrentContext (c )
42
+ }
43
+ log .Info ("Operation is done, check your account setting" )
44
+ }
45
45
46
- clientset , e := kubernetes .NewForConfig (clientCnf )
47
- if e != nil {
48
- msg := fmt .Sprintf ("Failed to create kubernetes client with error:\n %s\n \n " , e )
49
- logger .Warn (msg )
50
- continue
51
- }
52
- logger .Info ("Created client set for context" )
46
+ func getLogger (name string ) * log.Entry {
47
+ return log .WithFields (log.Fields {
48
+ "context_name" : name ,
49
+ })
50
+ }
53
51
54
- sa , e := clientset .CoreV1 ().ServiceAccounts ("default" ).Get ("default" , metav1.GetOptions {})
55
- if e != nil {
56
- msg := fmt .Sprintf ("Failed to get service account token with error:\n %s\n \n " , e )
57
- logger .Warn (msg )
58
- continue
59
- }
60
- secretName := string (sa .Secrets [0 ].Name )
61
- namespace := sa .Secrets [0 ].Namespace
62
- logger .Info (fmt .Sprintf ("Found service account accisiated with secret: %s in namespace %s\n " , secretName , namespace ))
63
-
64
- secret , e := clientset .CoreV1 ().Secrets ("default" ).Get (secretName , metav1.GetOptions {})
65
- if e != nil {
66
- msg := fmt .Sprintf ("Failed to get secrets with error:\n %s\n \n " , e )
67
- logger .Warn (msg )
52
+ func goOverAllContexts (cnf api.Config ) {
53
+ contexts := cnf .Contexts
54
+ for contextName := range contexts {
55
+ logger := getLogger (contextName )
56
+ logger .Info ("Working on context" )
57
+ logger .Info ("Creating config" )
58
+ override := getDefaultOverride ()
59
+ config := clientcmd .NewNonInteractiveClientConfig (cnf , contextName , & override , nil )
60
+ err := goOverContext (contextName , config , logger )
61
+ if err != nil {
68
62
continue
69
63
}
70
- logger . Info ( fmt . Sprintf ( "Found secret" ))
64
+ }
71
65
72
- logger .Info (fmt .Sprintf ("Creating cluster in Codefresh" ))
73
- body , e := addCluser (clientCnf .Host , contextName , secret .Data ["token" ], secret .Data ["ca.crt" ])
74
- if e != nil {
75
- msg := fmt .Sprintf ("Failed to add cluster with error:\n %s\n \n " , e )
76
- logger .Warn (msg )
77
- continue
78
- }
79
- logger .Warn (fmt .Sprintf ("Added!\n %s\n \n " , string (body )))
66
+ }
67
+
68
+ func getOverContextByName (cnf api.Config , contextName string ) {
69
+ override := getDefaultOverride ()
70
+ config := clientcmd .NewNonInteractiveClientConfig (cnf , contextName , & override , nil )
71
+ logger := getLogger (contextName )
72
+ goOverContext (contextName , config , logger )
73
+ }
74
+
75
+ func goOverCurrentContext (cnf api.Config ) error {
76
+ override := getDefaultOverride ()
77
+ config := clientcmd .NewDefaultClientConfig (cnf , & override )
78
+ rawConfig , err := config .RawConfig ()
79
+ contextName := rawConfig .CurrentContext
80
+ logger := getLogger (contextName )
81
+ if err != nil {
82
+ return err
80
83
}
81
- log .Info ("Operation is done, check your account setting" )
84
+ goOverContext (contextName , config , logger )
85
+ return nil
86
+ }
87
+
88
+ func goOverContext (contextName string , config clientcmd.ClientConfig , logger * log.Entry ) error {
89
+ clientCnf , e := config .ClientConfig ()
90
+ if e != nil {
91
+ message := fmt .Sprintf ("Failed to create config with error:\n %s" , e )
92
+ logger .Warn (message )
93
+ return e
94
+ }
95
+ logger .Info ("Created config for context" )
96
+
97
+ logger .Info ("Creating rest client" )
98
+ clientset , e := kubernetes .NewForConfig (clientCnf )
99
+ if e != nil {
100
+ message := fmt .Sprintf ("Failed to create kubernetes client with error:\n %s" , e )
101
+ logger .Warn (message )
102
+ return e
103
+ }
104
+ logger .Info ("Created client set for context" )
105
+
106
+ logger .Info ("Fetching service account from cluster" )
107
+ sa , e := clientset .CoreV1 ().ServiceAccounts ("default" ).Get ("default" , metav1.GetOptions {})
108
+ if e != nil {
109
+ message := fmt .Sprintf ("Failed to get service account token with error:\n %s" , e )
110
+ logger .Warn (message )
111
+ return e
112
+ }
113
+ secretName := string (sa .Secrets [0 ].Name )
114
+ namespace := sa .Namespace
115
+ logger .WithFields (log.Fields {
116
+ "secret_name" : secretName ,
117
+ "namespace" : namespace ,
118
+ }).Info (fmt .Sprint ("Found service account accisiated with secret" ))
119
+
120
+ logger .Info ("Fetching secret from cluster" )
121
+ secret , e := clientset .CoreV1 ().Secrets (namespace ).Get (secretName , metav1.GetOptions {})
122
+ if e != nil {
123
+ message := fmt .Sprintf ("Failed to get secrets with error:\n %s" , e )
124
+ logger .Warn (message )
125
+ return e
126
+ }
127
+ logger .Info (fmt .Sprint ("Found secret" ))
128
+
129
+ logger .Info (fmt .Sprint ("Creating cluster in Codefresh" ))
130
+ _ , e = addCluser (clientCnf .Host , contextName , secret .Data ["token" ], secret .Data ["ca.crt" ])
131
+ if e != nil {
132
+ message := fmt .Sprintf ("Failed to add cluster with error:\n %s" , e )
133
+ logger .Error (message )
134
+ return e
135
+ }
136
+ logger .Warn (fmt .Sprint ("Cluster added!" ))
137
+ return nil
82
138
}
83
139
84
140
func addCluser (host string , contextName string , token []byte , crt []byte ) ([]byte , error ) {
@@ -108,10 +164,15 @@ func addCluser(host string, contextName string, token []byte, crt []byte) ([]byt
108
164
return nil , err
109
165
}
110
166
defer res .Body .Close ()
167
+
111
168
body , err := ioutil .ReadAll (res .Body )
112
169
if err != nil {
113
170
return nil , err
114
171
}
172
+ if res .StatusCode != 201 {
173
+ err := errors .New (string (body ))
174
+ return nil , fmt .Errorf ("Failed to create cluster %s" , err )
175
+ }
115
176
return body , nil
116
177
}
117
178
0 commit comments