From d1e95a07b24e03ffdf2c5957c4de3f501e9c0a84 Mon Sep 17 00:00:00 2001 From: Zzde Date: Mon, 12 Apr 2021 01:20:36 +0800 Subject: [PATCH 1/2] Set namespace when using kubectl create service --- .../kubectl/pkg/cmd/create/create_service.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_service.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_service.go index 09b776aaf48..afb17169263 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_service.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_service.go @@ -72,6 +72,7 @@ type ServiceOptions struct { FieldManager string CreateAnnotation bool Namespace string + EnforceNamespace bool Client corev1client.CoreV1Interface DryRunStrategy cmdutil.DryRunStrategy @@ -105,7 +106,7 @@ func (o *ServiceOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [] return err } - o.Namespace, _, err = f.ToRawKubeConfigLoader().Namespace() + o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace() if err != nil { return err } @@ -173,13 +174,19 @@ func (o *ServiceOptions) createService() (*corev1.Service, error) { selector := map[string]string{} selector["app"] = o.Name + namespace := "" + if o.EnforceNamespace { + namespace = o.Namespace + } + service := corev1.Service{ ObjectMeta: metav1.ObjectMeta{ - Name: o.Name, - Labels: labels, + Name: o.Name, + Labels: labels, + Namespace: namespace, }, Spec: corev1.ServiceSpec{ - Type: corev1.ServiceType(o.Type), + Type: o.Type, Selector: selector, Ports: ports, ExternalName: o.ExternalName, From 84b9159a2e7e20b143d5756bf7f9ccb36d58926a Mon Sep 17 00:00:00 2001 From: Zzde Date: Thu, 22 Apr 2021 17:39:23 +0800 Subject: [PATCH 2/2] Add test create service with ns --- .../pkg/cmd/create/create_service_test.go | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_service_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_service_test.go index 8365a116765..7249a68baa2 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_service_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_service_test.go @@ -17,6 +17,9 @@ limitations under the License. package create import ( + "k8s.io/cli-runtime/pkg/genericclioptions" + restclient "k8s.io/client-go/rest" + cmdtesting "k8s.io/kubectl/pkg/cmd/testing" "testing" v1 "k8s.io/api/core/v1" @@ -267,3 +270,22 @@ func TestCreateServices(t *testing.T) { }) } } + +func TestCreateServiceWithNamespace(t *testing.T) { + svcName := "test-service" + ns := "test" + tf := cmdtesting.NewTestFactory().WithNamespace(ns) + defer tf.Cleanup() + + tf.ClientConfigVal = &restclient.Config{} + + ioStreams, _, buf, _ := genericclioptions.NewTestIOStreams() + cmd := NewCmdCreateServiceClusterIP(tf, ioStreams) + cmd.Flags().Set("dry-run", "client") + cmd.Flags().Set("output", "jsonpath={.metadata.namespace}") + cmd.Flags().Set("clusterip", "None") + cmd.Run(cmd, []string{svcName}) + if buf.String() != ns { + t.Errorf("expected output: %s, but got: %s", ns, buf.String()) + } +}