Skip to content

Commit bbbe143

Browse files
authored
Merge pull request #599 from ksimon1/do-not-panic
feat: do not panic inside code
2 parents e596976 + 6b86eb2 commit bbbe143

20 files changed

Lines changed: 131 additions & 607 deletions

File tree

cmd/create-vm/main.go

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,50 @@
11
package main
22

33
import (
4-
"net/http"
4+
"os"
55

66
goarg "github.com/alexflint/go-arg"
77
. "github.com/kubevirt/kubevirt-tekton-tasks/modules/create-vm/pkg/constants"
88
"github.com/kubevirt/kubevirt-tekton-tasks/modules/create-vm/pkg/utils/parse"
99
"github.com/kubevirt/kubevirt-tekton-tasks/modules/create-vm/pkg/vmcreator"
10-
"github.com/kubevirt/kubevirt-tekton-tasks/modules/shared/pkg/exit"
1110
"github.com/kubevirt/kubevirt-tekton-tasks/modules/shared/pkg/log"
1211
"github.com/kubevirt/kubevirt-tekton-tasks/modules/shared/pkg/output"
1312
res "github.com/kubevirt/kubevirt-tekton-tasks/modules/shared/pkg/results"
14-
"github.com/kubevirt/kubevirt-tekton-tasks/modules/shared/pkg/zerrors"
1513
"go.uber.org/zap"
1614
kubevirtv1 "kubevirt.io/api/core/v1"
1715
)
1816

