diff --git a/go.mod b/go.mod index 7c9f941f0..b37cef3ce 100644 --- a/go.mod +++ b/go.mod @@ -32,8 +32,8 @@ require ( gopkg.in/yaml.v2 v2.4.0 k8s.io/api v0.0.0-20231011070906-133964c1133a k8s.io/apimachinery v0.0.0-20231011070637-1ca6c696c8e4 - k8s.io/cli-runtime v0.0.0-20231011074005-3d1197d7c1a6 - k8s.io/client-go v0.0.0-20231011071243-cf4002bbbf85 + k8s.io/cli-runtime v0.0.0-20231011193854-a96869e0c2be + k8s.io/client-go v0.0.0-20231011150411-57d597c1d633 k8s.io/component-base v0.0.0-20231011071914-d2d2799059b6 k8s.io/component-helpers v0.0.0-20231011072036-2cfdfb492663 k8s.io/klog/v2 v2.100.1 @@ -98,8 +98,8 @@ require ( replace ( k8s.io/api => k8s.io/api v0.0.0-20231011070906-133964c1133a k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20231011070637-1ca6c696c8e4 - k8s.io/cli-runtime => k8s.io/cli-runtime v0.0.0-20231011074005-3d1197d7c1a6 - k8s.io/client-go => k8s.io/client-go v0.0.0-20231011071243-cf4002bbbf85 + k8s.io/cli-runtime => k8s.io/cli-runtime v0.0.0-20231011193854-a96869e0c2be + k8s.io/client-go => k8s.io/client-go v0.0.0-20231011150411-57d597c1d633 k8s.io/code-generator => k8s.io/code-generator v0.0.0-20231011070418-d14db18ca33c k8s.io/component-base => k8s.io/component-base v0.0.0-20231011071914-d2d2799059b6 k8s.io/component-helpers => k8s.io/component-helpers v0.0.0-20231011072036-2cfdfb492663 diff --git a/go.sum b/go.sum index d3e0bb0e3..845a95311 100644 --- a/go.sum +++ b/go.sum @@ -280,10 +280,10 @@ k8s.io/api v0.0.0-20231011070906-133964c1133a h1:ewt1Wxw8kmOLVJfAatcAQhH1e8p/RrQ k8s.io/api v0.0.0-20231011070906-133964c1133a/go.mod h1:fu7/5TpQZY/iFHh5+Ss8NiQgwuMNFajKRNuU00g+a6U= k8s.io/apimachinery v0.0.0-20231011070637-1ca6c696c8e4 h1:B+3yeqV++bsLepyIyjsMGN4EJOxwykKC/vT5aGQjYjk= k8s.io/apimachinery v0.0.0-20231011070637-1ca6c696c8e4/go.mod h1:CaWZ0SJfeNC59+1gyc+rnythykg+OHqDPEGPQmVnTiE= -k8s.io/cli-runtime v0.0.0-20231011074005-3d1197d7c1a6 h1:pZqlZKHpNXXuuXKxFvM5ehihS5TAuKqaZU90a5kmsT0= -k8s.io/cli-runtime v0.0.0-20231011074005-3d1197d7c1a6/go.mod h1:i6RamxpYFpzIDv22wjLh3KtZ5kCCrx9XHG6WwaEJRsI= -k8s.io/client-go v0.0.0-20231011071243-cf4002bbbf85 h1:PeBqhcj2ZCn4f0IQVkxdE/4x2ySX2nE5ljkyOS1PmmU= -k8s.io/client-go v0.0.0-20231011071243-cf4002bbbf85/go.mod h1:4zPB+NUOQERJBGKdq7X91PGpvAI/jiK0NZEmq5c8wx4= +k8s.io/cli-runtime v0.0.0-20231011193854-a96869e0c2be h1:8UBiMQn87pMU6yoFM/WXkO7R/m5IJQvQOfiNmfc0H0M= +k8s.io/cli-runtime v0.0.0-20231011193854-a96869e0c2be/go.mod h1:L/ZADS+dmmZguNL+w4PdIjg/ytMzAu3+1qDxy9cL7GY= +k8s.io/client-go v0.0.0-20231011150411-57d597c1d633 h1:r21mAcOlMrjKXvltpLFxAmQpr5zVCmX0CGfuC1oX070= +k8s.io/client-go v0.0.0-20231011150411-57d597c1d633/go.mod h1:4zPB+NUOQERJBGKdq7X91PGpvAI/jiK0NZEmq5c8wx4= k8s.io/component-base v0.0.0-20231011071914-d2d2799059b6 h1:DaLh50HBfqyagz99VKlApWGGTQjwTZYneZh309zm40M= k8s.io/component-base v0.0.0-20231011071914-d2d2799059b6/go.mod h1:4eHXzsEQqrbZP52drXln0tPwtwp0YyajVy/n8vp6VGI= k8s.io/component-helpers v0.0.0-20231011072036-2cfdfb492663 h1:I5tqhXbxypHvWjTc2oDErCjA1B/vvmLwRtjFRuizOVI= diff --git a/pkg/cmd/cmd.go b/pkg/cmd/cmd.go index 6b3a84d50..cc554dea1 100644 --- a/pkg/cmd/cmd.go +++ b/pkg/cmd/cmd.go @@ -92,15 +92,18 @@ type KubectlOptions struct { genericiooptions.IOStreams } -var defaultConfigFlags = genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag().WithDiscoveryBurst(300).WithDiscoveryQPS(50.0) +func defaultConfigFlags() *genericclioptions.ConfigFlags { + return genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag().WithDiscoveryBurst(300).WithDiscoveryQPS(50.0) +} // NewDefaultKubectlCommand creates the `kubectl` command with default arguments func NewDefaultKubectlCommand() *cobra.Command { + ioStreams := genericiooptions.IOStreams{In: os.Stdin, Out: os.Stdout, ErrOut: os.Stderr} return NewDefaultKubectlCommandWithArgs(KubectlOptions{ PluginHandler: NewDefaultPluginHandler(plugin.ValidPluginFilenamePrefixes), Arguments: os.Args, - ConfigFlags: defaultConfigFlags, - IOStreams: genericiooptions.IOStreams{In: os.Stdin, Out: os.Stdout, ErrOut: os.Stderr}, + ConfigFlags: defaultConfigFlags().WithWarningPrinter(ioStreams), + IOStreams: ioStreams, }) } @@ -364,7 +367,7 @@ func NewKubectlCommand(o KubectlOptions) *cobra.Command { kubeConfigFlags := o.ConfigFlags if kubeConfigFlags == nil { - kubeConfigFlags = defaultConfigFlags + kubeConfigFlags = defaultConfigFlags().WithWarningPrinter(o.IOStreams) } kubeConfigFlags.AddFlags(flags) matchVersionKubeConfigFlags := cmdutil.NewMatchVersionFlags(kubeConfigFlags) diff --git a/pkg/cmd/testing/fake.go b/pkg/cmd/testing/fake.go index b10d17393..d5e78a72e 100644 --- a/pkg/cmd/testing/fake.go +++ b/pkg/cmd/testing/fake.go @@ -641,7 +641,7 @@ func testRESTMapper() meta.RESTMapper { } fakeDs := NewFakeCachedDiscoveryClient() - expander := restmapper.NewShortcutExpander(mapper, fakeDs) + expander := restmapper.NewShortcutExpander(mapper, fakeDs, nil) return expander } diff --git a/pkg/util/term/term.go b/pkg/util/term/term.go index 6bcda59d7..93a992fe3 100644 --- a/pkg/util/term/term.go +++ b/pkg/util/term/term.go @@ -19,7 +19,8 @@ package term import ( "io" "os" - "runtime" + + "k8s.io/cli-runtime/pkg/printers" "github.com/moby/term" @@ -56,46 +57,23 @@ type TTY struct { // IsTerminalIn returns true if t.In is a terminal. Does not check /dev/tty // even if TryDev is set. func (t TTY) IsTerminalIn() bool { - return IsTerminal(t.In) + return printers.IsTerminal(t.In) } // IsTerminalOut returns true if t.Out is a terminal. Does not check /dev/tty // even if TryDev is set. func (t TTY) IsTerminalOut() bool { - return IsTerminal(t.Out) + return printers.IsTerminal(t.Out) } -// IsTerminal returns whether the passed object is a terminal or not -func IsTerminal(i interface{}) bool { - _, terminal := term.GetFdInfo(i) - return terminal -} +// IsTerminal returns whether the passed object is a terminal or not. +// Deprecated: use printers.IsTerminal instead. +var IsTerminal = printers.IsTerminal // AllowsColorOutput returns true if the specified writer is a terminal and // the process environment indicates color output is supported and desired. -func AllowsColorOutput(w io.Writer) bool { - if !IsTerminal(w) { - return false - } - - // https://en.wikipedia.org/wiki/Computer_terminal#Dumb_terminals - if os.Getenv("TERM") == "dumb" { - return false - } - - // https://no-color.org/ - if _, nocolor := os.LookupEnv("NO_COLOR"); nocolor { - return false - } - - // On Windows WT_SESSION is set by the modern terminal component. - // Older terminals have poor support for UTF-8, VT escape codes, etc. - if runtime.GOOS == "windows" && os.Getenv("WT_SESSION") == "" { - return false - } - - return true -} +// Deprecated: use printers.AllowsColorOutput instead. +var AllowsColorOutput = printers.AllowsColorOutput // Safe invokes the provided function and will attempt to ensure that when the // function returns (or a termination signal is sent) that the terminal state