From 2e74df97a429a0ed555acdf47a7fea9cc61f29f5 Mon Sep 17 00:00:00 2001 From: Maciej Szulik Date: Tue, 3 Nov 2020 22:10:03 +0100 Subject: [PATCH] Introduce kubectl-convert plugin --- cmd/kubectl-convert/OWNERS | 9 ++++ cmd/kubectl-convert/kubectl-convert.go | 57 ++++++++++++++++++++++++++ pkg/kubectl/cmd/convert/convert.go | 8 ---- test/cmd/template-output.sh | 2 +- 4 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 cmd/kubectl-convert/OWNERS create mode 100644 cmd/kubectl-convert/kubectl-convert.go diff --git a/cmd/kubectl-convert/OWNERS b/cmd/kubectl-convert/OWNERS new file mode 100644 index 00000000000..a1f6b7eee30 --- /dev/null +++ b/cmd/kubectl-convert/OWNERS @@ -0,0 +1,9 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: +- sig-cli-maintainers +reviewers: +- sig-cli +labels: +- area/kubectl +- sig/cli diff --git a/cmd/kubectl-convert/kubectl-convert.go b/cmd/kubectl-convert/kubectl-convert.go new file mode 100644 index 00000000000..d030ae8bf3a --- /dev/null +++ b/cmd/kubectl-convert/kubectl-convert.go @@ -0,0 +1,57 @@ +/* +Copyright 2020 The Kubernetes 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 main + +import ( + goflag "flag" + "os" + + "github.com/spf13/pflag" + + "k8s.io/cli-runtime/pkg/genericclioptions" + cliflag "k8s.io/component-base/cli/flag" + cmdutil "k8s.io/kubectl/pkg/cmd/util" + "k8s.io/kubectl/pkg/util/logs" + "k8s.io/kubernetes/pkg/kubectl/cmd/convert" +) + +func main() { + flags := pflag.NewFlagSet("kubectl-convert", pflag.ExitOnError) + pflag.CommandLine = flags + + kubeConfigFlags := genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag() + kubeConfigFlags.AddFlags(flags) + matchVersionKubeConfigFlags := cmdutil.NewMatchVersionFlags(kubeConfigFlags) + + f := cmdutil.NewFactory(matchVersionKubeConfigFlags) + + // TODO: once we switch everything over to Cobra commands, we can go back to calling + // cliflag.InitFlags() (by removing its pflag.Parse() call). For now, we have to set the + // normalize func and add the go flag set by hand. + pflag.CommandLine.SetNormalizeFunc(cliflag.WordSepNormalizeFunc) + pflag.CommandLine.AddGoFlagSet(goflag.CommandLine) + // cliflag.InitFlags() + logs.InitLogs() + defer logs.FlushLogs() + + cmd := convert.NewCmdConvert(f, genericclioptions.IOStreams{In: os.Stdin, Out: os.Stdout, ErrOut: os.Stderr}) + matchVersionKubeConfigFlags.AddFlags(cmd.PersistentFlags()) + if err := cmd.Execute(); err != nil { + os.Exit(1) + } + +} diff --git a/pkg/kubectl/cmd/convert/convert.go b/pkg/kubectl/cmd/convert/convert.go index b8460e3ff33..74b16ccbbe4 100644 --- a/pkg/kubectl/cmd/convert/convert.go +++ b/pkg/kubectl/cmd/convert/convert.go @@ -137,14 +137,6 @@ func (o *ConvertOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) (err er // RunConvert implements the generic Convert command func (o *ConvertOptions) RunConvert() error { - - // Convert must be removed from kubectl, since kubectl can not depend on - // Kubernetes "internal" dependencies. These "internal" dependencies can - // not be removed from convert. Another way to convert a resource is to - // "kubectl apply" it to the cluster, then "kubectl get" at the desired version. - // Another possible solution is to make convert a plugin. - fmt.Fprintf(o.ErrOut, "kubectl convert is DEPRECATED and will be removed in a future version.\nIn order to convert, kubectl apply the object to the cluster, then kubectl get at the desired version.\n") - b := o.builder(). WithScheme(scheme.Scheme). LocalParam(o.local) diff --git a/test/cmd/template-output.sh b/test/cmd/template-output.sh index fae45802e00..b5e9fff2e27 100755 --- a/test/cmd/template-output.sh +++ b/test/cmd/template-output.sh @@ -63,7 +63,7 @@ run_template_output_tests() { kube::test::if_has_string "${output_message}" 'redis-slave:' # check that convert command supports --template output - output_message=$(kubectl "${kube_flags[@]:?}" convert -f hack/testdata/deployment-revision1.yaml --output-version=apps/v1beta1 --template="{{ .metadata.name }}:") + output_message=$(kubectl convert "${kube_flags[@]:?}" -f hack/testdata/deployment-revision1.yaml --output-version=apps/v1beta1 --template="{{ .metadata.name }}:") kube::test::if_has_string "${output_message}" 'nginx:' # check that run command supports --template output