@@ -21,6 +21,38 @@ import (
21
21
type MultipassNodeState int32
22
22
23
23
const (
24
+ multipassCommandLine string = "multipass"
25
+ kubectlCommandLine string = "kubectl"
26
+ kubeConfigArgument string = "--kubeconfig"
27
+ deleteArgument string = "delete"
28
+ nodeArgument string = "node"
29
+ annotateArgument string = "annotate"
30
+ labelArgument string = "label"
31
+ nodesArgument string = "nodes"
32
+ overwriteArgument string = "--overwrite"
33
+ outputArgument string = "--output"
34
+ jsonArgument string = "json"
35
+ getArgument string = "get"
36
+ copyFileArgument string = "copy-files"
37
+ execArgument string = "exec"
38
+ sudoArgument string = "sudo"
39
+ dashDashArgument string = "--"
40
+ kubeadmArgument string = "kubeadm"
41
+ joinArgument string = "join"
42
+ tokenArgument string = "--token"
43
+ discoveryArgument string = "--discovery-token-ca-cert-hash"
44
+ launchArgument string = "launch"
45
+ nameArgument string = "--name"
46
+ uncordonArgument string = "uncordon"
47
+ cordonArgument string = "cordon"
48
+ drainArgument string = "drain"
49
+ deleteLocalArgument string = "--delete-local-data"
50
+ forceArgument string = "--force"
51
+ ignoreDaemonsetArgument string = "--ignore-daemonsets"
52
+ purgeArgument string = "--purge"
53
+ stopArgument string = "stop"
54
+ startArgument string = "start"
55
+ infoArgument string = "info"
24
56
// MultipassNodeStateNotCreated not created state
25
57
MultipassNodeStateNotCreated MultipassNodeState = 0
26
58
@@ -144,11 +176,11 @@ func (vm *MultipassNode) prepareKubelet() error {
144
176
145
177
defer os .Remove (fName )
146
178
147
- if out , err = pipe ("multipass" , "copy-files" , fName , vm .NodeName + ":" + fName ); err != nil {
179
+ if out , err = pipe (multipassCommandLine , copyFileArgument , fName , vm .NodeName + ":" + fName ); err != nil {
148
180
return fmt .Errorf (errKubeletNotConfigured , vm .NodeName , out , err )
149
181
}
150
182
151
- if out , err = pipe ("multipass" , "exec" , vm .NodeName , "--" , "sudo" , "bash" , fName ); err != nil {
183
+ if out , err = pipe (multipassCommandLine , execArgument , vm .NodeName , dashDashArgument , sudoArgument , "bash" , fName ); err != nil {
152
184
return fmt .Errorf (errKubeletNotConfigured , vm .NodeName , out , err )
153
185
}
154
186
@@ -163,13 +195,13 @@ func (vm *MultipassNode) waitReady(kubeconfig string) error {
163
195
var out string
164
196
var err error
165
197
var arg = []string {
166
- "kubectl" ,
167
- "get" ,
168
- "nodes" ,
198
+ kubectlCommandLine ,
199
+ getArgument ,
200
+ nodesArgument ,
169
201
vm .NodeName ,
170
- "--output" ,
171
- "json" ,
172
- "--kubeconfig" ,
202
+ outputArgument ,
203
+ jsonArgument ,
204
+ kubeConfigArgument ,
173
205
kubeconfig ,
174
206
}
175
207
@@ -184,13 +216,9 @@ func (vm *MultipassNode) waitReady(kubeconfig string) error {
184
216
}
185
217
186
218
for _ , status := range nodeInfo .Status .Conditions {
187
- if status .Type == "Ready" {
188
- if b , e := strconv .ParseBool (string (status .Status )); e == nil {
189
- if b {
190
- glog .Infof ("The kubernetes node %s is Ready" , vm .NodeName )
191
- return nil
192
- }
193
- }
219
+ if b , e := strconv .ParseBool (string (status .Status )); status .Type == "Ready" && e == nil && b {
220
+ glog .Infof ("The kubernetes node %s is Ready" , vm .NodeName )
221
+ return nil
194
222
}
195
223
}
196
224
@@ -204,17 +232,17 @@ func (vm *MultipassNode) waitReady(kubeconfig string) error {
204
232
205
233
func (vm * MultipassNode ) kubeAdmJoin (extras * nodeCreationExtra ) error {
206
234
args := []string {
207
- "multipass" ,
208
- "exec" ,
235
+ multipassCommandLine ,
236
+ execArgument ,
209
237
vm .NodeName ,
210
- "--" ,
211
- "sudo" ,
212
- "kubeadm" ,
213
- "join" ,
238
+ dashDashArgument ,
239
+ sudoArgument ,
240
+ kubeadmArgument ,
241
+ joinArgument ,
214
242
extras .kubeHost ,
215
- "--token" ,
243
+ tokenArgument ,
216
244
extras .kubeToken ,
217
- "--discovery-token-ca-cert-hash" ,
245
+ discoveryArgument ,
218
246
extras .kubeCACert ,
219
247
}
220
248
@@ -234,9 +262,9 @@ func (vm *MultipassNode) setNodeLabels(extras *nodeCreationExtra) error {
234
262
if len (extras .nodeLabels )+ len (extras .systemLabels ) > 0 {
235
263
236
264
args := []string {
237
- "kubectl" ,
238
- "label" ,
239
- "nodes" ,
265
+ kubectlCommandLine ,
266
+ labelArgument ,
267
+ nodesArgument ,
240
268
vm .NodeName ,
241
269
}
242
270
@@ -249,7 +277,7 @@ func (vm *MultipassNode) setNodeLabels(extras *nodeCreationExtra) error {
249
277
args = append (args , fmt .Sprintf ("%s=%s" , k , v ))
250
278
}
251
279
252
- args = append (args , "--kubeconfig" )
280
+ args = append (args , kubeConfigArgument )
253
281
args = append (args , extras .kubeConfig )
254
282
255
283
if err := shell (args ... ); err != nil {
@@ -258,15 +286,15 @@ func (vm *MultipassNode) setNodeLabels(extras *nodeCreationExtra) error {
258
286
}
259
287
260
288
args := []string {
261
- "kubectl" ,
262
- "annotate" ,
263
- "node" ,
289
+ kubectlCommandLine ,
290
+ annotateArgument ,
291
+ nodeArgument ,
264
292
vm .NodeName ,
265
293
fmt .Sprintf ("%s=%s" , nodeLabelGroupName , extras .nodegroupID ),
266
294
fmt .Sprintf ("%s=%s" , annotationNodeAutoProvisionned , strconv .FormatBool (vm .AutoProvisionned )),
267
295
fmt .Sprintf ("%s=%d" , annotationNodeIndex , vm .NodeIndex ),
268
- "--overwrite" ,
269
- "--kubeconfig" ,
296
+ overwriteArgument ,
297
+ kubeConfigArgument ,
270
298
extras .kubeConfig ,
271
299
}
272
300
@@ -280,7 +308,7 @@ func (vm *MultipassNode) setNodeLabels(extras *nodeCreationExtra) error {
280
308
func (vm * MultipassNode ) mountPoints (extras * nodeCreationExtra ) {
281
309
if extras .mountPoints != nil && len (extras .mountPoints ) > 0 {
282
310
for hostPath , guestPath := range extras .mountPoints {
283
- if err := shell ("multipass" , "mount" , hostPath , fmt .Sprintf ("%s:%s" , vm .NodeName , guestPath )); err != nil {
311
+ if err := shell (multipassCommandLine , "mount" , hostPath , fmt .Sprintf ("%s:%s" , vm .NodeName , guestPath )); err != nil {
284
312
glog .Warningf (errUnableToMountPath , hostPath , guestPath , vm .NodeName , err )
285
313
}
286
314
}
@@ -331,9 +359,9 @@ func (vm *MultipassNode) launchVM(extras *nodeCreationExtra) error {
331
359
err = fmt .Errorf (errVMAlreadyCreated , vm .NodeName )
332
360
} else if cloudInitFile , err = vm .writeCloudFile (extras ); err == nil {
333
361
var args = []string {
334
- "multipass" ,
335
- "launch" ,
336
- "--name" ,
362
+ multipassCommandLine ,
363
+ launchArgument ,
364
+ nameArgument ,
337
365
vm .NodeName ,
338
366
}
339
367
@@ -406,35 +434,31 @@ func (vm *MultipassNode) startVM(kubeconfig string) error {
406
434
407
435
glog .Infof ("Start VM:%s" , vm .NodeName )
408
436
409
- if vm .AutoProvisionned == false {
437
+ if ! vm .AutoProvisionned {
410
438
err = fmt .Errorf (errVMNotProvisionnedByMe , vm .NodeName )
411
- } else {
412
- state , err = vm .statusVM ()
413
-
414
- if err == nil {
415
- if state == MultipassNodeStateStopped {
416
- if err = shell ("multipass" , "start" , vm .NodeName ); err != nil {
417
- args := []string {
418
- "kubectl" ,
419
- "uncordon" ,
420
- vm .NodeName ,
421
- "--kubeconfig" ,
422
- kubeconfig ,
423
- }
424
-
425
- if err = shell (args ... ); err != nil {
426
- glog .Errorf (errKubeCtlIgnoredError , vm .NodeName , err )
439
+ } else if state , err = vm .statusVM (); err == nil {
440
+ if state == MultipassNodeStateStopped {
441
+ if err = shell (multipassCommandLine , startArgument , vm .NodeName ); err != nil {
442
+ args := []string {
443
+ kubectlCommandLine ,
444
+ uncordonArgument ,
445
+ vm .NodeName ,
446
+ kubeConfigArgument ,
447
+ kubeconfig ,
448
+ }
427
449
428
- err = nil
429
- }
450
+ if err = shell ( args ... ); err != nil {
451
+ glog . Errorf ( errKubeCtlIgnoredError , vm . NodeName , err )
430
452
431
- vm .State = MultipassNodeStateRunning
432
- } else {
433
- err = fmt .Errorf (errStartVMFailed , vm .NodeName , err )
453
+ err = nil
434
454
}
435
- } else if state != MultipassNodeStateRunning {
436
- err = fmt .Errorf (errStartVMFailed , vm .NodeName , fmt .Sprintf ("Unexpected state: %d" , state ))
455
+
456
+ vm .State = MultipassNodeStateRunning
457
+ } else {
458
+ err = fmt .Errorf (errStartVMFailed , vm .NodeName , err )
437
459
}
460
+ } else if state != MultipassNodeStateRunning {
461
+ err = fmt .Errorf (errStartVMFailed , vm .NodeName , fmt .Sprintf ("Unexpected state: %d" , state ))
438
462
}
439
463
}
440
464
@@ -455,34 +479,30 @@ func (vm *MultipassNode) stopVM(kubeconfig string) error {
455
479
456
480
glog .Infof ("Stop VM:%s" , vm .NodeName )
457
481
458
- if vm .AutoProvisionned == false {
482
+ if ! vm .AutoProvisionned {
459
483
err = fmt .Errorf (errVMNotProvisionnedByMe , vm .NodeName )
460
- } else {
461
- state , err = vm .statusVM ()
484
+ } else if state , err = vm .statusVM (); err == nil {
462
485
463
- if err == nil {
464
-
465
- if state == MultipassNodeStateRunning {
466
- args := []string {
467
- "kubectl" ,
468
- "cordon" ,
469
- vm .NodeName ,
470
- "--kubeconfig" ,
471
- kubeconfig ,
472
- }
486
+ if state == MultipassNodeStateRunning {
487
+ args := []string {
488
+ kubectlCommandLine ,
489
+ cordonArgument ,
490
+ vm .NodeName ,
491
+ kubeConfigArgument ,
492
+ kubeconfig ,
493
+ }
473
494
474
- if err = shell (args ... ); err != nil {
475
- glog .Errorf (errKubeCtlIgnoredError , vm .NodeName , err )
476
- }
495
+ if err = shell (args ... ); err != nil {
496
+ glog .Errorf (errKubeCtlIgnoredError , vm .NodeName , err )
497
+ }
477
498
478
- if err = shell ("multipass" , "stop" , vm .NodeName ); err == nil {
479
- vm .State = MultipassNodeStateStopped
480
- } else {
481
- err = fmt .Errorf (errStopVMFailed , vm .NodeName , err )
482
- }
483
- } else if state != MultipassNodeStateStopped {
484
- err = fmt .Errorf (errStopVMFailed , vm .NodeName , fmt .Sprintf ("Unexpected state: %d" , state ))
499
+ if err = shell (multipassCommandLine , stopArgument , vm .NodeName ); err == nil {
500
+ vm .State = MultipassNodeStateStopped
501
+ } else {
502
+ err = fmt .Errorf (errStopVMFailed , vm .NodeName , err )
485
503
}
504
+ } else if state != MultipassNodeStateStopped {
505
+ err = fmt .Errorf (errStopVMFailed , vm .NodeName , fmt .Sprintf ("Unexpected state: %d" , state ))
486
506
}
487
507
}
488
508
@@ -509,13 +529,13 @@ func (vm *MultipassNode) deleteVM(kubeconfig string) error {
509
529
if err == nil {
510
530
511
531
args := []string {
512
- "kubectl" ,
513
- "drain" ,
532
+ kubectlCommandLine ,
533
+ drainArgument ,
514
534
vm .NodeName ,
515
- "--delete-local-data" ,
516
- "--force" ,
517
- "--ignore-daemonsets" ,
518
- "--kubeconfig" ,
535
+ deleteLocalArgument ,
536
+ forceArgument ,
537
+ ignoreDaemonsetArgument ,
538
+ kubeConfigArgument ,
519
539
kubeconfig ,
520
540
}
521
541
@@ -524,11 +544,11 @@ func (vm *MultipassNode) deleteVM(kubeconfig string) error {
524
544
}
525
545
526
546
args = []string {
527
- "kubectl" ,
528
- "delete" ,
529
- "node" ,
547
+ kubectlCommandLine ,
548
+ deleteArgument ,
549
+ nodeArgument ,
530
550
vm .NodeName ,
531
- "--kubeconfig" ,
551
+ kubeConfigArgument ,
532
552
kubeconfig ,
533
553
}
534
554
@@ -537,18 +557,18 @@ func (vm *MultipassNode) deleteVM(kubeconfig string) error {
537
557
}
538
558
539
559
if state == MultipassNodeStateRunning {
540
- if err = shell ("multipass" , "stop" , vm .NodeName ); err == nil {
560
+ if err = shell (multipassCommandLine , stopArgument , vm .NodeName ); err == nil {
541
561
vm .State = MultipassNodeStateStopped
542
562
543
- if err = shell ("multipass" , "delete" , "--purge" , vm .NodeName ); err == nil {
563
+ if err = shell (multipassCommandLine , deleteArgument , purgeArgument , vm .NodeName ); err == nil {
544
564
vm .State = MultipassNodeStateDeleted
545
565
} else {
546
566
err = fmt .Errorf (errDeleteVMFailed , vm .NodeName , err )
547
567
}
548
568
} else {
549
569
err = fmt .Errorf (errStopVMFailed , vm .NodeName , err )
550
570
}
551
- } else if err = shell ("multipass" , "delete" , "--purge" , vm .NodeName ); err == nil {
571
+ } else if err = shell (multipassCommandLine , deleteArgument , purgeArgument , vm .NodeName ); err == nil {
552
572
vm .State = MultipassNodeStateDeleted
553
573
} else {
554
574
err = fmt .Errorf (errDeleteVMFailed , vm .NodeName , err )
@@ -573,7 +593,7 @@ func (vm *MultipassNode) statusVM() (MultipassNodeState, error) {
573
593
var err error
574
594
var vmInfos MultipassVMInfos
575
595
576
- if out , err = pipe ("multipass" , "info" , vm .NodeName , "--format=json" ); err != nil {
596
+ if out , err = pipe (multipassCommandLine , infoArgument , vm .NodeName , "--format=json" ); err != nil {
577
597
glog .Errorf (errGetVMInfoFailed , vm .NodeName , err )
578
598
return MultipassNodeStateUndefined , err
579
599
}
0 commit comments