Skip to content

Commit ab69d83

Browse files
committed
refactor: Standardize namespace resolution for kubectl-plugin.
1 parent 910223a commit ab69d83

19 files changed

+79
-83
lines changed

kubectl-plugin/pkg/cmd/create/create_cluster.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ func NewCreateClusterCommand(cmdFactory cmdutil.Factory, streams genericclioptio
150150
}
151151

152152
func (options *CreateClusterOptions) Complete(cmd *cobra.Command, args []string) error {
153-
namespace, err := cmd.Flags().GetString("namespace")
153+
namespace, _, err := options.cmdFactory.ToRawKubeConfigLoader().Namespace()
154154
if err != nil {
155155
return fmt.Errorf("failed to get namespace: %w", err)
156156
}
@@ -241,7 +241,10 @@ func (options *CreateClusterOptions) resolveClusterName() (string, error) {
241241

242242
// resolveNamespace resolves the namespace from the CLI flag and the config file
243243
func (options *CreateClusterOptions) resolveNamespace() (string, error) {
244-
namespace := "default"
244+
namespace, _, err := options.cmdFactory.ToRawKubeConfigLoader().Namespace()
245+
if err != nil {
246+
return "", fmt.Errorf("failed to get current namespace: %w", err)
247+
}
245248

246249
if options.rayClusterConfig.Namespace != nil && *options.rayClusterConfig.Namespace != "" && options.namespace != "" && options.namespace != *options.rayClusterConfig.Namespace {
247250
return "", fmt.Errorf("the namespace in the config file %q does not match the namespace %q. You must pass --namespace=%s to perform this operation", *options.rayClusterConfig.Namespace, options.namespace, *options.rayClusterConfig.Namespace)
@@ -274,10 +277,6 @@ func (options *CreateClusterOptions) Run(ctx context.Context, k8sClient client.C
274277
}
275278
options.rayClusterConfig.Namespace = &namespace
276279
} else {
277-
if options.namespace == "" {
278-
options.namespace = "default"
279-
}
280-
281280
options.rayClusterConfig = &generation.RayClusterConfig{
282281
Namespace: &options.namespace,
283282
Name: &options.clusterName,

kubectl-plugin/pkg/cmd/create/create_workergroup.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,16 +108,12 @@ func NewCreateWorkerGroupCommand(cmdFactory cmdutil.Factory, streams genericclio
108108
}
109109

110110
func (options *CreateWorkerGroupOptions) Complete(cmd *cobra.Command, args []string) error {
111-
namespace, err := cmd.Flags().GetString("namespace")
111+
namespace, _, err := options.cmdFactory.ToRawKubeConfigLoader().Namespace()
112112
if err != nil {
113113
return fmt.Errorf("failed to get namespace: %w", err)
114114
}
115115
options.namespace = namespace
116116

117-
if options.namespace == "" {
118-
options.namespace = "default"
119-
}
120-
121117
if options.rayStartParams == nil {
122118
options.rayStartParams = map[string]string{}
123119
}

kubectl-plugin/pkg/cmd/delete/delete.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,11 @@ func NewDeleteCommand(cmdFactory cmdutil.Factory, streams genericclioptions.IOSt
7878
}
7979

8080
func (options *DeleteOptions) Complete(cmd *cobra.Command, args []string) error {
81-
namespace, err := cmd.Flags().GetString("namespace")
81+
namespace, _, err := options.cmdFactory.ToRawKubeConfigLoader().Namespace()
8282
if err != nil {
8383
return fmt.Errorf("failed to get namespace: %w", err)
8484
}
8585
options.namespace = namespace
86-
if options.namespace == "" {
87-
options.namespace = "default"
88-
}
8986

9087
if options.resources == nil {
9188
options.resources = map[util.ResourceType][]string{}

kubectl-plugin/pkg/cmd/delete/delete_test.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414

1515
func TestComplete(t *testing.T) {
1616
testStreams, _, _, _ := genericclioptions.NewTestIOStreams()
17-
cmdFactory := cmdutil.NewFactory(genericclioptions.NewConfigFlags(true))
1817

1918
tests := []struct {
2019
name string
@@ -102,12 +101,17 @@ func TestComplete(t *testing.T) {
102101

103102
for _, tc := range tests {
104103
t.Run(tc.name, func(t *testing.T) {
105-
fakeDeleteOptions := NewDeleteOptions(cmdFactory, testStreams)
104+
configFlags := genericclioptions.NewConfigFlags(true)
105+
cmdFactory := cmdutil.NewFactory(configFlags)
106106

107+
fakeDeleteOptions := NewDeleteOptions(cmdFactory, testStreams)
107108
cmd := &cobra.Command{}
108-
cmd.Flags().StringVarP(&fakeDeleteOptions.namespace, "namespace", "n", tc.namespace, "")
109+
flags := cmd.Flags()
110+
configFlags.AddFlags(flags)
111+
err := flags.Set("namespace", tc.namespace)
112+
require.NoError(t, err)
109113

110-
err := fakeDeleteOptions.Complete(cmd, tc.args)
114+
err = fakeDeleteOptions.Complete(cmd, tc.args)
111115

112116
if tc.hasErr {
113117
require.Error(t, err)

kubectl-plugin/pkg/cmd/get/get_cluster.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func NewGetClusterCommand(cmdFactory cmdutil.Factory, streams genericclioptions.
4646
ValidArgsFunction: completion.RayClusterCompletionFunc(cmdFactory),
4747
Args: cobra.MaximumNArgs(1),
4848
RunE: func(cmd *cobra.Command, args []string) error {
49-
if err := options.Complete(args, cmd); err != nil {
49+
if err := options.Complete(args); err != nil {
5050
return err
5151
}
5252
// running cmd.Execute or cmd.ExecuteE sets the context, which will be done by root
@@ -61,15 +61,12 @@ func NewGetClusterCommand(cmdFactory cmdutil.Factory, streams genericclioptions.
6161
return cmd
6262
}
6363

64-
func (options *GetClusterOptions) Complete(args []string, cmd *cobra.Command) error {
65-
namespace, err := cmd.Flags().GetString("namespace")
64+
func (options *GetClusterOptions) Complete(args []string) error {
65+
namespace, _, err := options.cmdFactory.ToRawKubeConfigLoader().Namespace()
6666
if err != nil {
6767
return fmt.Errorf("failed to get namespace: %w", err)
6868
}
6969
options.namespace = namespace
70-
if options.namespace == "" {
71-
options.namespace = "default"
72-
}
7370

7471
if len(args) >= 1 {
7572
options.cluster = args[0]

kubectl-plugin/pkg/cmd/get/get_cluster_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func TestRayClusterGetComplete(t *testing.T) {
7474

7575
cmd := &cobra.Command{}
7676
cmd.Flags().StringVarP(&fakeClusterGetOptions.namespace, "namespace", "n", tc.namespace, "")
77-
err := fakeClusterGetOptions.Complete(tc.args, cmd)
77+
err := fakeClusterGetOptions.Complete(tc.args)
7878
require.NoError(t, err)
7979

8080
assert.Equal(t, tc.expectedAllNamespaces, fakeClusterGetOptions.allNamespaces)

kubectl-plugin/pkg/cmd/get/get_nodes.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func NewGetNodesCommand(cmdFactory cmdutil.Factory, streams genericclioptions.IO
8383
Args: cobra.MaximumNArgs(1),
8484
ValidArgsFunction: completion.NodeCompletionFunc(cmdFactory),
8585
RunE: func(cmd *cobra.Command, args []string) error {
86-
if err := options.Complete(args, cmd); err != nil {
86+
if err := options.Complete(args); err != nil {
8787
return err
8888
}
8989
k8sClient, err := client.NewClient(cmdFactory)
@@ -105,19 +105,15 @@ func NewGetNodesCommand(cmdFactory cmdutil.Factory, streams genericclioptions.IO
105105
return cmd
106106
}
107107

108-
func (options *GetNodesOptions) Complete(args []string, cmd *cobra.Command) error {
108+
func (options *GetNodesOptions) Complete(args []string) error {
109109
if options.allNamespaces {
110110
options.namespace = ""
111111
} else {
112-
namespace, err := cmd.Flags().GetString("namespace")
112+
namespace, _, err := options.cmdFactory.ToRawKubeConfigLoader().Namespace()
113113
if err != nil {
114114
return fmt.Errorf("failed to get namespace: %w", err)
115115
}
116116
options.namespace = namespace
117-
118-
if options.namespace == "" {
119-
options.namespace = "default"
120-
}
121117
}
122118

123119
if len(args) > 0 {

kubectl-plugin/pkg/cmd/get/get_nodes_test.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,14 @@ func TestRayNodesGetComplete(t *testing.T) {
8383

8484
for _, tc := range tests {
8585
t.Run(tc.name, func(t *testing.T) {
86+
configFlags := genericclioptions.NewConfigFlags(true)
87+
tc.opts.cmdFactory = cmdutil.NewFactory(configFlags)
88+
cmd := &cobra.Command{}
89+
flags := cmd.Flags()
90+
configFlags.AddFlags(flags)
8691
err := flags.Set("namespace", tc.namespace)
8792
require.NoError(t, err)
88-
err = tc.opts.Complete(tc.args, cmd)
93+
err = tc.opts.Complete(tc.args)
8994
require.NoError(t, err)
9095
assert.Equal(t, tc.expectedNamespace, tc.opts.namespace)
9196
assert.Equal(t, tc.expectedNode, tc.opts.node)

kubectl-plugin/pkg/cmd/get/get_token.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func NewGetTokenCommand(cmdFactory cmdutil.Factory, streams genericclioptions.IO
4040
ValidArgsFunction: completion.RayClusterCompletionFunc(cmdFactory),
4141
Args: cobra.ExactArgs(1),
4242
RunE: func(cmd *cobra.Command, args []string) error {
43-
if err := options.Complete(args, cmd); err != nil {
43+
if err := options.Complete(args); err != nil {
4444
return err
4545
}
4646
// running cmd.Execute or cmd.ExecuteE sets the context, which will be done by root
@@ -54,15 +54,12 @@ func NewGetTokenCommand(cmdFactory cmdutil.Factory, streams genericclioptions.IO
5454
return cmd
5555
}
5656

57-
func (options *GetTokenOptions) Complete(args []string, cmd *cobra.Command) error {
58-
namespace, err := cmd.Flags().GetString("namespace")
57+
func (options *GetTokenOptions) Complete(args []string) error {
58+
namespace, _, err := options.cmdFactory.ToRawKubeConfigLoader().Namespace()
5959
if err != nil {
6060
return fmt.Errorf("failed to get namespace: %w", err)
6161
}
6262
options.namespace = namespace
63-
if options.namespace == "" {
64-
options.namespace = "default"
65-
}
6663
// guarded by cobra.ExactArgs(1)
6764
options.cluster = args[0]
6865
return nil

kubectl-plugin/pkg/cmd/get/get_token_test.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ import (
1919

2020
// Tests the Run() step of the command and ensure that the output is as expected.
2121
func TestTokenGetRun(t *testing.T) {
22-
cmdFactory := cmdutil.NewFactory(genericclioptions.NewConfigFlags(true))
22+
configFlags := genericclioptions.NewConfigFlags(true)
23+
cmdFactory := cmdutil.NewFactory(configFlags)
2324

2425
testStreams, _, resBuf, _ := genericclioptions.NewTestIOStreams()
2526
fakeTokenGetOptions := NewGetTokenOptions(cmdFactory, testStreams)
@@ -51,8 +52,12 @@ func TestTokenGetRun(t *testing.T) {
5152
k8sClients := client.NewClientForTesting(kubeClientSet, rayClient)
5253

5354
cmd := &cobra.Command{}
54-
cmd.Flags().StringVarP(&fakeTokenGetOptions.namespace, "namespace", "n", secret.Namespace, "")
55-
err := fakeTokenGetOptions.Complete([]string{rayCluster.Name}, cmd)
55+
configFlags.AddFlags(cmd.Flags())
56+
err := cmd.Flags().Set("namespace", secret.Namespace)
57+
if err != nil {
58+
require.Error(t, err)
59+
}
60+
err = fakeTokenGetOptions.Complete([]string{rayCluster.Name})
5661
require.NoError(t, err)
5762
err = fakeTokenGetOptions.Run(t.Context(), k8sClients)
5863
require.NoError(t, err)

0 commit comments

Comments
 (0)