From 4e47d34a0d2d7d420f2bf511a28b86da88e54213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arda=20G=C3=BC=C3=A7l=C3=BC?= Date: Fri, 30 Jan 2026 09:23:14 +0300 Subject: [PATCH] Promote kubectl kuberc commands to beta --- staging/src/k8s.io/kubectl/pkg/cmd/alpha.go | 6 --- staging/src/k8s.io/kubectl/pkg/cmd/cmd.go | 4 ++ .../k8s.io/kubectl/pkg/cmd/kuberc/kuberc.go | 6 +-- .../src/k8s.io/kubectl/pkg/cmd/kuberc/set.go | 10 ++-- .../src/k8s.io/kubectl/pkg/cmd/kuberc/view.go | 6 +-- test/cmd/kuberc.sh | 52 +++++++++---------- 6 files changed, 41 insertions(+), 43 deletions(-) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/alpha.go b/staging/src/k8s.io/kubectl/pkg/cmd/alpha.go index bc32cee0eb0..a5ad73e23f3 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/alpha.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/alpha.go @@ -21,7 +21,6 @@ import ( "k8s.io/cli-runtime/pkg/genericiooptions" - cmdkuberc "k8s.io/kubectl/pkg/cmd/kuberc" cmdutil "k8s.io/kubectl/pkg/cmd/util" "k8s.io/kubectl/pkg/util/i18n" "k8s.io/kubectl/pkg/util/templates" @@ -35,11 +34,6 @@ func NewCmdAlpha(f cmdutil.Factory, streams genericiooptions.IOStreams) *cobra.C Long: templates.LongDesc(i18n.T("These commands correspond to alpha features that are not enabled in Kubernetes clusters by default.")), } - // Add alpha commands - if !cmdutil.KubeRC.IsDisabled() { - cmd.AddCommand(cmdkuberc.NewCmdKubeRC(streams)) - } - // NewKubeletCommand() will hide the alpha command if it has no subcommands. Overriding // the help function ensures a reasonable message if someone types the hidden command anyway. if !cmd.HasAvailableSubCommands() { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/cmd.go b/staging/src/k8s.io/kubectl/pkg/cmd/cmd.go index 290a65d4f60..16c417b01fe 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/cmd.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/cmd.go @@ -55,6 +55,7 @@ import ( "k8s.io/kubectl/pkg/cmd/explain" "k8s.io/kubectl/pkg/cmd/expose" "k8s.io/kubectl/pkg/cmd/get" + kuberccmd "k8s.io/kubectl/pkg/cmd/kuberc" "k8s.io/kubectl/pkg/cmd/kustomize" "k8s.io/kubectl/pkg/cmd/label" "k8s.io/kubectl/pkg/cmd/logs" @@ -354,6 +355,9 @@ func NewKubectlCommand(o KubectlOptions) *cobra.Command { cmds.AddCommand(apiresources.NewCmdAPIVersions(f, o.IOStreams)) cmds.AddCommand(apiresources.NewCmdAPIResources(f, o.IOStreams)) cmds.AddCommand(options.NewCmdOptions(o.IOStreams.Out)) + if !cmdutil.KubeRC.IsDisabled() { + cmds.AddCommand(kuberccmd.NewCmdKubeRC(o.IOStreams)) + } // Stop warning about normalization of flags. That makes it possible to // add the klog flags later. diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/kuberc/kuberc.go b/staging/src/k8s.io/kubectl/pkg/cmd/kuberc/kuberc.go index d134fbd4c2e..212af0223ab 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/kuberc/kuberc.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/kuberc/kuberc.go @@ -32,13 +32,13 @@ var ( kubercExample = templates.Examples(i18n.T(` # View the current kuberc configuration - kubectl alpha kuberc view + kubectl kuberc view # Set a default value for a command flag - kubectl alpha kuberc set --section defaults --command get --option output=wide + kubectl kuberc set --section defaults --command get --option output=wide # Create an alias for a command - kubectl alpha kuberc set --section aliases --name getn --command get --prependarg nodes --option output=wide`)) + kubectl kuberc set --section aliases --name getn --command get --prependarg nodes --option output=wide`)) ) // NewCmdKubeRC creates a command object for the "kuberc" action, and adds all child commands to it. diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/kuberc/set.go b/staging/src/k8s.io/kubectl/pkg/cmd/kuberc/set.go index 8603bde08f6..26219336682 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/kuberc/set.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/kuberc/set.go @@ -52,19 +52,19 @@ var ( setExample = templates.Examples(i18n.T(` # Set default output format for 'get' command - kubectl alpha kuberc set --section defaults --command get --option output=wide + kubectl kuberc set --section defaults --command get --option output=wide # Set default output format for a subcommand - kubectl alpha kuberc set --section defaults --command "set env" --option output=yaml + kubectl kuberc set --section defaults --command "set env" --option output=yaml # Create an alias 'getn' for 'get' command with prepended 'nodes' resource - kubectl alpha kuberc set --section aliases --name getn --command get --prependarg nodes --option output=wide + kubectl kuberc set --section aliases --name getn --command get --prependarg nodes --option output=wide # Create an alias 'runx' for 'run' command with appended arguments - kubectl alpha kuberc set --section aliases --name runx --command run --option image=nginx --appendarg "--" --appendarg custom-arg1 + kubectl kuberc set --section aliases --name runx --command run --option image=nginx --appendarg "--" --appendarg custom-arg1 # Overwrite an existing default - kubectl alpha kuberc set --section defaults --command get --option output=json --overwrite`)) + kubectl kuberc set --section defaults --command get --option output=json --overwrite`)) ) // SetOptions contains the options for setting kuberc configuration diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/kuberc/view.go b/staging/src/k8s.io/kubectl/pkg/cmd/kuberc/view.go index b333b1aa89b..1b14cc57a4e 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/kuberc/view.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/kuberc/view.go @@ -38,13 +38,13 @@ var ( viewExample = templates.Examples(i18n.T(` # View kuberc configuration in YAML format (default) - kubectl alpha kuberc view + kubectl kuberc view # View kuberc configuration in JSON format - kubectl alpha kuberc view --output json + kubectl kuberc view --output json # View a specific kuberc file - kubectl alpha kuberc view --kuberc /path/to/kuberc`)) + kubectl kuberc view --kuberc /path/to/kuberc`)) ) // ViewOptions contains the options for viewing kuberc configuration diff --git a/test/cmd/kuberc.sh b/test/cmd/kuberc.sh index da5a9a07549..f66e2dab4e8 100755 --- a/test/cmd/kuberc.sh +++ b/test/cmd/kuberc.sh @@ -23,7 +23,7 @@ run_kuberc_tests() { set -o errexit create_and_use_new_namespace - kube::log::status "Testing kubectl alpha kuberc set commands" + kube::log::status "Testing kubectl kuberc set commands" KUBERC_FILE="${TMPDIR:-/tmp}"/kuberc_file cat > "$KUBERC_FILE" << EOF @@ -31,21 +31,21 @@ apiVersion: kubectl.config.k8s.io/v1beta1 kind: Preference EOF - # Build up the kuberc file using kubectl alpha kuberc set commands - kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=defaults --command=apply --option=server-side=true --option=dry-run=server --option=validate=strict - kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=defaults --command=delete --option=interactive=true - kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=defaults --command=get --option=namespace=test-kuberc-ns --option=output=json + # Build up the kuberc file using kubectl kuberc set commands + kubectl kuberc set --kuberc="$KUBERC_FILE" --section=defaults --command=apply --option=server-side=true --option=dry-run=server --option=validate=strict + kubectl kuberc set --kuberc="$KUBERC_FILE" --section=defaults --command=delete --option=interactive=true + kubectl kuberc set --kuberc="$KUBERC_FILE" --section=defaults --command=get --option=namespace=test-kuberc-ns --option=output=json - kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=crns --command="create namespace" --appendarg=test-kuberc-ns - kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=getn --command=get --prependarg=namespace --option=output=wide - kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=crole --command="create role" --option=verb=get,watch - kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=getrole --command=get --option=output=json - kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=runx --command=run --option=image=nginx --option=labels=app=test,env=test --option=env=DNS_DOMAIN=test --option=namespace=test-kuberc-ns --appendarg=test-pod-2 --appendarg=-- --appendarg=custom-arg1 --appendarg=custom-arg2 - kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=setx --command="set image" --appendarg=pod/test-pod-2 --appendarg=test-pod-2=busybox + kubectl kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=crns --command="create namespace" --appendarg=test-kuberc-ns + kubectl kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=getn --command=get --prependarg=namespace --option=output=wide + kubectl kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=crole --command="create role" --option=verb=get,watch + kubectl kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=getrole --command=get --option=output=json + kubectl kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=runx --command=run --option=image=nginx --option=labels=app=test,env=test --option=env=DNS_DOMAIN=test --option=namespace=test-kuberc-ns --appendarg=test-pod-2 --appendarg=-- --appendarg=custom-arg1 --appendarg=custom-arg2 + kubectl kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=setx --command="set image" --appendarg=pod/test-pod-2 --appendarg=test-pod-2=busybox - kube::log::status "Testing kubectl alpha kuberc view commands" - # Test: kubectl alpha kuberc view - output_message=$(kubectl alpha kuberc view --kuberc="$KUBERC_FILE") + kube::log::status "Testing kubectl kuberc view commands" + # Test: kubectl kuberc view + output_message=$(kubectl kuberc view --kuberc="$KUBERC_FILE") kube::test::if_has_string "${output_message}" "apiVersion: kubectl.config.k8s.io/v1beta1" kube::test::if_has_string "${output_message}" "kind: Preference" kube::test::if_has_string "${output_message}" "command: apply" @@ -53,45 +53,45 @@ EOF kube::test::if_has_string "${output_message}" "server-side" kube::test::if_has_string "${output_message}" "interactive" - # Test: kubectl alpha kuberc view with json output - output_message=$(kubectl alpha kuberc view --kuberc="$KUBERC_FILE" -o json) + # Test: kubectl kuberc view with json output + output_message=$(kubectl kuberc view --kuberc="$KUBERC_FILE" -o json) kube::test::if_has_string "${output_message}" "\"apiVersion\": \"kubectl.config.k8s.io/v1beta1\"" kube::test::if_has_string "${output_message}" "\"kind\": \"Preference\"" # Test: Attempt to set existing default without --overwrite flag should fail - output_message=$(! kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=defaults --command=get --option=output=yaml 2>&1) + output_message=$(! kubectl kuberc set --kuberc="$KUBERC_FILE" --section=defaults --command=get --option=output=yaml 2>&1) kube::test::if_has_string "${output_message}" "defaults for command \"get\" already exist, use --overwrite to replace" # Test: Now set with --overwrite flag should succeed and merge options - kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=defaults --command=get --option=output=yaml --overwrite - output_message=$(kubectl alpha kuberc view --kuberc="$KUBERC_FILE") + kubectl kuberc set --kuberc="$KUBERC_FILE" --section=defaults --command=get --option=output=yaml --overwrite + output_message=$(kubectl kuberc view --kuberc="$KUBERC_FILE") kube::test::if_has_string "${output_message}" "default: yaml" # Should still have namespace option from before kube::test::if_has_string "${output_message}" "default: test-kuberc-ns" # Test: Attempt to set existing alias without --overwrite flag should fail - output_message=$(! kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=getn --command=get --prependarg=pods 2>&1) + output_message=$(! kubectl kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=getn --command=get --prependarg=pods 2>&1) kube::test::if_has_string "${output_message}" "alias \"getn\" already exists, use --overwrite to replace" # Test: Error cases - Missing required flags - output_message=$(! kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --command=get --option=output=wide 2>&1) + output_message=$(! kubectl kuberc set --kuberc="$KUBERC_FILE" --command=get --option=output=wide 2>&1) kube::test::if_has_string "${output_message}" "required flag(s) \"section\" not set" - output_message=$(! kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=defaults --option=output=wide 2>&1) + output_message=$(! kubectl kuberc set --kuberc="$KUBERC_FILE" --section=defaults --option=output=wide 2>&1) kube::test::if_has_string "${output_message}" "required flag(s) \"command\" not set" # Test: KUBERC=off with view command - output_message=$(! KUBERC=off kubectl alpha kuberc view 2>&1) + output_message=$(! KUBERC=off kubectl kuberc view 2>&1) kube::test::if_has_string "${output_message}" "KUBERC is disabled via KUBERC=off environment variable" # Test: KUBERC=off with set command - output_message=$(! KUBERC=off kubectl alpha kuberc set --section=defaults --command=get --option=output=wide 2>&1) + output_message=$(! KUBERC=off kubectl kuberc set --section=defaults --command=get --option=output=wide 2>&1) kube::test::if_has_string "${output_message}" "KUBERC is disabled via KUBERC=off environment variable" # Restore getn alias back to "namespace" for remaining tests - kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=getn --command=get --prependarg=namespace --option=output=wide --overwrite + kubectl kuberc set --kuberc="$KUBERC_FILE" --section=aliases --name=getn --command=get --prependarg=namespace --option=output=wide --overwrite # Restore get defaults back to namespace=test-kuberc-ns and output=json for remaining tests - kubectl alpha kuberc set --kuberc="$KUBERC_FILE" --section=defaults --command=get --option=namespace=test-kuberc-ns --option=output=json --overwrite + kubectl kuberc set --kuberc="$KUBERC_FILE" --section=defaults --command=get --option=namespace=test-kuberc-ns --option=output=json --overwrite kube::log::status "Testing kuberc aliases and defaults functionality"