diff --git a/references/cli/adopt.go b/references/cli/adopt.go index a54ca22fa..72688044f 100644 --- a/references/cli/adopt.go +++ b/references/cli/adopt.go @@ -52,6 +52,7 @@ import ( velacmd "github.com/oam-dev/kubevela/pkg/cmd" cmdutil "github.com/oam-dev/kubevela/pkg/cmd/util" "github.com/oam-dev/kubevela/pkg/utils/apply" + "github.com/oam-dev/kubevela/pkg/utils/env" "github.com/oam-dev/kubevela/pkg/utils/util" ) @@ -133,6 +134,9 @@ func (opt *AdoptOptions) parseResourceRef(f velacmd.Factory, cmd *cobra.Command, or.Name = parts[1] if mapping.Scope.Name() == meta.RESTScopeNameNamespace { or.Namespace = velacmd.GetNamespace(f, cmd) + if or.Namespace == "" { + or.Namespace = env.DefaultEnvNamespace + } } case 3: or.Namespace = parts[1] @@ -160,6 +164,9 @@ func (opt *AdoptOptions) Complete(f velacmd.Factory, cmd *cobra.Command, args [] }) { opt.AppName = opt.NativeResourceRefs[0].Name } + if opt.AppNamespace == "" { + opt.AppNamespace = opt.NativeResourceRefs[0].Namespace + } case adoptTypeHelm: if len(args) > 0 { opt.HelmReleaseName = args[0] diff --git a/references/cli/adopt_test.go b/references/cli/adopt_test.go new file mode 100644 index 000000000..d9e8e89f2 --- /dev/null +++ b/references/cli/adopt_test.go @@ -0,0 +1,58 @@ +/* +Copyright 2021 The KubeVela Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cli + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "sigs.k8s.io/controller-runtime/pkg/client/config" + + velacmd "github.com/oam-dev/kubevela/pkg/cmd" + "github.com/oam-dev/kubevela/pkg/utils/util" +) + +func TestDefaultNamespace(t *testing.T) { + testcase := []struct { + namespace string + args []string + }{ + { + namespace: "kube-system", + args: []string{"deployment/kube-system/metrics-server"}, + }, + { + namespace: "default", + args: []string{"deployment/metrics-server"}, + }, + } + + for _, c := range testcase { + opt := &AdoptOptions{ + Type: adoptTypeNative, + Mode: adoptModeReadOnly, + } + f := velacmd.NewDeferredFactory(config.GetConfig) + ioStream := util.IOStreams{} + cmd := NewAdoptCommand(f, ioStream) + err := opt.Complete(f, cmd, c.args) + if err != nil { + t.Fatalf("failed to parse resourceRef: %v", err) + } + assert.Equal(t, opt.AppNamespace, c.namespace) + } +}