kubefed icon indicating copy to clipboard operation
kubefed copied to clipboard

Aggressive failure when command line args are wrong

Open Callisto13 opened this issue 3 years ago • 0 comments

What happened:

When running kubefedctl join with a mis-typed context name, I received a stacktrace of all goroutines rather than a concise error.

This is due to the klog.Fatalf in pkg/kubefedctl/join.go.

Would it be possible to change it do that it does not throw a panic on every error?

kubefedctl join foo --host-cluster-context bar
F0519 16:17:29.127427 1322836 join.go:128] Error: context "bar" does not exist
goroutine 1 [running]:
k8s.io/klog/v2.stacks(0xc00000e001, 0xc0004cabb0, 0x4f, 0xa3)
        /go/pkg/mod/k8s.io/klog/[email protected]/klog.go:1026 +0xb9
k8s.io/klog/v2.(*loggingT).output(0x266b5c0, 0xc000000003, 0x0, 0x0, 0xc0004f3490, 0x0, 0x1f3ae52, 0x7, 0x80, 0x0)
        /go/pkg/mod/k8s.io/klog/[email protected]/klog.go:975 +0x1e5
k8s.io/klog/v2.(*loggingT).printf(0x266b5c0, 0xc000000003, 0x0, 0x0, 0x0, 0x0, 0x19c9c29, 0x9, 0xc00002c620, 0x1, ...)
        /go/pkg/mod/k8s.io/klog/[email protected]/klog.go:753 +0x19a
k8s.io/klog/v2.Fatalf(...)
        /go/pkg/mod/k8s.io/klog/[email protected]/klog.go:1514
sigs.k8s.io/kubefed/pkg/kubefedctl.NewCmdJoin.func1(0xc0004e9b80, 0xc0006ab380, 0x1, 0x3)
        /go/src/sigs.k8s.io/kubefed/pkg/kubefedctl/join.go:128 +0x286
github.com/spf13/cobra.(*Command).execute(0xc0004e9b80, 0xc0006ab350, 0x3, 0x3, 0xc0004e9b80, 0xc0006ab350)
        /go/pkg/mod/github.com/spf13/[email protected]/command.go:856 +0x2c2
github.com/spf13/cobra.(*Command).ExecuteC(0xc0004e9180, 0xc00000e018, 0xc0004e9180, 0x266c020)
        /go/pkg/mod/github.com/spf13/[email protected]/command.go:960 +0x375
github.com/spf13/cobra.(*Command).Execute(...)
        /go/pkg/mod/github.com/spf13/[email protected]/command.go:897
main.main()
        /go/src/sigs.k8s.io/kubefed/cmd/kubefedctl/main.go:34 +0x73

goroutine 6 [chan receive]:
k8s.io/klog/v2.(*loggingT).flushDaemon(0x266b5c0)
        /go/pkg/mod/k8s.io/klog/[email protected]/klog.go:1169 +0x8b
created by k8s.io/klog/v2.init.0
        /go/pkg/mod/k8s.io/klog/[email protected]/klog.go:420 +0xdf

goroutine 7 [sleep]:
time.Sleep(0x6fc23ac00)
        /usr/local/go/src/runtime/time.go:193 +0xd2
sigs.k8s.io/controller-runtime/pkg/log.init.0.func1()
        /go/pkg/mod/sigs.k8s.io/[email protected]/pkg/log/log.go:63 +0x45
created by sigs.k8s.io/controller-runtime/pkg/log.init.0
        /go/pkg/mod/sigs.k8s.io/[email protected]/pkg/log/log.go:62 +0x35

goroutine 31 [select]:
k8s.io/apimachinery/pkg/util/wait.BackoffUntil(0x1a8cef0, 0x1bb8a80, 0xc0004b72f0, 0x1, 0xc000092300)
        /go/pkg/mod/k8s.io/[email protected]/pkg/util/wait/wait.go:167 +0x118
k8s.io/apimachinery/pkg/util/wait.JitterUntil(0x1a8cef0, 0x12a05f200, 0x0, 0xc000114501, 0xc000092300)
        /go/pkg/mod/k8s.io/[email protected]/pkg/util/wait/wait.go:133 +0x98
k8s.io/apimachinery/pkg/util/wait.Until(...)
        /go/pkg/mod/k8s.io/[email protected]/pkg/util/wait/wait.go:90
k8s.io/apimachinery/pkg/util/wait.Forever(0x1a8cef0, 0x12a05f200)
        /go/pkg/mod/k8s.io/[email protected]/pkg/util/wait/wait.go:81 +0x4f
created by k8s.io/component-base/logs.InitLogs
        /go/pkg/mod/k8s.io/[email protected]/logs/logs.go:58 +0x8a

What you expected to happen:

A more UI friendly error on a single line.

How to reproduce it (as minimally and precisely as possible):

Just try to join a cluster with values which do not exist. (Or any other command which is set to panic on error.)

kubefedctl join foo --host-cluster-context bar

Thanks!

/kind bug

Callisto13 avatar May 19 '22 15:05 Callisto13