@@ -17,10 +17,11 @@ limitations under the License.
17
17
package cmd
18
18
19
19
import (
20
+ "bytes"
20
21
"fmt"
22
+ "html/template"
21
23
"io"
22
24
"io/ioutil"
23
- "strings"
24
25
25
26
"github.com/renstrom/dedent"
26
27
"github.com/spf13/cobra"
@@ -36,6 +37,18 @@ import (
36
37
netutil "k8s.io/kubernetes/pkg/util/net"
37
38
)
38
39
40
+ const (
41
+ joinArgsTemplateLiteral = `--token={{.Cfg.Secrets.GivenToken -}}
42
+ {{if ne .Cfg.API.BindPort .DefaultAPIBindPort -}}
43
+ {{" --api-port="}}{{.Cfg.API.BindPort -}}
44
+ {{end -}}
45
+ {{if ne .Cfg.Discovery.BindPort .DefaultDiscoveryBindPort -}}
46
+ {{" --discovery-port="}}{{.Cfg.Discovery.BindPort -}}
47
+ {{end -}}
48
+ {{" "}}{{index .Cfg.API.AdvertiseAddresses 0 -}}
49
+ `
50
+ )
51
+
39
52
var (
40
53
initDoneMsgf = dedent .Dedent (`
41
54
Kubernetes master initialised successfully!
@@ -186,6 +199,13 @@ func NewInit(cfgPath string, cfg *kubeadmapi.MasterConfiguration, skipPreFlight
186
199
return & Init {cfg : cfg }, nil
187
200
}
188
201
202
+ // joinArgsData denotes a data object which is needed by function generateJoinArgs to generate kubeadm join arguments.
203
+ type joinArgsData struct {
204
+ Cfg * kubeadmapi.MasterConfiguration
205
+ DefaultAPIBindPort uint
206
+ DefaultDiscoveryBindPort uint
207
+ }
208
+
189
209
// Run executes master node provisioning, including certificates, needed static pod manifests, etc.
190
210
func (i * Init ) Run (out io.Writer ) error {
191
211
if err := kubemaster .CreateTokenAuthFile (& i .cfg .Secrets ); err != nil {
@@ -239,16 +259,21 @@ func (i *Init) Run(out io.Writer) error {
239
259
return err
240
260
}
241
261
242
- // TODO(phase1+) we could probably use templates for this logic, and reference struct fields directly etc
243
- joinArgs := []string {fmt .Sprintf ("--token=%s" , i .cfg .Secrets .GivenToken )}
244
- if i .cfg .API .BindPort != kubeadmapi .DefaultAPIBindPort {
245
- joinArgs = append (joinArgs , fmt .Sprintf ("--api-port=%d" , i .cfg .API .BindPort ))
246
- }
247
- if i .cfg .Discovery .BindPort != kubeadmapi .DefaultDiscoveryBindPort {
248
- joinArgs = append (joinArgs , fmt .Sprintf ("--discovery-port=%d" , i .cfg .Discovery .BindPort ))
262
+ data := joinArgsData {i .cfg , kubeadmapi .DefaultAPIBindPort , kubeadmapi .DefaultDiscoveryBindPort }
263
+ if joinArgs , err := generateJoinArgs (data ); err != nil {
264
+ return err
265
+ } else {
266
+ fmt .Fprintf (out , initDoneMsgf , joinArgs )
249
267
}
250
- joinArgs = append (joinArgs , i .cfg .API .AdvertiseAddresses [0 ])
251
- fmt .Fprintf (out , initDoneMsgf , strings .Join (joinArgs , " " ))
252
-
253
268
return nil
254
269
}
270
+
271
+ // generateJoinArgs generates kubeadm join arguments
272
+ func generateJoinArgs (data joinArgsData ) (string , error ) {
273
+ joinArgsTemplate := template .Must (template .New ("joinArgsTemplate" ).Parse (joinArgsTemplateLiteral ))
274
+ var b bytes.Buffer
275
+ if err := joinArgsTemplate .Execute (& b , data ); err != nil {
276
+ return "" , err
277
+ }
278
+ return b .String (), nil
279
+ }
0 commit comments