1
+ // This program generates Kubeconfig files based on the CSR API.
1
2
// Based on Code from https://medium.com/@elfakharany/automate-kubernetes-user-creation-using-the-native-go-client-e2d20dcdc9de
2
- // Updated to take account of change API versions
3
+ // Updated to take account of change API versions.
3
4
4
5
package main
5
6
@@ -18,7 +19,7 @@ import (
18
19
"path/filepath"
19
20
"time"
20
21
21
- "github.com/rs/zerolog/ log"
22
+ "log"
22
23
23
24
"gopkg.in/yaml.v2"
24
25
certificates "k8s.io/api/certificates/v1"
@@ -81,12 +82,12 @@ func initKubeClient() (*kubernetes.Clientset, clientcmd.ClientConfig, error) {
81
82
kubeConfig := clientcmd .NewNonInteractiveDeferredLoadingClientConfig (loadingRules , & clientcmd.ConfigOverrides {})
82
83
config , err := kubeConfig .ClientConfig ()
83
84
if err != nil {
84
- log .Printf ("initKubeClient: failed creating ClientConfig with" , err )
85
+ log .Printf ("initKubeClient: failed creating ClientConfig with %s " , err )
85
86
return nil , nil , err
86
87
}
87
88
clientset , err := kubernetes .NewForConfig (config )
88
89
if err != nil {
89
- log .Printf ("initKubeClient: failed creating Clientset with" , err )
90
+ log .Printf ("initKubeClient: failed creating Clientset with %s " , err )
90
91
return nil , nil , err
91
92
}
92
93
return clientset , kubeConfig , nil
@@ -111,8 +112,7 @@ func main() {
111
112
112
113
key , err := rsa .GenerateKey (rand .Reader , 1024 )
113
114
if err != nil {
114
- log .Print ("Error Generating key" )
115
- log .Printf ("Error %s" , err )
115
+ log .Fatalf ("Error Generating key : %s" , err )
116
116
}
117
117
keyDer := x509 .MarshalPKCS1PrivateKey (key )
118
118
@@ -131,14 +131,12 @@ func main() {
131
131
}
132
132
bytes , err := x509 .CreateCertificateRequest (rand .Reader , & csrReq , key )
133
133
if err != nil {
134
- log .Print ("Error Creating Certificate Request" )
135
- log .Printf ("Error %s" , err )
134
+ log .Fatalf ("Error Creating Certificate Request %s" , err )
136
135
}
137
136
138
137
clientset , config , err := initKubeClient ()
139
138
if err != nil {
140
- fmt .Println ("Error initializing Kubernetes client" )
141
- log .Printf ("Error %s" , err )
139
+ log .Fatalf ("Error initializing Kubeclient %s" , err )
142
140
}
143
141
csr := & certificates.CertificateSigningRequest {
144
142
ObjectMeta : v1.ObjectMeta {
@@ -162,7 +160,7 @@ func main() {
162
160
_ , err = clientset .CertificatesV1 ().CertificateSigningRequests ().Create (context .TODO (), csr , v1.CreateOptions {})
163
161
if err != nil {
164
162
log .Print ("Error Creating CSR Object. Are you running on a cluste < 1.19? This only works with 1.19+" )
165
- log .Printf ("Error %s" , err )
163
+ log .Fatalf ("Error %s" , err )
166
164
}
167
165
csr .Status .Conditions = append (csr .Status .Conditions , certificates.CertificateSigningRequestCondition {
168
166
Type : certificates .CertificateApproved ,
@@ -173,8 +171,7 @@ func main() {
173
171
})
174
172
csr , err = clientset .CertificatesV1 ().CertificateSigningRequests ().UpdateApproval (context .Background (), "tempcsr" , csr , v1.UpdateOptions {})
175
173
if err != nil {
176
- fmt .Println ("Error Approving Certificate" )
177
- log .Printf ("Error %s" , err )
174
+ log .Fatalf ("Error Approving Certificate : %s" , err )
178
175
}
179
176
// Give the API server a couple of seconds to issue the cert.
180
177
time .Sleep (2 * time .Second )
@@ -187,8 +184,7 @@ func main() {
187
184
}
188
185
issued_cert , err := x509 .ParseCertificate (pb .Bytes )
189
186
if err != nil {
190
- log .Print ("Error Parsing Certificate" )
191
- log .Print (err )
187
+ log .Fatalf ("Error Parsing Certificate %s" , err )
192
188
}
193
189
issued_group := "none"
194
190
if issued_cert .Subject .Organization [0 ] != "" {
@@ -198,8 +194,7 @@ func main() {
198
194
199
195
raw , err := config .RawConfig ()
200
196
if err != nil {
201
- log .Print ("error getting raw config" )
202
- log .Print (err )
197
+ log .Fatalf ("error getting raw config %s" , err )
203
198
}
204
199
cluster := raw .Contexts [raw .CurrentContext ].Cluster
205
200
@@ -238,25 +233,21 @@ func main() {
238
233
239
234
dir , err := os .Getwd ()
240
235
if err != nil {
241
- log .Print ("Error Getting working directory" )
242
- log .Print (err )
236
+ log .Fatalf ("Error Getting working directory %s" , err )
243
237
}
244
238
_ , err = os .Create (filepath .Join (dir , * outputFile ))
245
239
if err != nil {
246
- log .Print ("Error Creating output file" )
247
- log .Print (err )
240
+ log .Fatalf ("Error Creating output file %s" , err )
248
241
}
249
242
file , err := os .OpenFile (* outputFile , os .O_APPEND | os .O_WRONLY , os .ModeAppend )
250
243
if err != nil {
251
- log .Print ("Error opening output file" )
252
- log .Print (err )
244
+ log .Fatalf ("Error opening output file %s" , err )
253
245
}
254
246
defer file .Close ()
255
247
e := yaml .NewEncoder (file )
256
248
err = e .Encode (kc )
257
249
if err != nil {
258
- log .Print ("Error encoding Kubeconfig YAML" )
259
- log .Print (err )
250
+ log .Fatalf ("Error encoding Kubeconfig YAML %s" , err )
260
251
}
261
252
clientset .CertificatesV1 ().CertificateSigningRequests ().Delete (context .TODO (), csr .GetName (), v1.DeleteOptions {})
262
253
0 commit comments