1917
func main() {
20-
defer exit.HandleExit()
21-
2218
cliOptions := &parse.CLIOptions{}
2319
goarg.MustParse(cliOptions)
2420

2521
logger := log.InitLogger(cliOptions.GetDebugLevel())
2622
defer logger.Sync()
2723

2824
if err := cliOptions.Init(); err != nil {
29-
exit.ExitOrDieFromError(InvalidCLIInputExitCode, err)
25+
log.Logger().Error(err.Error())
26+
os.Exit(InvalidCLIInputExitCode)
3027
}
3128
log.Logger().Debug("parsed arguments", zap.Reflect("cliOptions", cliOptions))
3229

3330
vmCreator, err := vmcreator.NewVMCreator(cliOptions)
3431
if err != nil {
35-
exit.ExitOrDieFromError(GenericExitCode, err)
32+
log.Logger().Error(err.Error())
33+
os.Exit(GenericExitCode)
3634
}
3735

3836
vm, err := vmCreator.CreateVM()
3937
if err != nil {
40-
exit.ExitOrDieFromError(CreateVMErrorExitCode, err,
41-
zerrors.IsStatusError(err, http.StatusNotFound, http.StatusConflict, http.StatusUnprocessableEntity),
42-
)
38+
log.Logger().Error(err.Error())
39+
os.Exit(CreateVMErrorExitCode)
4340
}
4441

4542
if cliOptions.GetStartVMFlag() &&
4643
(vm.Spec.RunStrategy == nil || *vm.Spec.RunStrategy != kubevirtv1.RunStrategyAlways) &&
4744
(vm.Spec.Running == nil || !*vm.Spec.Running) {
4845
if err := vmCreator.StartVM(vm.Namespace, vm.Name); err != nil {
49-
exit.ExitFromError(StartVMErrorExitCode, err)
46+
log.Logger().Error(err.Error())
47+
os.Exit(StartVMErrorExitCode)
5048
}
5149
}
5250

@@ -57,7 +55,8 @@ func main() {
5755

5856
log.Logger().Debug("recording results", zap.Reflect("results", results))
5957
if err := res.RecordResults(results); err != nil {
60-
exit.ExitOrDieFromError(WriteResultsExitCode, err)
58+
log.Logger().Error(err.Error())
59+
os.Exit(WriteResultsExitCode)
6160
}
6261

6362
output.PrettyPrint(vm, cliOptions.Output)

cmd/disk-uploader/main.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"github.com/kubevirt/kubevirt-tekton-tasks/modules/disk-uploader/pkg/parse"
1111
"github.com/kubevirt/kubevirt-tekton-tasks/modules/disk-uploader/pkg/secrets"
1212
"github.com/kubevirt/kubevirt-tekton-tasks/modules/disk-uploader/pkg/vmexport"
13-
"github.com/kubevirt/kubevirt-tekton-tasks/modules/shared/pkg/exit"
1413
"github.com/kubevirt/kubevirt-tekton-tasks/modules/shared/pkg/log"
1514
res "github.com/kubevirt/kubevirt-tekton-tasks/modules/shared/pkg/results"
1615

@@ -115,44 +114,48 @@ func run(opts parse.CLIOptions, k8sClient kubernetes.Interface, virtClient kubec
115114
}
116115

117116
func main() {
118-
defer exit.HandleExit()
119-
120117
cliOptions := &parse.CLIOptions{}
121118
goarg.MustParse(cliOptions)
122119

123120
logger := log.InitLogger(cliOptions.GetDebugLevel())
124121
defer logger.Sync()
125122

126123
if err := cliOptions.Init(); err != nil {
127-
exit.ExitOrDieFromError(constants.InvalidCLIInputExitCode, err)
124+
log.Logger().Error(err.Error())
125+
os.Exit(constants.InvalidCLIInputExitCode)
128126
}
129127
log.Logger().Debug("parsed arguments", zap.Reflect("cliOptions", cliOptions))
130128

131129
config, err := rest.InClusterConfig()
132130
if err != nil {
133-
exit.ExitOrDieFromError(constants.GenericExitCode, err)
131+
log.Logger().Error(err.Error())
132+
os.Exit(constants.GenericExitCode)
134133
}
135134

136135
k8sClient, err := kubernetes.NewForConfig(config)
137136
if err != nil {
138-
exit.ExitOrDieFromError(constants.GenericExitCode, err)
137+
log.Logger().Error(err.Error())
138+
os.Exit(constants.GenericExitCode)
139139
}
140140

141141
virtClient, err := kubecli.GetKubevirtClient()
142142
if err != nil {
143-
exit.ExitOrDieFromError(constants.GenericExitCode, err)
143+
log.Logger().Error(err.Error())
144+
os.Exit(constants.GenericExitCode)
144145
}
145146

146147
imageDigest, err := run(*cliOptions, k8sClient, virtClient)
147148
if err != nil {
148-
exit.ExitOrDieFromError(constants.DiskUploaderErrorExitCode, err)
149+
log.Logger().Error(err.Error())
150+
os.Exit(constants.DiskUploaderErrorExitCode)
149151
}
150152

151153
results := map[string]string{constants.DigestResultName: imageDigest}
152154

153155
log.Logger().Debug("recording results", zap.Reflect("results", results))
154156

155157
if err := res.RecordResults(results); err != nil {
156-
exit.ExitOrDieFromError(constants.WriteResultsExitCode, err)
158+
log.Logger().Error(err.Error())
159+
os.Exit(constants.WriteResultsExitCode)
157160
}
158161
}

cmd/disk-virt-customize/main.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
package main
22

33
import (
4+
"os"
5+
46
goarg "github.com/alexflint/go-arg"
57
"go.uber.org/zap"
68

79
. "github.com/kubevirt/kubevirt-tekton-tasks/modules/disk-virt/pkg/constants"
810
"github.com/kubevirt/kubevirt-tekton-tasks/modules/disk-virt/pkg/execute"
911
"github.com/kubevirt/kubevirt-tekton-tasks/modules/disk-virt/pkg/utils/log"
1012
"github.com/kubevirt/kubevirt-tekton-tasks/modules/disk-virt/pkg/utils/parse"
11-
"github.com/kubevirt/kubevirt-tekton-tasks/modules/shared/pkg/exit"
1213
)
1314

1415
func main() {
15-
defer exit.HandleExit()
16-
1716
cliOptions := &parse.CLIOptions{}
1817
goarg.MustParse(cliOptions)
1918

@@ -22,15 +21,18 @@ func main() {
2221

2322
log.GetLogger().Debug("parsed arguments", zap.Reflect("cliOptions", cliOptions))
2423
if err := cliOptions.Init(); err != nil {
25-
exit.ExitOrDieFromError(InvalidArguments, err)
24+
log.GetLogger().Error(err.Error())
25+
os.Exit(InvalidArguments)
2626
}
2727
executor := execute.NewExecutor(cliOptions, DiskImagePath, "virt-customize")
2828

2929
if err := executor.PrepareGuestFSAppliance(); err != nil {
30-
exit.ExitOrDieFromError(PrepareGuestFSApplianceFailed, err)
30+
log.GetLogger().Error(err.Error())
31+
os.Exit(PrepareGuestFSApplianceFailed)
3132
}
3233

3334
if err := executor.Execute(); err != nil {
34-
exit.ExitOrDieFromError(ExecuteFailed, err)
35+
log.GetLogger().Error(err.Error())
36+
os.Exit(ExecuteFailed)
3537
}
3638
}

cmd/disk-virt-sysprep/main.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
package main
22

33
import (
4+
"os"
5+
46
goarg "github.com/alexflint/go-arg"
57
"go.uber.org/zap"
68

79
. "github.com/kubevirt/kubevirt-tekton-tasks/modules/disk-virt/pkg/constants"
810
"github.com/kubevirt/kubevirt-tekton-tasks/modules/disk-virt/pkg/execute"
911
"github.com/kubevirt/kubevirt-tekton-tasks/modules/disk-virt/pkg/utils/log"
1012
"github.com/kubevirt/kubevirt-tekton-tasks/modules/disk-virt/pkg/utils/parse"
11-
"github.com/kubevirt/kubevirt-tekton-tasks/modules/shared/pkg/exit"
1213
)
1314

1415
func main() {
15-
defer exit.HandleExit()
16-
1716
cliOptions := &parse.CLIOptions{}
1817
goarg.MustParse(cliOptions)
1918

@@ -22,15 +21,18 @@ func main() {
2221

2322
log.GetLogger().Debug("parsed arguments", zap.Reflect("cliOptions", cliOptions))
2423
if err := cliOptions.Init(); err != nil {
25-
exit.ExitOrDieFromError(InvalidArguments, err)
24+
log.GetLogger().Error(err.Error())
25+
os.Exit(InvalidArguments)
2626
}
2727
executor := execute.NewExecutor(cliOptions, DiskImagePath, "virt-sysprep")
2828

2929
if err := executor.PrepareGuestFSAppliance(); err != nil {
30-
exit.ExitOrDieFromError(PrepareGuestFSApplianceFailed, err)
30+
log.GetLogger().Error(err.Error())
31+
os.Exit(PrepareGuestFSApplianceFailed)
3132
}
3233

3334
if err := executor.Execute(); err != nil {
34-
exit.ExitOrDieFromError(ExecuteFailed, err)
35+
log.GetLogger().Error(err.Error())
36+
os.Exit(ExecuteFailed)
3537
}
3638
}

cmd/execute-in-vm/main.go

Lines changed: 25 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
11
package main
22

33
import (
4+
"os"
5+
"time"
6+
47
goarg "github.com/alexflint/go-arg"
58
. "github.com/kubevirt/kubevirt-tekton-tasks/modules/execute-in-vm/pkg/constants"
69
"github.com/kubevirt/kubevirt-tekton-tasks/modules/execute-in-vm/pkg/execute"
710
"github.com/kubevirt/kubevirt-tekton-tasks/modules/execute-in-vm/pkg/utils"
811
log "github.com/kubevirt/kubevirt-tekton-tasks/modules/execute-in-vm/pkg/utils/log"
912
"github.com/kubevirt/kubevirt-tekton-tasks/modules/execute-in-vm/pkg/utils/parse"
10-
"github.com/kubevirt/kubevirt-tekton-tasks/modules/shared/pkg/exit"
11-
"github.com/kubevirt/kubevirt-tekton-tasks/modules/shared/pkg/zerrors"
1213
"go.uber.org/zap"
13-
"k8s.io/apimachinery/pkg/util/wait"
14-
"time"
1514
)
1615

1716
func main() {
18-
defer exit.HandleExit()
19-
2017
cliOptions := &parse.CLIOptions{}
2118
goarg.MustParse(cliOptions)
2219

@@ -25,87 +22,59 @@ func main() {
2522

2623
log.Logger().Debug("parsed arguments", zap.Reflect("cliOptions", cliOptions))
2724
if err := cliOptions.Init(); err != nil {
28-
exit.ExitOrDieFromError(InvalidArguments, err)
25+
log.Logger().Error(err.Error())
26+
os.Exit(InvalidArguments)
2927
}
3028

3129
executor, executorErr := execute.NewExecutor(cliOptions, ConnectionSecretPath)
3230
if executorErr != nil {
33-
exit.ExitOrDieFromError(ExecutorInitialization, executorErr)
34-
}
35-
36-
multiError := zerrors.NewMultiError()
37-
var exitError *exit.Exit
38-
39-
registerError := func(name string, err error) {
40-
if err != nil {
41-
if exitErr, ok := err.(exit.Exit); ok {
42-
exitError = &exitErr
43-
} else if err == wait.ErrWaitTimeout {
44-
exitError = &exit.Exit{
45-
Code: CommandTimeout,
46-
Msg: "command timed out",
47-
Soft: true,
48-
}
49-
} else {
50-
multiError.Add(name, err)
51-
}
52-
}
53-
31+
log.Logger().Error(executorErr.Error())
32+
os.Exit(ExecutorInitialization)
5433
}
5534

5635
if cliOptions.GetScript() != "" {
5736
runWithTimeout := utils.WithTimeout(cliOptions.GetScriptTimeout())
5837

5938
runWithTimeout(func(timeout time.Duration, finished bool) {
60-
if multiError.IsEmpty() && !finished {
61-
err := executor.EnsureVMRunning(timeout)
62-
registerError("EnsureVMRunning", err)
39+
if !finished {
40+
if err := executor.EnsureVMRunning(timeout); err != nil {
41+
log.Logger().Error(err.Error())
42+
os.Exit(ExecutorActionsFailed)
43+
}
6344
}
6445
})
6546

6647
runWithTimeout(func(timeout time.Duration, finished bool) {
67-
if multiError.IsEmpty() && !finished {
68-
err := executor.SetupConnection(timeout)
69-
registerError("SetupConnection", err)
48+
if !finished {
49+
if err := executor.SetupConnection(timeout); err != nil {
50+
log.Logger().Error(err.Error())
51+
os.Exit(ExecutorActionsFailed)
52+
}
7053
}
7154
})
7255

7356
runWithTimeout(func(timeout time.Duration, finished bool) {
74-
if multiError.IsEmpty() {
75-
if !finished {
76-
err := executor.RemoteExecute(timeout)
77-
registerError("RemoteExecute", err)
78-
} else {
79-
registerError("RemoteExecute", wait.ErrWaitTimeout)
57+
if !finished {
58+
if err := executor.RemoteExecute(timeout); err != nil {
59+
log.Logger().Error(err.Error())
60+
os.Exit(ExecutorActionsFailed)
8061
}
81-
8262
}
8363
})
8464

8565
}
8666

8767
if cliOptions.ShouldStop() {
8868
if err := executor.EnsureVMStopped(); err != nil {
89-
multiError.Add("VM Stop", err)
69+
log.Logger().Error(err.Error())
70+
os.Exit(ExecutorActionsFailed)
9071
}
9172
}
9273

9374
if cliOptions.ShouldDelete() {
9475
if err := executor.EnsureVMDeleted(); err != nil {
95-
multiError.Add("VM Delete", err)
76+
log.Logger().Error(err.Error())
77+
os.Exit(ExecutorActionsFailed)
9678
}
9779
}
98-
99-
if !multiError.IsEmpty() {
100-
if exitError != nil {
101-
multiError.Add("command exit", *exitError)
102-
}
103-
log.Logger().Debug("finished", zap.String("errMsg", multiError.Error()))
104-
exit.ExitOrDieFromError(ExecutorActionsFailed, multiError)
105-
}
106-
107-
if exitError != nil {
108-
log.Logger().Debug("finished", zap.Reflect("err", exitError))
109-
exit.ExitOrDieFromError(exitError.Code, exitError)
110-
}
11180
}

0 commit comments

Comments
 (0)