kubefed
kubefed copied to clipboard
Aggressive failure when command line args are wrong
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