Merge pull request #68441 from smarterclayton/describe_dependency

Move versioned generators into their own package
pull/58/head
k8s-ci-robot 2018-10-17 04:24:06 -07:00 committed by GitHub
commit 0d6f6a680b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
77 changed files with 940 additions and 716 deletions

View File

@ -391,10 +391,9 @@ package_group(
name = "pkg_kubectl_util_CONSUMERS", name = "pkg_kubectl_util_CONSUMERS",
packages = [ packages = [
"//pkg/kubectl", "//pkg/kubectl",
"//pkg/kubectl/cmd", "//pkg/kubectl/cmd/...",
"//pkg/kubectl/cmd/logs", "//pkg/kubectl/generate",
"//pkg/kubectl/cmd/portforward", "//pkg/kubectl/generate/versioned",
"//pkg/kubectl/cmd/rollingupdate",
"//pkg/kubectl/proxy", "//pkg/kubectl/proxy",
], ],
) )

View File

@ -189,6 +189,8 @@ pkg/kubectl/cmd/util/openapi
pkg/kubectl/cmd/util/sanity pkg/kubectl/cmd/util/sanity
pkg/kubectl/cmd/version pkg/kubectl/cmd/version
pkg/kubectl/cmd/wait pkg/kubectl/cmd/wait
pkg/kubectl/generate
pkg/kubectl/generate/versioned
pkg/kubectl/metricsutil pkg/kubectl/metricsutil
pkg/kubectl/util pkg/kubectl/util
pkg/kubectl/util/slice pkg/kubectl/util/slice

View File

@ -9,29 +9,11 @@ load(
go_test( go_test(
name = "go_default_test", name = "go_default_test",
srcs = [ srcs = [
"autoscale_test.go",
"clusterrolebinding_test.go",
"configmap_test.go",
"deployment_test.go",
"env_file_test.go",
"generate_test.go",
"history_test.go", "history_test.go",
"namespace_test.go",
"pdb_test.go",
"priorityclass_test.go",
"quota_test.go",
"rolebinding_test.go",
"rollback_test.go", "rollback_test.go",
"rolling_updater_test.go", "rolling_updater_test.go",
"rollout_status_test.go", "rollout_status_test.go",
"run_test.go",
"scale_test.go", "scale_test.go",
"secret_for_docker_registry_test.go",
"secret_for_tls_test.go",
"secret_test.go",
"service_basic_test.go",
"service_test.go",
"serviceaccount_test.go",
"sorter_test.go", "sorter_test.go",
], ],
embed = [":go_default_library"], embed = [":go_default_library"],
@ -39,21 +21,11 @@ go_test(
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/util:go_default_library", "//pkg/kubectl/util:go_default_library",
"//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library",
"//staging/src/k8s.io/api/apps/v1beta1:go_default_library",
"//staging/src/k8s.io/api/autoscaling/v1:go_default_library", "//staging/src/k8s.io/api/autoscaling/v1:go_default_library",
"//staging/src/k8s.io/api/batch/v1:go_default_library",
"//staging/src/k8s.io/api/batch/v1beta1:go_default_library",
"//staging/src/k8s.io/api/batch/v2alpha1:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/api/extensions/v1beta1:go_default_library",
"//staging/src/k8s.io/api/policy/v1beta1:go_default_library",
"//staging/src/k8s.io/api/rbac/v1:go_default_library",
"//staging/src/k8s.io/api/rbac/v1beta1:go_default_library",
"//staging/src/k8s.io/api/scheduling/v1beta1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/testapigroup/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/testapigroup/v1:go_default_library",
@ -69,9 +41,6 @@ go_test(
"//staging/src/k8s.io/client-go/scale:go_default_library", "//staging/src/k8s.io/client-go/scale:go_default_library",
"//staging/src/k8s.io/client-go/scale/fake:go_default_library", "//staging/src/k8s.io/client-go/scale/fake:go_default_library",
"//staging/src/k8s.io/client-go/testing:go_default_library", "//staging/src/k8s.io/client-go/testing:go_default_library",
"//staging/src/k8s.io/client-go/util/testing:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library",
"//vendor/k8s.io/utils/pointer:go_default_library",
], ],
) )
@ -79,32 +48,14 @@ go_library(
name = "go_default_library", name = "go_default_library",
srcs = [ srcs = [
"apply.go", "apply.go",
"autoscale.go",
"clusterrolebinding.go",
"conditions.go", "conditions.go",
"configmap.go",
"deployment.go",
"doc.go", "doc.go",
"env_file.go",
"generate.go",
"history.go", "history.go",
"interfaces.go", "interfaces.go",
"namespace.go",
"pdb.go",
"priorityclass.go",
"quota.go",
"rolebinding.go",
"rollback.go", "rollback.go",
"rolling_updater.go", "rolling_updater.go",
"rollout_status.go", "rollout_status.go",
"run.go",
"scale.go", "scale.go",
"secret.go",
"secret_for_docker_registry.go",
"secret_for_tls.go",
"service.go",
"service_basic.go",
"serviceaccount.go",
"sorter.go", "sorter.go",
], ],
importpath = "k8s.io/kubernetes/pkg/kubectl", importpath = "k8s.io/kubernetes/pkg/kubectl",
@ -112,30 +63,19 @@ go_library(
"//pkg/apis/core:go_default_library", "//pkg/apis/core:go_default_library",
"//pkg/apis/core/v1:go_default_library", "//pkg/apis/core/v1:go_default_library",
"//pkg/controller/deployment/util:go_default_library", "//pkg/controller/deployment/util:go_default_library",
"//pkg/credentialprovider:go_default_library",
"//pkg/kubectl/apps:go_default_library", "//pkg/kubectl/apps:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/util:go_default_library", "//pkg/kubectl/util:go_default_library",
"//pkg/kubectl/util/hash:go_default_library",
"//pkg/kubectl/util/podutils:go_default_library", "//pkg/kubectl/util/podutils:go_default_library",
"//pkg/kubectl/util/slice:go_default_library", "//pkg/kubectl/util/slice:go_default_library",
"//pkg/printers:go_default_library", "//pkg/printers:go_default_library",
"//pkg/printers/internalversion:go_default_library", "//pkg/printers/internalversion:go_default_library",
"//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library",
"//staging/src/k8s.io/api/apps/v1beta1:go_default_library",
"//staging/src/k8s.io/api/autoscaling/v1:go_default_library", "//staging/src/k8s.io/api/autoscaling/v1:go_default_library",
"//staging/src/k8s.io/api/batch/v1:go_default_library",
"//staging/src/k8s.io/api/batch/v1beta1:go_default_library",
"//staging/src/k8s.io/api/batch/v2alpha1:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/api/extensions/v1beta1:go_default_library", "//staging/src/k8s.io/api/extensions/v1beta1:go_default_library",
"//staging/src/k8s.io/api/policy/v1beta1:go_default_library",
"//staging/src/k8s.io/api/rbac/v1:go_default_library",
"//staging/src/k8s.io/api/rbac/v1beta1:go_default_library",
"//staging/src/k8s.io/api/scheduling/v1beta1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1beta1:go_default_library",
@ -143,12 +83,9 @@ go_library(
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/json:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/json:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
@ -160,8 +97,6 @@ go_library(
"//staging/src/k8s.io/client-go/util/jsonpath:go_default_library", "//staging/src/k8s.io/client-go/util/jsonpath:go_default_library",
"//staging/src/k8s.io/client-go/util/retry:go_default_library", "//staging/src/k8s.io/client-go/util/retry:go_default_library",
"//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/golang/glog:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library",
"//vendor/github.com/spf13/pflag:go_default_library",
"//vendor/vbom.ml/util/sortorder:go_default_library", "//vendor/vbom.ml/util/sortorder:go_default_library",
], ],
) )
@ -180,7 +115,9 @@ filegroup(
"//pkg/kubectl/apply:all-srcs", "//pkg/kubectl/apply:all-srcs",
"//pkg/kubectl/apps:all-srcs", "//pkg/kubectl/apps:all-srcs",
"//pkg/kubectl/cmd:all-srcs", "//pkg/kubectl/cmd:all-srcs",
"//pkg/kubectl/describe:all-srcs",
"//pkg/kubectl/explain:all-srcs", "//pkg/kubectl/explain:all-srcs",
"//pkg/kubectl/generate:all-srcs",
"//pkg/kubectl/metricsutil:all-srcs", "//pkg/kubectl/metricsutil:all-srcs",
"//pkg/kubectl/polymorphichelpers:all-srcs", "//pkg/kubectl/polymorphichelpers:all-srcs",
"//pkg/kubectl/proxy:all-srcs", "//pkg/kubectl/proxy:all-srcs",

View File

@ -8,6 +8,8 @@ go_library(
deps = [ deps = [
"//pkg/kubectl:go_default_library", "//pkg/kubectl:go_default_library",
"//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util:go_default_library",
"//pkg/kubectl/generate:go_default_library",
"//pkg/kubectl/generate/versioned:go_default_library",
"//pkg/kubectl/polymorphichelpers:go_default_library", "//pkg/kubectl/polymorphichelpers:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/i18n:go_default_library",

View File

@ -30,6 +30,8 @@ import (
autoscalingv1client "k8s.io/client-go/kubernetes/typed/autoscaling/v1" autoscalingv1client "k8s.io/client-go/kubernetes/typed/autoscaling/v1"
"k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/generate"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/polymorphichelpers" "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
@ -73,7 +75,7 @@ type AutoscaleOptions struct {
dryRun bool dryRun bool
builder *resource.Builder builder *resource.Builder
canBeAutoscaled polymorphichelpers.CanBeAutoscaledFunc canBeAutoscaled polymorphichelpers.CanBeAutoscaledFunc
generatorFunc func(string, *meta.RESTMapping) (kubectl.StructuredGenerator, error) generatorFunc func(string, *meta.RESTMapping) (generate.StructuredGenerator, error)
HPAClient autoscalingv1client.HorizontalPodAutoscalersGetter HPAClient autoscalingv1client.HorizontalPodAutoscalersGetter
@ -114,7 +116,7 @@ func NewCmdAutoscale(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *
o.RecordFlags.AddFlags(cmd) o.RecordFlags.AddFlags(cmd)
o.PrintFlags.AddFlags(cmd) o.PrintFlags.AddFlags(cmd)
cmd.Flags().StringVar(&o.Generator, "generator", cmdutil.HorizontalPodAutoscalerV1GeneratorName, i18n.T("The name of the API generator to use. Currently there is only 1 generator.")) cmd.Flags().StringVar(&o.Generator, "generator", generateversioned.HorizontalPodAutoscalerV1GeneratorName, i18n.T("The name of the API generator to use. Currently there is only 1 generator."))
cmd.Flags().Int32Var(&o.Min, "min", -1, "The lower limit for the number of pods that can be set by the autoscaler. If it's not specified or negative, the server will apply a default value.") cmd.Flags().Int32Var(&o.Min, "min", -1, "The lower limit for the number of pods that can be set by the autoscaler. If it's not specified or negative, the server will apply a default value.")
cmd.Flags().Int32Var(&o.Max, "max", -1, "The upper limit for the number of pods that can be set by the autoscaler. Required.") cmd.Flags().Int32Var(&o.Max, "max", -1, "The upper limit for the number of pods that can be set by the autoscaler. Required.")
cmd.MarkFlagRequired("max") cmd.MarkFlagRequired("max")
@ -147,10 +149,10 @@ func (o *AutoscaleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args
o.HPAClient = kubeClient.AutoscalingV1() o.HPAClient = kubeClient.AutoscalingV1()
// get the generator // get the generator
o.generatorFunc = func(name string, mapping *meta.RESTMapping) (kubectl.StructuredGenerator, error) { o.generatorFunc = func(name string, mapping *meta.RESTMapping) (generate.StructuredGenerator, error) {
switch o.Generator { switch o.Generator {
case cmdutil.HorizontalPodAutoscalerV1GeneratorName: case generateversioned.HorizontalPodAutoscalerV1GeneratorName:
return &kubectl.HorizontalPodAutoscalerGeneratorV1{ return &generateversioned.HorizontalPodAutoscalerGeneratorV1{
Name: name, Name: name,
MinReplicas: o.Min, MinReplicas: o.Min,
MaxReplicas: o.Max, MaxReplicas: o.Max,

View File

@ -25,6 +25,8 @@ go_library(
"//pkg/kubectl:go_default_library", "//pkg/kubectl:go_default_library",
"//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util:go_default_library",
"//pkg/kubectl/cmd/util/editor:go_default_library", "//pkg/kubectl/cmd/util/editor:go_default_library",
"//pkg/kubectl/generate:go_default_library",
"//pkg/kubectl/generate/versioned:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/i18n:go_default_library",
"//pkg/kubectl/util/templates:go_default_library", "//pkg/kubectl/util/templates:go_default_library",
@ -74,9 +76,8 @@ go_test(
], ],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//pkg/kubectl:go_default_library",
"//pkg/kubectl/cmd/testing:go_default_library", "//pkg/kubectl/cmd/testing:go_default_library",
"//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/generate/versioned:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//staging/src/k8s.io/api/batch/v1:go_default_library", "//staging/src/k8s.io/api/batch/v1:go_default_library",
"//staging/src/k8s.io/api/batch/v1beta1:go_default_library", "//staging/src/k8s.io/api/batch/v1beta1:go_default_library",

View File

@ -39,6 +39,7 @@ import (
"k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/cmd/util/editor" "k8s.io/kubernetes/pkg/kubectl/cmd/util/editor"
"k8s.io/kubernetes/pkg/kubectl/generate"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/templates" "k8s.io/kubernetes/pkg/kubectl/util/templates"
@ -346,7 +347,7 @@ type CreateSubcommandOptions struct {
// Name of resource being created // Name of resource being created
Name string Name string
// StructuredGenerator is the resource generator for the object being created // StructuredGenerator is the resource generator for the object being created
StructuredGenerator kubectl.StructuredGenerator StructuredGenerator generate.StructuredGenerator
// DryRun is true if the command should be simulated but not run against the server // DryRun is true if the command should be simulated but not run against the server
DryRun bool DryRun bool
CreateAnnotation bool CreateAnnotation bool
@ -369,7 +370,7 @@ func NewCreateSubcommandOptions(ioStreams genericclioptions.IOStreams) *CreateSu
} }
} }
func (o *CreateSubcommandOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string, generator kubectl.StructuredGenerator) error { func (o *CreateSubcommandOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string, generator generate.StructuredGenerator) error {
name, err := NameFromCommandArgs(cmd, args) name, err := NameFromCommandArgs(cmd, args)
if err != nil { if err != nil {
return err return err

View File

@ -20,8 +20,9 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/generate"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/templates" "k8s.io/kubernetes/pkg/kubectl/util/templates"
) )
@ -61,7 +62,7 @@ func NewCmdCreateClusterRoleBinding(f cmdutil.Factory, ioStreams genericclioptio
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.ClusterRoleBindingV1GeneratorName) cmdutil.AddGeneratorFlags(cmd, generateversioned.ClusterRoleBindingV1GeneratorName)
cmd.Flags().String("clusterrole", "", i18n.T("ClusterRole this ClusterRoleBinding should reference")) cmd.Flags().String("clusterrole", "", i18n.T("ClusterRole this ClusterRoleBinding should reference"))
cmd.MarkFlagCustom("clusterrole", "__kubectl_get_resource_clusterrole") cmd.MarkFlagCustom("clusterrole", "__kubectl_get_resource_clusterrole")
cmd.Flags().StringArray("user", []string{}, "Usernames to bind to the clusterrole") cmd.Flags().StringArray("user", []string{}, "Usernames to bind to the clusterrole")
@ -76,10 +77,10 @@ func (o *ClusterRoleBindingOpts) Complete(f cmdutil.Factory, cmd *cobra.Command,
return err return err
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.ClusterRoleBindingV1GeneratorName: case generateversioned.ClusterRoleBindingV1GeneratorName:
generator = &kubectl.ClusterRoleBindingGeneratorV1{ generator = &generateversioned.ClusterRoleBindingGeneratorV1{
Name: name, Name: name,
ClusterRole: cmdutil.GetFlagString(cmd, "clusterrole"), ClusterRole: cmdutil.GetFlagString(cmd, "clusterrole"),
Users: cmdutil.GetFlagStringArray(cmd, "user"), Users: cmdutil.GetFlagStringArray(cmd, "user"),

View File

@ -20,8 +20,9 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/generate"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/templates" "k8s.io/kubernetes/pkg/kubectl/util/templates"
) )
@ -83,7 +84,7 @@ func NewCmdCreateConfigMap(f cmdutil.Factory, ioStreams genericclioptions.IOStre
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.ConfigMapV1GeneratorName) cmdutil.AddGeneratorFlags(cmd, generateversioned.ConfigMapV1GeneratorName)
cmd.Flags().StringSlice("from-file", []string{}, "Key file can be specified using its file path, in which case file basename will be used as configmap key, or optionally with a key and file path, in which case the given key will be used. Specifying a directory will iterate each named file in the directory whose basename is a valid configmap key.") cmd.Flags().StringSlice("from-file", []string{}, "Key file can be specified using its file path, in which case file basename will be used as configmap key, or optionally with a key and file path, in which case the given key will be used. Specifying a directory will iterate each named file in the directory whose basename is a valid configmap key.")
cmd.Flags().StringArray("from-literal", []string{}, "Specify a key and literal value to insert in configmap (i.e. mykey=somevalue)") cmd.Flags().StringArray("from-literal", []string{}, "Specify a key and literal value to insert in configmap (i.e. mykey=somevalue)")
cmd.Flags().String("from-env-file", "", "Specify the path to a file to read lines of key=val pairs to create a configmap (i.e. a Docker .env file).") cmd.Flags().String("from-env-file", "", "Specify the path to a file to read lines of key=val pairs to create a configmap (i.e. a Docker .env file).")
@ -97,10 +98,10 @@ func (o *ConfigMapOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []s
return err return err
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.ConfigMapV1GeneratorName: case generateversioned.ConfigMapV1GeneratorName:
generator = &kubectl.ConfigMapGeneratorV1{ generator = &generateversioned.ConfigMapGeneratorV1{
Name: name, Name: name,
FileSources: cmdutil.GetFlagStringSlice(cmd, "from-file"), FileSources: cmdutil.GetFlagStringSlice(cmd, "from-file"),
LiteralSources: cmdutil.GetFlagStringArray(cmd, "from-literal"), LiteralSources: cmdutil.GetFlagStringArray(cmd, "from-literal"),

View File

@ -20,8 +20,9 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/generate"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/templates" "k8s.io/kubernetes/pkg/kubectl/util/templates"
) )
@ -77,30 +78,30 @@ func generatorFromName(
generatorName string, generatorName string,
imageNames []string, imageNames []string,
deploymentName string, deploymentName string,
) (kubectl.StructuredGenerator, bool) { ) (generate.StructuredGenerator, bool) {
switch generatorName { switch generatorName {
case cmdutil.DeploymentBasicAppsV1GeneratorName: case generateversioned.DeploymentBasicAppsV1GeneratorName:
generator := &kubectl.DeploymentBasicAppsGeneratorV1{ generator := &generateversioned.DeploymentBasicAppsGeneratorV1{
BaseDeploymentGenerator: kubectl.BaseDeploymentGenerator{ BaseDeploymentGenerator: generateversioned.BaseDeploymentGenerator{
Name: deploymentName, Name: deploymentName,
Images: imageNames, Images: imageNames,
}, },
} }
return generator, true return generator, true
case cmdutil.DeploymentBasicAppsV1Beta1GeneratorName: case generateversioned.DeploymentBasicAppsV1Beta1GeneratorName:
generator := &kubectl.DeploymentBasicAppsGeneratorV1Beta1{ generator := &generateversioned.DeploymentBasicAppsGeneratorV1Beta1{
BaseDeploymentGenerator: kubectl.BaseDeploymentGenerator{ BaseDeploymentGenerator: generateversioned.BaseDeploymentGenerator{
Name: deploymentName, Name: deploymentName,
Images: imageNames, Images: imageNames,
}, },
} }
return generator, true return generator, true
case cmdutil.DeploymentBasicV1Beta1GeneratorName: case generateversioned.DeploymentBasicV1Beta1GeneratorName:
generator := &kubectl.DeploymentBasicGeneratorV1{ generator := &generateversioned.DeploymentBasicGeneratorV1{
BaseDeploymentGenerator: kubectl.BaseDeploymentGenerator{ BaseDeploymentGenerator: generateversioned.BaseDeploymentGenerator{
Name: deploymentName, Name: deploymentName,
Images: imageNames, Images: imageNames,
}, },
@ -125,8 +126,8 @@ func (o *DeploymentOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []
generatorName := cmdutil.GetFlagString(cmd, "generator") generatorName := cmdutil.GetFlagString(cmd, "generator")
if len(generatorName) == 0 { if len(generatorName) == 0 {
generatorName = cmdutil.DeploymentBasicAppsV1GeneratorName generatorName = generateversioned.DeploymentBasicAppsV1GeneratorName
generatorNameTemp, err := cmdutil.FallbackGeneratorNameIfNecessary(generatorName, clientset.Discovery(), o.CreateSubcommandOptions.ErrOut) generatorNameTemp, err := generateversioned.FallbackGeneratorNameIfNecessary(generatorName, clientset.Discovery(), o.CreateSubcommandOptions.ErrOut)
if err != nil { if err != nil {
return err return err
} }

View File

@ -27,18 +27,17 @@ import (
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
restclient "k8s.io/client-go/rest" restclient "k8s.io/client-go/rest"
"k8s.io/client-go/rest/fake" "k8s.io/client-go/rest/fake"
"k8s.io/kubernetes/pkg/kubectl"
cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
) )
func Test_generatorFromName(t *testing.T) { func Test_generatorFromName(t *testing.T) {
const ( const (
nonsenseName = "not-a-real-generator-name" nonsenseName = "not-a-real-generator-name"
basicName = cmdutil.DeploymentBasicV1Beta1GeneratorName basicName = generateversioned.DeploymentBasicV1Beta1GeneratorName
basicAppsV1Beta1Name = cmdutil.DeploymentBasicAppsV1Beta1GeneratorName basicAppsV1Beta1Name = generateversioned.DeploymentBasicAppsV1Beta1GeneratorName
basicAppsV1Name = cmdutil.DeploymentBasicAppsV1GeneratorName basicAppsV1Name = generateversioned.DeploymentBasicAppsV1GeneratorName
deploymentName = "deployment-name" deploymentName = "deployment-name"
) )
imageNames := []string{"image-1", "image-2"} imageNames := []string{"image-1", "image-2"}
@ -51,8 +50,8 @@ func Test_generatorFromName(t *testing.T) {
assert.True(t, ok) assert.True(t, ok)
{ {
expectedGenerator := &kubectl.DeploymentBasicGeneratorV1{ expectedGenerator := &generateversioned.DeploymentBasicGeneratorV1{
BaseDeploymentGenerator: kubectl.BaseDeploymentGenerator{ BaseDeploymentGenerator: generateversioned.BaseDeploymentGenerator{
Name: deploymentName, Name: deploymentName,
Images: imageNames, Images: imageNames,
}, },
@ -64,8 +63,8 @@ func Test_generatorFromName(t *testing.T) {
assert.True(t, ok) assert.True(t, ok)
{ {
expectedGenerator := &kubectl.DeploymentBasicAppsGeneratorV1Beta1{ expectedGenerator := &generateversioned.DeploymentBasicAppsGeneratorV1Beta1{
BaseDeploymentGenerator: kubectl.BaseDeploymentGenerator{ BaseDeploymentGenerator: generateversioned.BaseDeploymentGenerator{
Name: deploymentName, Name: deploymentName,
Images: imageNames, Images: imageNames,
}, },
@ -77,8 +76,8 @@ func Test_generatorFromName(t *testing.T) {
assert.True(t, ok) assert.True(t, ok)
{ {
expectedGenerator := &kubectl.DeploymentBasicAppsGeneratorV1{ expectedGenerator := &generateversioned.DeploymentBasicAppsGeneratorV1{
BaseDeploymentGenerator: kubectl.BaseDeploymentGenerator{ BaseDeploymentGenerator: generateversioned.BaseDeploymentGenerator{
Name: deploymentName, Name: deploymentName,
Images: imageNames, Images: imageNames,
}, },

View File

@ -20,8 +20,9 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/generate"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/templates" "k8s.io/kubernetes/pkg/kubectl/util/templates"
) )
@ -62,7 +63,7 @@ func NewCmdCreateNamespace(f cmdutil.Factory, ioStreams genericclioptions.IOStre
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.NamespaceV1GeneratorName) cmdutil.AddGeneratorFlags(cmd, generateversioned.NamespaceV1GeneratorName)
return cmd return cmd
} }
@ -73,10 +74,10 @@ func (o *NamespaceOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []s
return err return err
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.NamespaceV1GeneratorName: case generateversioned.NamespaceV1GeneratorName:
generator = &kubectl.NamespaceGeneratorV1{Name: name} generator = &generateversioned.NamespaceGeneratorV1{Name: name}
default: default:
return errUnsupportedGenerator(cmd, generatorName) return errUnsupportedGenerator(cmd, generatorName)
} }

View File

@ -20,8 +20,9 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/generate"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/templates" "k8s.io/kubernetes/pkg/kubectl/util/templates"
) )
@ -67,7 +68,7 @@ func NewCmdCreatePodDisruptionBudget(f cmdutil.Factory, ioStreams genericcliopti
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.PodDisruptionBudgetV2GeneratorName) cmdutil.AddGeneratorFlags(cmd, generateversioned.PodDisruptionBudgetV2GeneratorName)
cmd.Flags().String("min-available", "", i18n.T("The minimum number or percentage of available pods this budget requires.")) cmd.Flags().String("min-available", "", i18n.T("The minimum number or percentage of available pods this budget requires."))
cmd.Flags().String("max-unavailable", "", i18n.T("The maximum number or percentage of unavailable pods this budget requires.")) cmd.Flags().String("max-unavailable", "", i18n.T("The maximum number or percentage of unavailable pods this budget requires."))
@ -81,16 +82,16 @@ func (o *PodDisruptionBudgetOpts) Complete(f cmdutil.Factory, cmd *cobra.Command
return err return err
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.PodDisruptionBudgetV1GeneratorName: case generateversioned.PodDisruptionBudgetV1GeneratorName:
generator = &kubectl.PodDisruptionBudgetV1Generator{ generator = &generateversioned.PodDisruptionBudgetV1Generator{
Name: name, Name: name,
MinAvailable: cmdutil.GetFlagString(cmd, "min-available"), MinAvailable: cmdutil.GetFlagString(cmd, "min-available"),
Selector: cmdutil.GetFlagString(cmd, "selector"), Selector: cmdutil.GetFlagString(cmd, "selector"),
} }
case cmdutil.PodDisruptionBudgetV2GeneratorName: case generateversioned.PodDisruptionBudgetV2GeneratorName:
generator = &kubectl.PodDisruptionBudgetV2Generator{ generator = &generateversioned.PodDisruptionBudgetV2Generator{
Name: name, Name: name,
MinAvailable: cmdutil.GetFlagString(cmd, "min-available"), MinAvailable: cmdutil.GetFlagString(cmd, "min-available"),
MaxUnavailable: cmdutil.GetFlagString(cmd, "max-unavailable"), MaxUnavailable: cmdutil.GetFlagString(cmd, "max-unavailable"),

View File

@ -20,8 +20,9 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/generate"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/templates" "k8s.io/kubernetes/pkg/kubectl/util/templates"
) )
@ -65,7 +66,7 @@ func NewCmdCreatePriorityClass(f cmdutil.Factory, ioStreams genericclioptions.IO
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.PriorityClassV1Alpha1GeneratorName) cmdutil.AddGeneratorFlags(cmd, generateversioned.PriorityClassV1Alpha1GeneratorName)
cmd.Flags().Int32("value", 0, i18n.T("the value of this priority class.")) cmd.Flags().Int32("value", 0, i18n.T("the value of this priority class."))
cmd.Flags().Bool("global-default", false, i18n.T("global-default specifies whether this PriorityClass should be considered as the default priority.")) cmd.Flags().Bool("global-default", false, i18n.T("global-default specifies whether this PriorityClass should be considered as the default priority."))
@ -79,10 +80,10 @@ func (o *PriorityClassOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args
return err return err
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.PriorityClassV1Alpha1GeneratorName: case generateversioned.PriorityClassV1Alpha1GeneratorName:
generator = &kubectl.PriorityClassV1Generator{ generator = &generateversioned.PriorityClassV1Generator{
Name: name, Name: name,
Value: cmdutil.GetFlagInt32(cmd, "value"), Value: cmdutil.GetFlagInt32(cmd, "value"),
GlobalDefault: cmdutil.GetFlagBool(cmd, "global-default"), GlobalDefault: cmdutil.GetFlagBool(cmd, "global-default"),

View File

@ -20,8 +20,9 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/generate"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/templates" "k8s.io/kubernetes/pkg/kubectl/util/templates"
) )
@ -65,7 +66,7 @@ func NewCmdCreateQuota(f cmdutil.Factory, ioStreams genericclioptions.IOStreams)
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.ResourceQuotaV1GeneratorName) cmdutil.AddGeneratorFlags(cmd, generateversioned.ResourceQuotaV1GeneratorName)
cmd.Flags().String("hard", "", i18n.T("A comma-delimited set of resource=quantity pairs that define a hard limit.")) cmd.Flags().String("hard", "", i18n.T("A comma-delimited set of resource=quantity pairs that define a hard limit."))
cmd.Flags().String("scopes", "", i18n.T("A comma-delimited set of quota scopes that must all match each object tracked by the quota.")) cmd.Flags().String("scopes", "", i18n.T("A comma-delimited set of quota scopes that must all match each object tracked by the quota."))
return cmd return cmd
@ -77,10 +78,10 @@ func (o *QuotaOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []strin
return err return err
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.ResourceQuotaV1GeneratorName: case generateversioned.ResourceQuotaV1GeneratorName:
generator = &kubectl.ResourceQuotaGeneratorV1{ generator = &generateversioned.ResourceQuotaGeneratorV1{
Name: name, Name: name,
Hard: cmdutil.GetFlagString(cmd, "hard"), Hard: cmdutil.GetFlagString(cmd, "hard"),
Scopes: cmdutil.GetFlagString(cmd, "scopes"), Scopes: cmdutil.GetFlagString(cmd, "scopes"),

View File

@ -20,8 +20,9 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/generate"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/templates" "k8s.io/kubernetes/pkg/kubectl/util/templates"
) )
@ -61,7 +62,7 @@ func NewCmdCreateRoleBinding(f cmdutil.Factory, ioStreams genericclioptions.IOSt
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.RoleBindingV1GeneratorName) cmdutil.AddGeneratorFlags(cmd, generateversioned.RoleBindingV1GeneratorName)
cmd.Flags().String("clusterrole", "", i18n.T("ClusterRole this RoleBinding should reference")) cmd.Flags().String("clusterrole", "", i18n.T("ClusterRole this RoleBinding should reference"))
cmd.Flags().String("role", "", i18n.T("Role this RoleBinding should reference")) cmd.Flags().String("role", "", i18n.T("Role this RoleBinding should reference"))
cmd.Flags().StringArray("user", []string{}, "Usernames to bind to the role") cmd.Flags().StringArray("user", []string{}, "Usernames to bind to the role")
@ -76,10 +77,10 @@ func (o *RoleBindingOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args [
return err return err
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.RoleBindingV1GeneratorName: case generateversioned.RoleBindingV1GeneratorName:
generator = &kubectl.RoleBindingGeneratorV1{ generator = &generateversioned.RoleBindingGeneratorV1{
Name: name, Name: name,
ClusterRole: cmdutil.GetFlagString(cmd, "clusterrole"), ClusterRole: cmdutil.GetFlagString(cmd, "clusterrole"),
Role: cmdutil.GetFlagString(cmd, "role"), Role: cmdutil.GetFlagString(cmd, "role"),

View File

@ -20,8 +20,9 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/generate"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/templates" "k8s.io/kubernetes/pkg/kubectl/util/templates"
) )
@ -98,7 +99,7 @@ func NewCmdCreateSecretGeneric(f cmdutil.Factory, ioStreams genericclioptions.IO
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.SecretV1GeneratorName) cmdutil.AddGeneratorFlags(cmd, generateversioned.SecretV1GeneratorName)
cmd.Flags().StringSlice("from-file", []string{}, "Key files can be specified using their file path, in which case a default name will be given to them, or optionally with a name and file path, in which case the given name will be used. Specifying a directory will iterate each named file in the directory that is a valid secret key.") cmd.Flags().StringSlice("from-file", []string{}, "Key files can be specified using their file path, in which case a default name will be given to them, or optionally with a name and file path, in which case the given name will be used. Specifying a directory will iterate each named file in the directory that is a valid secret key.")
cmd.Flags().StringArray("from-literal", []string{}, "Specify a key and literal value to insert in secret (i.e. mykey=somevalue)") cmd.Flags().StringArray("from-literal", []string{}, "Specify a key and literal value to insert in secret (i.e. mykey=somevalue)")
cmd.Flags().String("from-env-file", "", "Specify the path to a file to read lines of key=val pairs to create a secret (i.e. a Docker .env file).") cmd.Flags().String("from-env-file", "", "Specify the path to a file to read lines of key=val pairs to create a secret (i.e. a Docker .env file).")
@ -113,10 +114,10 @@ func (o *SecretGenericOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args
return err return err
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.SecretV1GeneratorName: case generateversioned.SecretV1GeneratorName:
generator = &kubectl.SecretGeneratorV1{ generator = &generateversioned.SecretGeneratorV1{
Name: name, Name: name,
Type: cmdutil.GetFlagString(cmd, "type"), Type: cmdutil.GetFlagString(cmd, "type"),
FileSources: cmdutil.GetFlagStringSlice(cmd, "from-file"), FileSources: cmdutil.GetFlagStringSlice(cmd, "from-file"),
@ -183,7 +184,7 @@ func NewCmdCreateSecretDockerRegistry(f cmdutil.Factory, ioStreams genericcliopt
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.SecretForDockerRegistryV1GeneratorName) cmdutil.AddGeneratorFlags(cmd, generateversioned.SecretForDockerRegistryV1GeneratorName)
cmd.Flags().String("docker-username", "", i18n.T("Username for Docker registry authentication")) cmd.Flags().String("docker-username", "", i18n.T("Username for Docker registry authentication"))
cmd.MarkFlagRequired("docker-username") cmd.MarkFlagRequired("docker-username")
cmd.Flags().String("docker-password", "", i18n.T("Password for Docker registry authentication")) cmd.Flags().String("docker-password", "", i18n.T("Password for Docker registry authentication"))
@ -212,10 +213,10 @@ func (o *SecretDockerRegistryOpts) Complete(f cmdutil.Factory, cmd *cobra.Comman
} }
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.SecretForDockerRegistryV1GeneratorName: case generateversioned.SecretForDockerRegistryV1GeneratorName:
generator = &kubectl.SecretForDockerRegistryGeneratorV1{ generator = &generateversioned.SecretForDockerRegistryGeneratorV1{
Name: name, Name: name,
Username: cmdutil.GetFlagString(cmd, "docker-username"), Username: cmdutil.GetFlagString(cmd, "docker-username"),
Email: cmdutil.GetFlagString(cmd, "docker-email"), Email: cmdutil.GetFlagString(cmd, "docker-email"),
@ -274,7 +275,7 @@ func NewCmdCreateSecretTLS(f cmdutil.Factory, ioStreams genericclioptions.IOStre
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.SecretForTLSV1GeneratorName) cmdutil.AddGeneratorFlags(cmd, generateversioned.SecretForTLSV1GeneratorName)
cmd.Flags().String("cert", "", i18n.T("Path to PEM encoded public key certificate.")) cmd.Flags().String("cert", "", i18n.T("Path to PEM encoded public key certificate."))
cmd.Flags().String("key", "", i18n.T("Path to private key associated with given certificate.")) cmd.Flags().String("key", "", i18n.T("Path to private key associated with given certificate."))
cmd.Flags().Bool("append-hash", false, "Append a hash of the secret to its name.") cmd.Flags().Bool("append-hash", false, "Append a hash of the secret to its name.")
@ -293,10 +294,10 @@ func (o *SecretTLSOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []s
return cmdutil.UsageErrorf(cmd, "flag %s is required", requiredFlag) return cmdutil.UsageErrorf(cmd, "flag %s is required", requiredFlag)
} }
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.SecretForTLSV1GeneratorName: case generateversioned.SecretForTLSV1GeneratorName:
generator = &kubectl.SecretForTLSGeneratorV1{ generator = &generateversioned.SecretForTLSGeneratorV1{
Name: name, Name: name,
Key: cmdutil.GetFlagString(cmd, "key"), Key: cmdutil.GetFlagString(cmd, "key"),
Cert: cmdutil.GetFlagString(cmd, "cert"), Cert: cmdutil.GetFlagString(cmd, "cert"),

View File

@ -21,8 +21,9 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/generate"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/templates" "k8s.io/kubernetes/pkg/kubectl/util/templates"
) )
@ -86,7 +87,7 @@ func NewCmdCreateServiceClusterIP(f cmdutil.Factory, ioStreams genericclioptions
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.ServiceClusterIPGeneratorV1Name) cmdutil.AddGeneratorFlags(cmd, generateversioned.ServiceClusterIPGeneratorV1Name)
addPortFlags(cmd) addPortFlags(cmd)
cmd.Flags().String("clusterip", "", i18n.T("Assign your own ClusterIP or set to 'None' for a 'headless' service (no loadbalancing).")) cmd.Flags().String("clusterip", "", i18n.T("Assign your own ClusterIP or set to 'None' for a 'headless' service (no loadbalancing)."))
return cmd return cmd
@ -102,10 +103,10 @@ func (o *ServiceClusterIPOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, a
return err return err
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.ServiceClusterIPGeneratorV1Name: case generateversioned.ServiceClusterIPGeneratorV1Name:
generator = &kubectl.ServiceCommonGeneratorV1{ generator = &generateversioned.ServiceCommonGeneratorV1{
Name: name, Name: name,
TCP: cmdutil.GetFlagStringSlice(cmd, "tcp"), TCP: cmdutil.GetFlagStringSlice(cmd, "tcp"),
Type: v1.ServiceTypeClusterIP, Type: v1.ServiceTypeClusterIP,
@ -158,7 +159,7 @@ func NewCmdCreateServiceNodePort(f cmdutil.Factory, ioStreams genericclioptions.
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.ServiceNodePortGeneratorV1Name) cmdutil.AddGeneratorFlags(cmd, generateversioned.ServiceNodePortGeneratorV1Name)
cmd.Flags().Int("node-port", 0, "Port used to expose the service on each node in a cluster.") cmd.Flags().Int("node-port", 0, "Port used to expose the service on each node in a cluster.")
addPortFlags(cmd) addPortFlags(cmd)
return cmd return cmd
@ -170,10 +171,10 @@ func (o *ServiceNodePortOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, ar
return err return err
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.ServiceNodePortGeneratorV1Name: case generateversioned.ServiceNodePortGeneratorV1Name:
generator = &kubectl.ServiceCommonGeneratorV1{ generator = &generateversioned.ServiceCommonGeneratorV1{
Name: name, Name: name,
TCP: cmdutil.GetFlagStringSlice(cmd, "tcp"), TCP: cmdutil.GetFlagStringSlice(cmd, "tcp"),
Type: v1.ServiceTypeNodePort, Type: v1.ServiceTypeNodePort,
@ -227,7 +228,7 @@ func NewCmdCreateServiceLoadBalancer(f cmdutil.Factory, ioStreams genericcliopti
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.ServiceLoadBalancerGeneratorV1Name) cmdutil.AddGeneratorFlags(cmd, generateversioned.ServiceLoadBalancerGeneratorV1Name)
addPortFlags(cmd) addPortFlags(cmd)
return cmd return cmd
} }
@ -238,10 +239,10 @@ func (o *ServiceLoadBalancerOpts) Complete(f cmdutil.Factory, cmd *cobra.Command
return err return err
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.ServiceLoadBalancerGeneratorV1Name: case generateversioned.ServiceLoadBalancerGeneratorV1Name:
generator = &kubectl.ServiceCommonGeneratorV1{ generator = &generateversioned.ServiceCommonGeneratorV1{
Name: name, Name: name,
TCP: cmdutil.GetFlagStringSlice(cmd, "tcp"), TCP: cmdutil.GetFlagStringSlice(cmd, "tcp"),
Type: v1.ServiceTypeLoadBalancer, Type: v1.ServiceTypeLoadBalancer,
@ -298,7 +299,7 @@ func NewCmdCreateServiceExternalName(f cmdutil.Factory, ioStreams genericcliopti
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.ServiceExternalNameGeneratorV1Name) cmdutil.AddGeneratorFlags(cmd, generateversioned.ServiceExternalNameGeneratorV1Name)
addPortFlags(cmd) addPortFlags(cmd)
cmd.Flags().String("external-name", "", i18n.T("External name of service")) cmd.Flags().String("external-name", "", i18n.T("External name of service"))
cmd.MarkFlagRequired("external-name") cmd.MarkFlagRequired("external-name")
@ -311,10 +312,10 @@ func (o *ServiceExternalNameOpts) Complete(f cmdutil.Factory, cmd *cobra.Command
return err return err
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.ServiceExternalNameGeneratorV1Name: case generateversioned.ServiceExternalNameGeneratorV1Name:
generator = &kubectl.ServiceCommonGeneratorV1{ generator = &generateversioned.ServiceCommonGeneratorV1{
Name: name, Name: name,
Type: v1.ServiceTypeExternalName, Type: v1.ServiceTypeExternalName,
ExternalName: cmdutil.GetFlagString(cmd, "external-name"), ExternalName: cmdutil.GetFlagString(cmd, "external-name"),

View File

@ -20,8 +20,9 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/generate"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/templates" "k8s.io/kubernetes/pkg/kubectl/util/templates"
) )
@ -62,7 +63,7 @@ func NewCmdCreateServiceAccount(f cmdutil.Factory, ioStreams genericclioptions.I
cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd)
cmdutil.AddValidateFlags(cmd) cmdutil.AddValidateFlags(cmd)
cmdutil.AddGeneratorFlags(cmd, cmdutil.ServiceAccountV1GeneratorName) cmdutil.AddGeneratorFlags(cmd, generateversioned.ServiceAccountV1GeneratorName)
return cmd return cmd
} }
@ -72,10 +73,10 @@ func (o *ServiceAccountOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, arg
return err return err
} }
var generator kubectl.StructuredGenerator var generator generate.StructuredGenerator
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName { switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
case cmdutil.ServiceAccountV1GeneratorName: case generateversioned.ServiceAccountV1GeneratorName:
generator = &kubectl.ServiceAccountGeneratorV1{Name: name} generator = &generateversioned.ServiceAccountGeneratorV1{Name: name}
default: default:
return errUnsupportedGenerator(cmd, generatorName) return errUnsupportedGenerator(cmd, generatorName)
} }

View File

@ -7,6 +7,7 @@ go_library(
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util:go_default_library",
"//pkg/kubectl/describe/versioned:go_default_library",
"//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/i18n:go_default_library",
"//pkg/kubectl/util/templates:go_default_library", "//pkg/kubectl/util/templates:go_default_library",
"//pkg/printers:go_default_library", "//pkg/printers:go_default_library",
@ -29,7 +30,7 @@ go_test(
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//pkg/kubectl/cmd/testing:go_default_library", "//pkg/kubectl/cmd/testing:go_default_library",
"//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/describe/versioned:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/printers:go_default_library", "//pkg/printers:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library",

View File

@ -29,6 +29,7 @@ import (
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/cli-runtime/pkg/genericclioptions/resource" "k8s.io/cli-runtime/pkg/genericclioptions/resource"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
describeversioned "k8s.io/kubernetes/pkg/kubectl/describe/versioned"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/templates" "k8s.io/kubernetes/pkg/kubectl/util/templates"
"k8s.io/kubernetes/pkg/printers" "k8s.io/kubernetes/pkg/printers"
@ -138,7 +139,7 @@ func (o *DescribeOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [
o.BuilderArgs = args o.BuilderArgs = args
o.Describer = func(mapping *meta.RESTMapping) (printers.Describer, error) { o.Describer = func(mapping *meta.RESTMapping) (printers.Describer, error) {
return cmdutil.DescriberFn(f, mapping) return describeversioned.DescriberFn(f, mapping)
} }
o.NewBuilder = f.NewBuilder o.NewBuilder = f.NewBuilder

View File

@ -27,7 +27,7 @@ import (
"k8s.io/cli-runtime/pkg/genericclioptions/resource" "k8s.io/cli-runtime/pkg/genericclioptions/resource"
"k8s.io/client-go/rest/fake" "k8s.io/client-go/rest/fake"
cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" describe "k8s.io/kubernetes/pkg/kubectl/describe/versioned"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/printers" "k8s.io/kubernetes/pkg/printers"
) )
@ -35,11 +35,11 @@ import (
// Verifies that schemas that are not in the master tree of Kubernetes can be retrieved via Get. // Verifies that schemas that are not in the master tree of Kubernetes can be retrieved via Get.
func TestDescribeUnknownSchemaObject(t *testing.T) { func TestDescribeUnknownSchemaObject(t *testing.T) {
d := &testDescriber{Output: "test output"} d := &testDescriber{Output: "test output"}
oldFn := cmdutil.DescriberFn oldFn := describe.DescriberFn
defer func() { defer func() {
cmdutil.DescriberFn = oldFn describe.DescriberFn = oldFn
}() }()
cmdutil.DescriberFn = d.describerFor describe.DescriberFn = d.describerFor
tf := cmdtesting.NewTestFactory().WithNamespace("non-default") tf := cmdtesting.NewTestFactory().WithNamespace("non-default")
defer tf.Cleanup() defer tf.Cleanup()
@ -67,11 +67,11 @@ func TestDescribeUnknownSchemaObject(t *testing.T) {
// Verifies that schemas that are not in the master tree of Kubernetes can be retrieved via Get. // Verifies that schemas that are not in the master tree of Kubernetes can be retrieved via Get.
func TestDescribeUnknownNamespacedSchemaObject(t *testing.T) { func TestDescribeUnknownNamespacedSchemaObject(t *testing.T) {
d := &testDescriber{Output: "test output"} d := &testDescriber{Output: "test output"}
oldFn := cmdutil.DescriberFn oldFn := describe.DescriberFn
defer func() { defer func() {
cmdutil.DescriberFn = oldFn describe.DescriberFn = oldFn
}() }()
cmdutil.DescriberFn = d.describerFor describe.DescriberFn = d.describerFor
tf := cmdtesting.NewTestFactory() tf := cmdtesting.NewTestFactory()
defer tf.Cleanup() defer tf.Cleanup()
@ -99,11 +99,11 @@ func TestDescribeUnknownNamespacedSchemaObject(t *testing.T) {
func TestDescribeObject(t *testing.T) { func TestDescribeObject(t *testing.T) {
d := &testDescriber{Output: "test output"} d := &testDescriber{Output: "test output"}
oldFn := cmdutil.DescriberFn oldFn := describe.DescriberFn
defer func() { defer func() {
cmdutil.DescriberFn = oldFn describe.DescriberFn = oldFn
}() }()
cmdutil.DescriberFn = d.describerFor describe.DescriberFn = d.describerFor
_, _, rc := cmdtesting.TestData() _, _, rc := cmdtesting.TestData()
tf := cmdtesting.NewTestFactory().WithNamespace("test") tf := cmdtesting.NewTestFactory().WithNamespace("test")
@ -140,11 +140,11 @@ func TestDescribeObject(t *testing.T) {
func TestDescribeListObjects(t *testing.T) { func TestDescribeListObjects(t *testing.T) {
d := &testDescriber{Output: "test output"} d := &testDescriber{Output: "test output"}
oldFn := cmdutil.DescriberFn oldFn := describe.DescriberFn
defer func() { defer func() {
cmdutil.DescriberFn = oldFn describe.DescriberFn = oldFn
}() }()
cmdutil.DescriberFn = d.describerFor describe.DescriberFn = d.describerFor
pods, _, _ := cmdtesting.TestData() pods, _, _ := cmdtesting.TestData()
tf := cmdtesting.NewTestFactory().WithNamespace("test") tf := cmdtesting.NewTestFactory().WithNamespace("test")
@ -167,11 +167,11 @@ func TestDescribeListObjects(t *testing.T) {
func TestDescribeObjectShowEvents(t *testing.T) { func TestDescribeObjectShowEvents(t *testing.T) {
d := &testDescriber{Output: "test output"} d := &testDescriber{Output: "test output"}
oldFn := cmdutil.DescriberFn oldFn := describe.DescriberFn
defer func() { defer func() {
cmdutil.DescriberFn = oldFn describe.DescriberFn = oldFn
}() }()
cmdutil.DescriberFn = d.describerFor describe.DescriberFn = d.describerFor
pods, _, _ := cmdtesting.TestData() pods, _, _ := cmdtesting.TestData()
tf := cmdtesting.NewTestFactory().WithNamespace("test") tf := cmdtesting.NewTestFactory().WithNamespace("test")
@ -193,11 +193,11 @@ func TestDescribeObjectShowEvents(t *testing.T) {
func TestDescribeObjectSkipEvents(t *testing.T) { func TestDescribeObjectSkipEvents(t *testing.T) {
d := &testDescriber{Output: "test output"} d := &testDescriber{Output: "test output"}
oldFn := cmdutil.DescriberFn oldFn := describe.DescriberFn
defer func() { defer func() {
cmdutil.DescriberFn = oldFn describe.DescriberFn = oldFn
}() }()
cmdutil.DescriberFn = d.describerFor describe.DescriberFn = d.describerFor
pods, _, _ := cmdtesting.TestData() pods, _, _ := cmdtesting.TestData()
tf := cmdtesting.NewTestFactory().WithNamespace("test") tf := cmdtesting.NewTestFactory().WithNamespace("test")

View File

@ -8,6 +8,8 @@ go_library(
deps = [ deps = [
"//pkg/kubectl:go_default_library", "//pkg/kubectl:go_default_library",
"//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util:go_default_library",
"//pkg/kubectl/generate:go_default_library",
"//pkg/kubectl/generate/versioned:go_default_library",
"//pkg/kubectl/polymorphichelpers:go_default_library", "//pkg/kubectl/polymorphichelpers:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/i18n:go_default_library",

View File

@ -35,6 +35,8 @@ import (
"k8s.io/client-go/dynamic" "k8s.io/client-go/dynamic"
"k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/generate"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/polymorphichelpers" "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
@ -90,7 +92,7 @@ type ExposeServiceOptions struct {
DryRun bool DryRun bool
EnforceNamespace bool EnforceNamespace bool
Generators func(string) map[string]kubectl.Generator Generators func(string) map[string]generate.Generator
CanBeExposed polymorphichelpers.CanBeExposedFunc CanBeExposed polymorphichelpers.CanBeExposedFunc
MapBasedSelectorForObject func(runtime.Object) (string, error) MapBasedSelectorForObject func(runtime.Object) (string, error)
PortsForObject polymorphichelpers.PortsForObjectFunc PortsForObject polymorphichelpers.PortsForObjectFunc
@ -187,7 +189,7 @@ func (o *ExposeServiceOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) e
return err return err
} }
o.Generators = cmdutil.GeneratorFn o.Generators = generateversioned.GeneratorFn
o.Builder = f.NewBuilder() o.Builder = f.NewBuilder()
o.CanBeExposed = polymorphichelpers.CanBeExposedFn o.CanBeExposed = polymorphichelpers.CanBeExposedFn
o.MapBasedSelectorForObject = polymorphichelpers.MapBasedSelectorForObjectFn o.MapBasedSelectorForObject = polymorphichelpers.MapBasedSelectorForObjectFn
@ -240,7 +242,7 @@ func (o *ExposeServiceOptions) RunExpose(cmd *cobra.Command, args []string) erro
return err return err
} }
params := kubectl.MakeParams(cmd, names) params := generate.MakeParams(cmd, names)
name := info.Name name := info.Name
if len(name) > validation.DNS1035LabelMaxLength { if len(name) > validation.DNS1035LabelMaxLength {
name = name[:validation.DNS1035LabelMaxLength] name = name[:validation.DNS1035LabelMaxLength]
@ -249,7 +251,7 @@ func (o *ExposeServiceOptions) RunExpose(cmd *cobra.Command, args []string) erro
// For objects that need a pod selector, derive it from the exposed object in case a user // For objects that need a pod selector, derive it from the exposed object in case a user
// didn't explicitly specify one via --selector // didn't explicitly specify one via --selector
if s, found := params["selector"]; found && kubectl.IsZero(s) { if s, found := params["selector"]; found && generate.IsZero(s) {
s, err := o.MapBasedSelectorForObject(info.Object) s, err := o.MapBasedSelectorForObject(info.Object)
if err != nil { if err != nil {
return cmdutil.UsageErrorf(cmd, "couldn't retrieve selectors via --selector flag or introspection: %v", err) return cmdutil.UsageErrorf(cmd, "couldn't retrieve selectors via --selector flag or introspection: %v", err)
@ -261,7 +263,7 @@ func (o *ExposeServiceOptions) RunExpose(cmd *cobra.Command, args []string) erro
// For objects that need a port, derive it from the exposed object in case a user // For objects that need a port, derive it from the exposed object in case a user
// didn't explicitly specify one via --port // didn't explicitly specify one via --port
if port, found := params["port"]; found && kubectl.IsZero(port) { if port, found := params["port"]; found && generate.IsZero(port) {
ports, err := o.PortsForObject(info.Object) ports, err := o.PortsForObject(info.Object)
if err != nil { if err != nil {
return cmdutil.UsageErrorf(cmd, "couldn't find port via --port flag or introspection: %v", err) return cmdutil.UsageErrorf(cmd, "couldn't find port via --port flag or introspection: %v", err)
@ -285,23 +287,23 @@ func (o *ExposeServiceOptions) RunExpose(cmd *cobra.Command, args []string) erro
if err != nil { if err != nil {
return cmdutil.UsageErrorf(cmd, "couldn't find protocol via introspection: %v", err) return cmdutil.UsageErrorf(cmd, "couldn't find protocol via introspection: %v", err)
} }
if protocols := kubectl.MakeProtocols(protocolsMap); !kubectl.IsZero(protocols) { if protocols := generate.MakeProtocols(protocolsMap); !generate.IsZero(protocols) {
params["protocols"] = protocols params["protocols"] = protocols
} }
} }
if kubectl.IsZero(params["labels"]) { if generate.IsZero(params["labels"]) {
labels, err := meta.NewAccessor().Labels(info.Object) labels, err := meta.NewAccessor().Labels(info.Object)
if err != nil { if err != nil {
return err return err
} }
params["labels"] = kubectl.MakeLabels(labels) params["labels"] = generate.MakeLabels(labels)
} }
if err = kubectl.ValidateParams(names, params); err != nil { if err = generate.ValidateParams(names, params); err != nil {
return err return err
} }
// Check for invalid flags used against the present generator. // Check for invalid flags used against the present generator.
if err := kubectl.EnsureFlagsValid(cmd, generators, generatorName); err != nil { if err := generate.EnsureFlagsValid(cmd, generators, generatorName); err != nil {
return err return err
} }

View File

@ -12,6 +12,8 @@ go_library(
"//pkg/kubectl/cmd/exec:go_default_library", "//pkg/kubectl/cmd/exec:go_default_library",
"//pkg/kubectl/cmd/logs:go_default_library", "//pkg/kubectl/cmd/logs:go_default_library",
"//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util:go_default_library",
"//pkg/kubectl/generate:go_default_library",
"//pkg/kubectl/generate/versioned:go_default_library",
"//pkg/kubectl/polymorphichelpers:go_default_library", "//pkg/kubectl/polymorphichelpers:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/i18n:go_default_library",

View File

@ -44,6 +44,8 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/exec" "k8s.io/kubernetes/pkg/kubectl/cmd/exec"
"k8s.io/kubernetes/pkg/kubectl/cmd/logs" "k8s.io/kubernetes/pkg/kubectl/cmd/logs"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/generate"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/polymorphichelpers" "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
@ -309,20 +311,20 @@ func (o *RunOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e
generatorName := o.Generator generatorName := o.Generator
if len(o.Schedule) != 0 && len(generatorName) == 0 { if len(o.Schedule) != 0 && len(generatorName) == 0 {
generatorName = cmdutil.CronJobV1Beta1GeneratorName generatorName = generateversioned.CronJobV1Beta1GeneratorName
} }
if len(generatorName) == 0 { if len(generatorName) == 0 {
switch restartPolicy { switch restartPolicy {
case corev1.RestartPolicyAlways: case corev1.RestartPolicyAlways:
generatorName = cmdutil.DeploymentAppsV1Beta1GeneratorName generatorName = generateversioned.DeploymentAppsV1Beta1GeneratorName
case corev1.RestartPolicyOnFailure: case corev1.RestartPolicyOnFailure:
generatorName = cmdutil.JobV1GeneratorName generatorName = generateversioned.JobV1GeneratorName
case corev1.RestartPolicyNever: case corev1.RestartPolicyNever:
generatorName = cmdutil.RunPodV1GeneratorName generatorName = generateversioned.RunPodV1GeneratorName
} }
// Falling back because the generator was not provided and the default one could be unavailable. // Falling back because the generator was not provided and the default one could be unavailable.
generatorNameTemp, err := cmdutil.FallbackGeneratorNameIfNecessary(generatorName, clientset.Discovery(), o.ErrOut) generatorNameTemp, err := generateversioned.FallbackGeneratorNameIfNecessary(generatorName, clientset.Discovery(), o.ErrOut)
if err != nil { if err != nil {
return err return err
} }
@ -336,17 +338,17 @@ func (o *RunOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e
// start deprecating all generators except for 'run-pod/v1' which will be // start deprecating all generators except for 'run-pod/v1' which will be
// the only supported on a route to simple kubectl run which should mimic // the only supported on a route to simple kubectl run which should mimic
// docker run // docker run
if generatorName != cmdutil.RunPodV1GeneratorName { if generatorName != generateversioned.RunPodV1GeneratorName {
fmt.Fprintf(o.ErrOut, "kubectl run --generator=%s is DEPRECATED and will be removed in a future version. Use kubectl create instead.\n", generatorName) fmt.Fprintf(o.ErrOut, "kubectl run --generator=%s is DEPRECATED and will be removed in a future version. Use kubectl create instead.\n", generatorName)
} }
generators := cmdutil.GeneratorFn("run") generators := generateversioned.GeneratorFn("run")
generator, found := generators[generatorName] generator, found := generators[generatorName]
if !found { if !found {
return cmdutil.UsageErrorf(cmd, "generator %q not found", generatorName) return cmdutil.UsageErrorf(cmd, "generator %q not found", generatorName)
} }
names := generator.ParamNames() names := generator.ParamNames()
params := kubectl.MakeParams(cmd, names) params := generate.MakeParams(cmd, names)
params["name"] = args[0] params["name"] = args[0]
if len(args) > 1 { if len(args) > 1 {
params["args"] = args[1:] params["args"] = args[1:]
@ -592,7 +594,7 @@ func verifyImagePullPolicy(cmd *cobra.Command) error {
} }
func (o *RunOptions) generateService(f cmdutil.Factory, cmd *cobra.Command, serviceGenerator string, paramsIn map[string]interface{}, namespace string) (*RunObject, error) { func (o *RunOptions) generateService(f cmdutil.Factory, cmd *cobra.Command, serviceGenerator string, paramsIn map[string]interface{}, namespace string) (*RunObject, error) {
generators := cmdutil.GeneratorFn("expose") generators := generateversioned.GeneratorFn("expose")
generator, found := generators[serviceGenerator] generator, found := generators[serviceGenerator]
if !found { if !found {
return nil, fmt.Errorf("missing service generator: %s", serviceGenerator) return nil, fmt.Errorf("missing service generator: %s", serviceGenerator)
@ -637,8 +639,8 @@ func (o *RunOptions) generateService(f cmdutil.Factory, cmd *cobra.Command, serv
return runObject, nil return runObject, nil
} }
func (o *RunOptions) createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command, generator kubectl.Generator, names []kubectl.GeneratorParam, params map[string]interface{}, overrides, namespace string) (*RunObject, error) { func (o *RunOptions) createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command, generator generate.Generator, names []generate.GeneratorParam, params map[string]interface{}, overrides, namespace string) (*RunObject, error) {
err := kubectl.ValidateParams(names, params) err := generate.ValidateParams(names, params)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -19,9 +19,9 @@ go_library(
importpath = "k8s.io/kubernetes/pkg/kubectl/cmd/set", importpath = "k8s.io/kubernetes/pkg/kubectl/cmd/set",
visibility = ["//build/visible_to:pkg_kubectl_cmd_set_CONSUMERS"], visibility = ["//build/visible_to:pkg_kubectl_cmd_set_CONSUMERS"],
deps = [ deps = [
"//pkg/kubectl:go_default_library",
"//pkg/kubectl/cmd/set/env:go_default_library", "//pkg/kubectl/cmd/set/env:go_default_library",
"//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util:go_default_library",
"//pkg/kubectl/generate/versioned:go_default_library",
"//pkg/kubectl/polymorphichelpers:go_default_library", "//pkg/kubectl/polymorphichelpers:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/i18n:go_default_library",

View File

@ -29,8 +29,8 @@ import (
"k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/cli-runtime/pkg/genericclioptions/printers" "k8s.io/cli-runtime/pkg/genericclioptions/printers"
"k8s.io/cli-runtime/pkg/genericclioptions/resource" "k8s.io/cli-runtime/pkg/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
generateversioned "k8s.io/kubernetes/pkg/kubectl/generate/versioned"
"k8s.io/kubernetes/pkg/kubectl/polymorphichelpers" "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
@ -206,7 +206,7 @@ func (o *SetResourcesOptions) Validate() error {
return fmt.Errorf("you must specify an update to requests or limits (in the form of --requests/--limits)") return fmt.Errorf("you must specify an update to requests or limits (in the form of --requests/--limits)")
} }
o.ResourceRequirements, err = kubectl.HandleResourceRequirementsV1(map[string]string{"limits": o.Limits, "requests": o.Requests}) o.ResourceRequirements, err = generateversioned.HandleResourceRequirementsV1(map[string]string{"limits": o.Limits, "requests": o.Requests})
if err != nil { if err != nil {
return err return err
} }

View File

@ -7,7 +7,6 @@ go_library(
"crdfinder.go", "crdfinder.go",
"factory.go", "factory.go",
"factory_client_access.go", "factory_client_access.go",
"generator.go",
"helpers.go", "helpers.go",
"kubectl_match_version.go", "kubectl_match_version.go",
"printing.go", "printing.go",
@ -16,22 +15,12 @@ go_library(
visibility = ["//build/visible_to:pkg_kubectl_cmd_util_CONSUMERS"], visibility = ["//build/visible_to:pkg_kubectl_cmd_util_CONSUMERS"],
deps = [ deps = [
"//pkg/api/legacyscheme:go_default_library", "//pkg/api/legacyscheme:go_default_library",
"//pkg/client/clientset_generated/internalclientset:go_default_library",
"//pkg/kubectl:go_default_library",
"//pkg/kubectl/cmd/util/openapi:go_default_library", "//pkg/kubectl/cmd/util/openapi:go_default_library",
"//pkg/kubectl/cmd/util/openapi/validation:go_default_library", "//pkg/kubectl/cmd/util/openapi/validation:go_default_library",
"//pkg/kubectl/util/templates:go_default_library", "//pkg/kubectl/util/templates:go_default_library",
"//pkg/kubectl/validation:go_default_library", "//pkg/kubectl/validation:go_default_library",
"//pkg/printers:go_default_library",
"//pkg/printers/internalversion:go_default_library",
"//pkg/version:go_default_library", "//pkg/version:go_default_library",
"//staging/src/k8s.io/api/apps/v1:go_default_library",
"//staging/src/k8s.io/api/apps/v1beta1:go_default_library",
"//staging/src/k8s.io/api/batch/v1:go_default_library",
"//staging/src/k8s.io/api/batch/v1beta1:go_default_library",
"//staging/src/k8s.io/api/batch/v2alpha1:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/api/extensions/v1beta1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
@ -73,6 +62,7 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
"//vendor/k8s.io/utils/exec:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library",
], ],

View File

@ -44,9 +44,6 @@ import (
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
"k8s.io/client-go/scale" "k8s.io/client-go/scale"
"k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/tools/clientcmd"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/printers"
printersinternal "k8s.io/kubernetes/pkg/printers/internalversion"
utilexec "k8s.io/utils/exec" utilexec "k8s.io/utils/exec"
) )
@ -619,53 +616,6 @@ func ShouldIncludeUninitialized(cmd *cobra.Command, includeUninitialized bool) b
return shouldIncludeUninitialized return shouldIncludeUninitialized
} }
// DescriberFunc gives a way to display the specified RESTMapping type
type DescriberFunc func(restClientGetter genericclioptions.RESTClientGetter, mapping *meta.RESTMapping) (printers.Describer, error)
// DescriberFn gives a way to easily override the function for unit testing if needed
var DescriberFn DescriberFunc = describer
// Returns a Describer for displaying the specified RESTMapping type or an error.
func describer(restClientGetter genericclioptions.RESTClientGetter, mapping *meta.RESTMapping) (printers.Describer, error) {
clientConfig, err := restClientGetter.ToRESTConfig()
if err != nil {
return nil, err
}
// try to get a describer
if describer, ok := printersinternal.DescriberFor(mapping.GroupVersionKind.GroupKind(), clientConfig); ok {
return describer, nil
}
// if this is a kind we don't have a describer for yet, go generic if possible
if genericDescriber, genericErr := genericDescriber(restClientGetter, mapping); genericErr == nil {
return genericDescriber, nil
}
// otherwise return an unregistered error
return nil, fmt.Errorf("no description has been implemented for %s", mapping.GroupVersionKind.String())
}
// helper function to make a generic describer, or return an error
func genericDescriber(restClientGetter genericclioptions.RESTClientGetter, mapping *meta.RESTMapping) (printers.Describer, error) {
clientConfig, err := restClientGetter.ToRESTConfig()
if err != nil {
return nil, err
}
// used to fetch the resource
dynamicClient, err := dynamic.NewForConfig(clientConfig)
if err != nil {
return nil, err
}
// used to get events for the resource
clientSet, err := internalclientset.NewForConfig(clientConfig)
if err != nil {
return nil, err
}
eventsClient := clientSet.Core()
return printersinternal.GenericDescriberFor(mapping, dynamicClient, eventsClient), nil
}
// ScaleClientFunc provides a ScalesGetter // ScaleClientFunc provides a ScalesGetter
type ScaleClientFunc func(genericclioptions.RESTClientGetter) (scale.ScalesGetter, error) type ScaleClientFunc func(genericclioptions.RESTClientGetter) (scale.ScalesGetter, error)
@ -697,3 +647,12 @@ func scaleClient(restClientGetter genericclioptions.RESTClientGetter) (scale.Sca
return scale.New(restClient, mapper, dynamic.LegacyAPIPathResolverFunc, resolver), nil return scale.New(restClient, mapper, dynamic.LegacyAPIPathResolverFunc, resolver), nil
} }
func Warning(cmdErr io.Writer, newGeneratorName, oldGeneratorName string) {
fmt.Fprintf(cmdErr, "WARNING: New generator %q specified, "+
"but it isn't available. "+
"Falling back to %q.\n",
newGeneratorName,
oldGeneratorName,
)
}

View File

@ -31,14 +31,13 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/diff"
"k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/validation/field"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/utils/exec" "k8s.io/utils/exec"
) )
func TestMerge(t *testing.T) { func TestMerge(t *testing.T) {
grace := int64(30)
enableServiceLinks := corev1.DefaultEnableServiceLinks
tests := []struct { tests := []struct {
obj runtime.Object obj runtime.Object
fragment string fragment string
@ -60,14 +59,7 @@ func TestMerge(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "foo", Name: "foo",
}, },
Spec: corev1.PodSpec{ Spec: corev1.PodSpec{},
RestartPolicy: corev1.RestartPolicyAlways,
DNSPolicy: corev1.DNSClusterFirst,
TerminationGracePeriodSeconds: &grace,
SecurityContext: &corev1.PodSecurityContext{},
SchedulerName: corev1.DefaultSchedulerName,
EnableServiceLinks: &enableServiceLinks,
},
}, },
}, },
/* TODO: uncomment this test once Merge is updated to use /* TODO: uncomment this test once Merge is updated to use
@ -128,19 +120,11 @@ func TestMerge(t *testing.T) {
Volumes: []corev1.Volume{ Volumes: []corev1.Volume{
{ {
Name: "v1", Name: "v1",
VolumeSource: corev1.VolumeSource{EmptyDir: &corev1.EmptyDirVolumeSource{}},
}, },
{ {
Name: "v2", Name: "v2",
VolumeSource: corev1.VolumeSource{EmptyDir: &corev1.EmptyDirVolumeSource{}},
}, },
}, },
RestartPolicy: corev1.RestartPolicyAlways,
DNSPolicy: corev1.DNSClusterFirst,
TerminationGracePeriodSeconds: &grace,
SecurityContext: &corev1.PodSecurityContext{},
SchedulerName: corev1.DefaultSchedulerName,
EnableServiceLinks: &enableServiceLinks,
}, },
}, },
}, },
@ -166,11 +150,8 @@ func TestMerge(t *testing.T) {
APIVersion: "v1", APIVersion: "v1",
}, },
Spec: corev1.ServiceSpec{ Spec: corev1.ServiceSpec{
SessionAffinity: "None",
Type: corev1.ServiceTypeClusterIP,
Ports: []corev1.ServicePort{ Ports: []corev1.ServicePort{
{ {
Protocol: corev1.ProtocolTCP,
Port: 0, Port: 0,
}, },
}, },
@ -192,8 +173,6 @@ func TestMerge(t *testing.T) {
APIVersion: "v1", APIVersion: "v1",
}, },
Spec: corev1.ServiceSpec{ Spec: corev1.ServiceSpec{
SessionAffinity: "None",
Type: corev1.ServiceTypeClusterIP,
Selector: map[string]string{ Selector: map[string]string{
"version": "v2", "version": "v2",
}, },
@ -210,7 +189,7 @@ func TestMerge(t *testing.T) {
if err != nil { if err != nil {
t.Errorf("testcase[%d], unexpected error: %v", i, err) t.Errorf("testcase[%d], unexpected error: %v", i, err)
} else if !apiequality.Semantic.DeepEqual(test.expected, out) { } else if !apiequality.Semantic.DeepEqual(test.expected, out) {
t.Errorf("\n\ntestcase[%d]\nexpected:\n%+v\nsaw:\n%+v", i, test.expected, out) t.Errorf("\n\ntestcase[%d]\nexpected:\n%s", i, diff.ObjectReflectDiff(test.expected, out))
} }
} }
if test.expectErr && err == nil { if test.expectErr && err == nil {

View File

@ -0,0 +1,30 @@
load("@io_bazel_rules_go//go:def.bzl", "go_library")
go_library(
name = "go_default_library",
srcs = ["describe.go"],
importpath = "k8s.io/kubernetes/pkg/kubectl/describe",
visibility = ["//visibility:public"],
deps = [
"//pkg/printers:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library",
"//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//pkg/kubectl/describe/versioned:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@ -0,0 +1,26 @@
/*
Copyright 2018 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 describe
import (
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/kubernetes/pkg/printers"
)
// DescriberFunc gives a way to display the specified RESTMapping type
type DescriberFunc func(restClientGetter genericclioptions.RESTClientGetter, mapping *meta.RESTMapping) (printers.Describer, error)

View File

@ -0,0 +1,31 @@
load("@io_bazel_rules_go//go:def.bzl", "go_library")
go_library(
name = "go_default_library",
srcs = ["describe.go"],
importpath = "k8s.io/kubernetes/pkg/kubectl/describe/versioned",
visibility = ["//visibility:public"],
deps = [
"//pkg/client/clientset_generated/internalclientset:go_default_library",
"//pkg/kubectl/describe:go_default_library",
"//pkg/printers:go_default_library",
"//pkg/printers/internalversion:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library",
"//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library",
"//staging/src/k8s.io/client-go/dynamic:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@ -0,0 +1,73 @@
/*
Copyright 2018 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 versioned
import (
"fmt"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/client-go/dynamic"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/kubectl/describe"
"k8s.io/kubernetes/pkg/printers"
printersinternal "k8s.io/kubernetes/pkg/printers/internalversion"
)
// DescriberFn gives a way to easily override the function for unit testing if needed
var DescriberFn describe.DescriberFunc = Describer
// Describer returns a Describer for displaying the specified RESTMapping type or an error.
func Describer(restClientGetter genericclioptions.RESTClientGetter, mapping *meta.RESTMapping) (printers.Describer, error) {
clientConfig, err := restClientGetter.ToRESTConfig()
if err != nil {
return nil, err
}
// try to get a describer
if describer, ok := printersinternal.DescriberFor(mapping.GroupVersionKind.GroupKind(), clientConfig); ok {
return describer, nil
}
// if this is a kind we don't have a describer for yet, go generic if possible
if genericDescriber, genericErr := genericDescriber(restClientGetter, mapping); genericErr == nil {
return genericDescriber, nil
}
// otherwise return an unregistered error
return nil, fmt.Errorf("no description has been implemented for %s", mapping.GroupVersionKind.String())
}
// helper function to make a generic describer, or return an error
func genericDescriber(restClientGetter genericclioptions.RESTClientGetter, mapping *meta.RESTMapping) (printers.Describer, error) {
clientConfig, err := restClientGetter.ToRESTConfig()
if err != nil {
return nil, err
}
// used to fetch the resource
dynamicClient, err := dynamic.NewForConfig(clientConfig)
if err != nil {
return nil, err
}
// used to get events for the resource
clientSet, err := internalclientset.NewForConfig(clientConfig)
if err != nil {
return nil, err
}
eventsClient := clientSet.Core()
return printersinternal.GenericDescriberFor(mapping, dynamicClient, eventsClient), nil
}

View File

@ -0,0 +1,38 @@
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
go_library(
name = "go_default_library",
srcs = ["generate.go"],
importpath = "k8s.io/kubernetes/pkg/kubectl/generate",
visibility = ["//visibility:public"],
deps = [
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library",
"//vendor/github.com/spf13/pflag:go_default_library",
],
)
go_test(
name = "go_default_test",
srcs = ["generate_test.go"],
embed = [":go_default_library"],
deps = ["//vendor/github.com/spf13/cobra:go_default_library"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//pkg/kubectl/generate/versioned:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@ -1,5 +1,5 @@
/* /*
Copyright 2014 The Kubernetes Authors. Copyright 2018 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package generate
import ( import (
"fmt" "fmt"
@ -24,10 +24,14 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/spf13/pflag" "github.com/spf13/pflag"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
utilerrors "k8s.io/apimachinery/pkg/util/errors" utilerrors "k8s.io/apimachinery/pkg/util/errors"
) )
// GeneratorFunc returns the generators for the provided command
type GeneratorFunc func(cmdName string) map[string]Generator
// GeneratorParam is a parameter for a generator // GeneratorParam is a parameter for a generator
// TODO: facilitate structured json generator input schemes // TODO: facilitate structured json generator input schemes
type GeneratorParam struct { type GeneratorParam struct {
@ -98,7 +102,7 @@ func AnnotateFlags(cmd *cobra.Command, generators map[string]Generator) {
} }
} }
// EnsureFlagsValid ensures that no invalid flags are being used against a generator. // EnsureFlagsValid ensures that no invalid flags are being used against a
func EnsureFlagsValid(cmd *cobra.Command, generators map[string]Generator, generatorInUse string) error { func EnsureFlagsValid(cmd *cobra.Command, generators map[string]Generator, generatorInUse string) error {
AnnotateFlags(cmd, generators) AnnotateFlags(cmd, generators)

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package generate
import ( import (
"reflect" "reflect"

View File

@ -0,0 +1,111 @@
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
go_library(
name = "go_default_library",
srcs = [
"autoscale.go",
"clusterrolebinding.go",
"configmap.go",
"deployment.go",
"env_file.go",
"generator.go",
"namespace.go",
"pdb.go",
"priorityclass.go",
"quota.go",
"rolebinding.go",
"run.go",
"secret.go",
"secret_for_docker_registry.go",
"secret_for_tls.go",
"service.go",
"service_basic.go",
"serviceaccount.go",
],
importpath = "k8s.io/kubernetes/pkg/kubectl/generate/versioned",
visibility = ["//visibility:public"],
deps = [
"//pkg/kubectl/generate:go_default_library",
"//pkg/kubectl/util:go_default_library",
"//pkg/kubectl/util/hash:go_default_library",
"//staging/src/k8s.io/api/apps/v1:go_default_library",
"//staging/src/k8s.io/api/apps/v1beta1:go_default_library",
"//staging/src/k8s.io/api/autoscaling/v1:go_default_library",
"//staging/src/k8s.io/api/batch/v1:go_default_library",
"//staging/src/k8s.io/api/batch/v1beta1:go_default_library",
"//staging/src/k8s.io/api/batch/v2alpha1:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/api/extensions/v1beta1:go_default_library",
"//staging/src/k8s.io/api/policy/v1beta1:go_default_library",
"//staging/src/k8s.io/api/rbac/v1:go_default_library",
"//staging/src/k8s.io/api/rbac/v1beta1:go_default_library",
"//staging/src/k8s.io/api/scheduling/v1beta1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library",
"//staging/src/k8s.io/client-go/discovery:go_default_library",
],
)
go_test(
name = "go_default_test",
srcs = [
"autoscale_test.go",
"clusterrolebinding_test.go",
"configmap_test.go",
"deployment_test.go",
"env_file_test.go",
"namespace_test.go",
"pdb_test.go",
"priorityclass_test.go",
"quota_test.go",
"rolebinding_test.go",
"run_test.go",
"secret_for_docker_registry_test.go",
"secret_for_tls_test.go",
"secret_test.go",
"service_basic_test.go",
"service_test.go",
"serviceaccount_test.go",
],
embed = [":go_default_library"],
deps = [
"//pkg/kubectl/generate:go_default_library",
"//staging/src/k8s.io/api/apps/v1:go_default_library",
"//staging/src/k8s.io/api/apps/v1beta1:go_default_library",
"//staging/src/k8s.io/api/autoscaling/v1:go_default_library",
"//staging/src/k8s.io/api/batch/v1:go_default_library",
"//staging/src/k8s.io/api/batch/v1beta1:go_default_library",
"//staging/src/k8s.io/api/batch/v2alpha1:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/api/extensions/v1beta1:go_default_library",
"//staging/src/k8s.io/api/policy/v1beta1:go_default_library",
"//staging/src/k8s.io/api/rbac/v1:go_default_library",
"//staging/src/k8s.io/api/rbac/v1beta1:go_default_library",
"//staging/src/k8s.io/api/scheduling/v1beta1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
"//staging/src/k8s.io/client-go/util/testing:go_default_library",
"//vendor/k8s.io/utils/pointer:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"
@ -22,6 +22,7 @@ import (
autoscalingv1 "k8s.io/api/autoscaling/v1" autoscalingv1 "k8s.io/api/autoscaling/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/kubernetes/pkg/kubectl/generate"
) )
// HorizontalPodAutoscalerV1Generator supports stable generation of a horizontal pod autoscaler. // HorizontalPodAutoscalerV1Generator supports stable generation of a horizontal pod autoscaler.
@ -36,7 +37,7 @@ type HorizontalPodAutoscalerGeneratorV1 struct {
} }
// Ensure it supports the generator pattern that uses parameters specified during construction. // Ensure it supports the generator pattern that uses parameters specified during construction.
var _ StructuredGenerator = &HorizontalPodAutoscalerGeneratorV1{} var _ generate.StructuredGenerator = &HorizontalPodAutoscalerGeneratorV1{}
// StructuredGenerate outputs a horizontal pod autoscaler object using the configured fields. // StructuredGenerate outputs a horizontal pod autoscaler object using the configured fields.
func (s *HorizontalPodAutoscalerGeneratorV1) StructuredGenerate() (runtime.Object, error) { func (s *HorizontalPodAutoscalerGeneratorV1) StructuredGenerate() (runtime.Object, error) {

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"reflect" "reflect"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"
@ -24,6 +24,7 @@ import (
rbacv1beta1 "k8s.io/api/rbac/v1beta1" rbacv1beta1 "k8s.io/api/rbac/v1beta1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
"k8s.io/kubernetes/pkg/kubectl/generate"
) )
// ClusterRoleBindingGeneratorV1 supports stable generation of a clusterRoleBinding. // ClusterRoleBindingGeneratorV1 supports stable generation of a clusterRoleBinding.
@ -41,14 +42,14 @@ type ClusterRoleBindingGeneratorV1 struct {
} }
// Ensure it supports the generator pattern that uses parameter injection. // Ensure it supports the generator pattern that uses parameter injection.
var _ Generator = &ClusterRoleBindingGeneratorV1{} var _ generate.Generator = &ClusterRoleBindingGeneratorV1{}
// Ensure it supports the generator pattern that uses parameters specified during construction. // Ensure it supports the generator pattern that uses parameters specified during construction.
var _ StructuredGenerator = &ClusterRoleBindingGeneratorV1{} var _ generate.StructuredGenerator = &ClusterRoleBindingGeneratorV1{}
// Generate returns a clusterRoleBinding using the specified parameters. // Generate returns a clusterRoleBinding using the specified parameters.
func (s ClusterRoleBindingGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) { func (s ClusterRoleBindingGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) {
err := ValidateParams(s.ParamNames(), genericParams) err := generate.ValidateParams(s.ParamNames(), genericParams)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -94,13 +95,13 @@ func (s ClusterRoleBindingGeneratorV1) Generate(genericParams map[string]interfa
} }
// ParamNames returns the set of supported input parameters when using the parameter injection generator pattern. // ParamNames returns the set of supported input parameters when using the parameter injection generator pattern.
func (s ClusterRoleBindingGeneratorV1) ParamNames() []GeneratorParam { func (s ClusterRoleBindingGeneratorV1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
{"clusterrole", false}, {Name: "clusterrole", Required: false},
{"user", false}, {Name: "user", Required: false},
{"group", false}, {Name: "group", Required: false},
{"serviceaccount", false}, {Name: "serviceaccount", Required: false},
} }
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"reflect" "reflect"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"
@ -27,6 +27,7 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation"
"k8s.io/kubernetes/pkg/kubectl/generate"
"k8s.io/kubernetes/pkg/kubectl/util" "k8s.io/kubernetes/pkg/kubectl/util"
"k8s.io/kubernetes/pkg/kubectl/util/hash" "k8s.io/kubernetes/pkg/kubectl/util/hash"
) )
@ -48,14 +49,14 @@ type ConfigMapGeneratorV1 struct {
} }
// Ensure it supports the generator pattern that uses parameter injection. // Ensure it supports the generator pattern that uses parameter injection.
var _ Generator = &ConfigMapGeneratorV1{} var _ generate.Generator = &ConfigMapGeneratorV1{}
// Ensure it supports the generator pattern that uses parameters specified during construction. // Ensure it supports the generator pattern that uses parameters specified during construction.
var _ StructuredGenerator = &ConfigMapGeneratorV1{} var _ generate.StructuredGenerator = &ConfigMapGeneratorV1{}
// Generate returns a configMap using the specified parameters. // Generate returns a configMap using the specified parameters.
func (s ConfigMapGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) { func (s ConfigMapGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) {
err := ValidateParams(s.ParamNames(), genericParams) err := generate.ValidateParams(s.ParamNames(), genericParams)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -111,15 +112,15 @@ func (s ConfigMapGeneratorV1) Generate(genericParams map[string]interface{}) (ru
} }
// ParamNames returns the set of supported input parameters when using the parameter injection generator pattern. // ParamNames returns the set of supported input parameters when using the parameter injection generator pattern.
func (s ConfigMapGeneratorV1) ParamNames() []GeneratorParam { func (s ConfigMapGeneratorV1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
{"type", false}, {Name: "type", Required: false},
{"from-file", false}, {Name: "from-file", Required: false},
{"from-literal", false}, {Name: "from-literal", Required: false},
{"from-env-file", false}, {Name: "from-env-file", Required: false},
{"force", false}, {Name: "force", Required: false},
{"hash", false}, {Name: "hash", Required: false},
} }
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"io/ioutil" "io/ioutil"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"
@ -26,6 +26,7 @@ import (
extensionsv1beta1 "k8s.io/api/extensions/v1beta1" extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/kubernetes/pkg/kubectl/generate"
) )
// BaseDeploymentGenerator: implement the common functionality of // BaseDeploymentGenerator: implement the common functionality of
@ -94,7 +95,7 @@ type DeploymentBasicGeneratorV1 struct {
} }
// Ensure it supports the generator pattern that uses parameters specified during construction // Ensure it supports the generator pattern that uses parameters specified during construction
var _ StructuredGenerator = &DeploymentBasicGeneratorV1{} var _ generate.StructuredGenerator = &DeploymentBasicGeneratorV1{}
// StructuredGenerate outputs a deployment object using the configured fields // StructuredGenerate outputs a deployment object using the configured fields
func (s *DeploymentBasicGeneratorV1) StructuredGenerate() (runtime.Object, error) { func (s *DeploymentBasicGeneratorV1) StructuredGenerate() (runtime.Object, error) {
@ -124,7 +125,7 @@ type DeploymentBasicAppsGeneratorV1Beta1 struct {
} }
// Ensure it supports the generator pattern that uses parameters specified during construction // Ensure it supports the generator pattern that uses parameters specified during construction
var _ StructuredGenerator = &DeploymentBasicAppsGeneratorV1Beta1{} var _ generate.StructuredGenerator = &DeploymentBasicAppsGeneratorV1Beta1{}
// StructuredGenerate outputs a deployment object using the configured fields // StructuredGenerate outputs a deployment object using the configured fields
func (s *DeploymentBasicAppsGeneratorV1Beta1) StructuredGenerate() (runtime.Object, error) { func (s *DeploymentBasicAppsGeneratorV1Beta1) StructuredGenerate() (runtime.Object, error) {
@ -154,7 +155,7 @@ type DeploymentBasicAppsGeneratorV1 struct {
} }
// Ensure it supports the generator pattern that uses parameters specified during construction // Ensure it supports the generator pattern that uses parameters specified during construction
var _ StructuredGenerator = &DeploymentBasicAppsGeneratorV1{} var _ generate.StructuredGenerator = &DeploymentBasicAppsGeneratorV1{}
// StructuredGenerate outputs a deployment object using the configured fields // StructuredGenerate outputs a deployment object using the configured fields
func (s *DeploymentBasicAppsGeneratorV1) StructuredGenerate() (runtime.Object, error) { func (s *DeploymentBasicAppsGeneratorV1) StructuredGenerate() (runtime.Object, error) {

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"reflect" "reflect"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"bufio" "bufio"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"os" "os"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package util package versioned
import ( import (
"fmt" "fmt"
@ -29,9 +29,12 @@ import (
apierrors "k8s.io/apimachinery/pkg/api/errors" apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/discovery" "k8s.io/client-go/discovery"
"k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/generate"
) )
// GeneratorFn gives a way to easily override the function for unit testing if needed
var GeneratorFn generate.GeneratorFunc = DefaultGenerators
const ( const (
// TODO(sig-cli): Enforce consistent naming for generators here. // TODO(sig-cli): Enforce consistent naming for generators here.
// See discussion in https://github.com/kubernetes/kubernetes/issues/46237 // See discussion in https://github.com/kubernetes/kubernetes/issues/46237
@ -67,70 +70,64 @@ const (
PriorityClassV1Alpha1GeneratorName = "priorityclass/v1alpha1" PriorityClassV1Alpha1GeneratorName = "priorityclass/v1alpha1"
) )
// GeneratorFunc returns the generators for the provided command // DefaultGenerators returns the set of default generators for use in Factory instances
type GeneratorFunc func(cmdName string) map[string]kubectl.Generator func DefaultGenerators(cmdName string) map[string]generate.Generator {
var generator map[string]generate.Generator
// GeneratorFn gives a way to easily override the function for unit testing if needed
var GeneratorFn GeneratorFunc = defaultGenerators
// defaultGenerators returns the set of default generators for use in Factory instances
func defaultGenerators(cmdName string) map[string]kubectl.Generator {
var generator map[string]kubectl.Generator
switch cmdName { switch cmdName {
case "expose": case "expose":
generator = map[string]kubectl.Generator{ generator = map[string]generate.Generator{
ServiceV1GeneratorName: kubectl.ServiceGeneratorV1{}, ServiceV1GeneratorName: ServiceGeneratorV1{},
ServiceV2GeneratorName: kubectl.ServiceGeneratorV2{}, ServiceV2GeneratorName: ServiceGeneratorV2{},
} }
case "service-clusterip": case "service-clusterip":
generator = map[string]kubectl.Generator{ generator = map[string]generate.Generator{
ServiceClusterIPGeneratorV1Name: kubectl.ServiceClusterIPGeneratorV1{}, ServiceClusterIPGeneratorV1Name: ServiceClusterIPGeneratorV1{},
} }
case "service-nodeport": case "service-nodeport":
generator = map[string]kubectl.Generator{ generator = map[string]generate.Generator{
ServiceNodePortGeneratorV1Name: kubectl.ServiceNodePortGeneratorV1{}, ServiceNodePortGeneratorV1Name: ServiceNodePortGeneratorV1{},
} }
case "service-loadbalancer": case "service-loadbalancer":
generator = map[string]kubectl.Generator{ generator = map[string]generate.Generator{
ServiceLoadBalancerGeneratorV1Name: kubectl.ServiceLoadBalancerGeneratorV1{}, ServiceLoadBalancerGeneratorV1Name: ServiceLoadBalancerGeneratorV1{},
} }
case "deployment": case "deployment":
// Create Deployment has only StructuredGenerators and no // Create Deployment has only StructuredGenerators and no
// param-based Generators. // param-based Generators.
// The StructuredGenerators are as follows (as of 2018-03-16): // The StructuredGenerators are as follows (as of 2018-03-16):
// DeploymentBasicV1Beta1GeneratorName -> kubectl.DeploymentBasicGeneratorV1 // DeploymentBasicV1Beta1GeneratorName -> DeploymentBasicGeneratorV1
// DeploymentBasicAppsV1Beta1GeneratorName -> kubectl.DeploymentBasicAppsGeneratorV1Beta1 // DeploymentBasicAppsV1Beta1GeneratorName -> DeploymentBasicAppsGeneratorV1Beta1
// DeploymentBasicAppsV1GeneratorName -> kubectl.DeploymentBasicAppsGeneratorV1 // DeploymentBasicAppsV1GeneratorName -> DeploymentBasicAppsGeneratorV1
generator = map[string]kubectl.Generator{} generator = map[string]generate.Generator{}
case "run": case "run":
generator = map[string]kubectl.Generator{ generator = map[string]generate.Generator{
RunV1GeneratorName: kubectl.BasicReplicationController{}, RunV1GeneratorName: BasicReplicationController{},
RunPodV1GeneratorName: kubectl.BasicPod{}, RunPodV1GeneratorName: BasicPod{},
DeploymentV1Beta1GeneratorName: kubectl.DeploymentV1Beta1{}, DeploymentV1Beta1GeneratorName: DeploymentV1Beta1{},
DeploymentAppsV1Beta1GeneratorName: kubectl.DeploymentAppsV1Beta1{}, DeploymentAppsV1Beta1GeneratorName: DeploymentAppsV1Beta1{},
JobV1GeneratorName: kubectl.JobV1{}, JobV1GeneratorName: JobV1{},
CronJobV2Alpha1GeneratorName: kubectl.CronJobV2Alpha1{}, CronJobV2Alpha1GeneratorName: CronJobV2Alpha1{},
CronJobV1Beta1GeneratorName: kubectl.CronJobV1Beta1{}, CronJobV1Beta1GeneratorName: CronJobV1Beta1{},
} }
case "namespace": case "namespace":
generator = map[string]kubectl.Generator{ generator = map[string]generate.Generator{
NamespaceV1GeneratorName: kubectl.NamespaceGeneratorV1{}, NamespaceV1GeneratorName: NamespaceGeneratorV1{},
} }
case "quota": case "quota":
generator = map[string]kubectl.Generator{ generator = map[string]generate.Generator{
ResourceQuotaV1GeneratorName: kubectl.ResourceQuotaGeneratorV1{}, ResourceQuotaV1GeneratorName: ResourceQuotaGeneratorV1{},
} }
case "secret": case "secret":
generator = map[string]kubectl.Generator{ generator = map[string]generate.Generator{
SecretV1GeneratorName: kubectl.SecretGeneratorV1{}, SecretV1GeneratorName: SecretGeneratorV1{},
} }
case "secret-for-docker-registry": case "secret-for-docker-registry":
generator = map[string]kubectl.Generator{ generator = map[string]generate.Generator{
SecretForDockerRegistryV1GeneratorName: kubectl.SecretForDockerRegistryGeneratorV1{}, SecretForDockerRegistryV1GeneratorName: SecretForDockerRegistryGeneratorV1{},
} }
case "secret-for-tls": case "secret-for-tls":
generator = map[string]kubectl.Generator{ generator = map[string]generate.Generator{
SecretForTLSV1GeneratorName: kubectl.SecretForTLSGeneratorV1{}, SecretForTLSV1GeneratorName: SecretForTLSGeneratorV1{},
} }
} }
@ -226,12 +223,3 @@ func HasResource(client discovery.DiscoveryInterface, resource schema.GroupVersi
} }
return false, nil return false, nil
} }
func Warning(cmdErr io.Writer, newGeneratorName, oldGeneratorName string) {
fmt.Fprintf(cmdErr, "WARNING: New generator %q specified, "+
"but it isn't available. "+
"Falling back to %q.\n",
newGeneratorName,
oldGeneratorName,
)
}

View File

@ -14,13 +14,14 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/kubernetes/pkg/kubectl/generate"
) )
// NamespaceGeneratorV1 supports stable generation of a namespace // NamespaceGeneratorV1 supports stable generation of a namespace
@ -30,14 +31,14 @@ type NamespaceGeneratorV1 struct {
} }
// Ensure it supports the generator pattern that uses parameter injection // Ensure it supports the generator pattern that uses parameter injection
var _ Generator = &NamespaceGeneratorV1{} var _ generate.Generator = &NamespaceGeneratorV1{}
// Ensure it supports the generator pattern that uses parameters specified during construction // Ensure it supports the generator pattern that uses parameters specified during construction
var _ StructuredGenerator = &NamespaceGeneratorV1{} var _ generate.StructuredGenerator = &NamespaceGeneratorV1{}
// Generate returns a namespace using the specified parameters // Generate returns a namespace using the specified parameters
func (g NamespaceGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) { func (g NamespaceGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) {
err := ValidateParams(g.ParamNames(), genericParams) err := generate.ValidateParams(g.ParamNames(), genericParams)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -54,9 +55,9 @@ func (g NamespaceGeneratorV1) Generate(genericParams map[string]interface{}) (ru
} }
// ParamNames returns the set of supported input parameters when using the parameter injection generator pattern // ParamNames returns the set of supported input parameters when using the parameter injection generator pattern
func (g NamespaceGeneratorV1) ParamNames() []GeneratorParam { func (g NamespaceGeneratorV1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
} }
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"reflect" "reflect"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"
@ -23,6 +23,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/kubernetes/pkg/kubectl/generate"
) )
// PodDisruptionBudgetV1Generator supports stable generation of a pod disruption budget. // PodDisruptionBudgetV1Generator supports stable generation of a pod disruption budget.
@ -33,18 +34,18 @@ type PodDisruptionBudgetV1Generator struct {
} }
// Ensure it supports the generator pattern that uses parameters specified during construction. // Ensure it supports the generator pattern that uses parameters specified during construction.
var _ StructuredGenerator = &PodDisruptionBudgetV1Generator{} var _ generate.StructuredGenerator = &PodDisruptionBudgetV1Generator{}
func (PodDisruptionBudgetV1Generator) ParamNames() []GeneratorParam { func (PodDisruptionBudgetV1Generator) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
{"min-available", false}, {Name: "min-available", Required: false},
{"selector", true}, {Name: "selector", Required: true},
} }
} }
func (s PodDisruptionBudgetV1Generator) Generate(params map[string]interface{}) (runtime.Object, error) { func (s PodDisruptionBudgetV1Generator) Generate(params map[string]interface{}) (runtime.Object, error) {
err := ValidateParams(s.ParamNames(), params) err := generate.ValidateParams(s.ParamNames(), params)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -115,19 +116,19 @@ type PodDisruptionBudgetV2Generator struct {
} }
// Ensure it supports the generator pattern that uses parameters specified during construction. // Ensure it supports the generator pattern that uses parameters specified during construction.
var _ StructuredGenerator = &PodDisruptionBudgetV2Generator{} var _ generate.StructuredGenerator = &PodDisruptionBudgetV2Generator{}
func (PodDisruptionBudgetV2Generator) ParamNames() []GeneratorParam { func (PodDisruptionBudgetV2Generator) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
{"min-available", false}, {Name: "min-available", Required: false},
{"max-unavailable", false}, {Name: "max-unavailable", Required: false},
{"selector", true}, {Name: "selector", Required: true},
} }
} }
func (s PodDisruptionBudgetV2Generator) Generate(params map[string]interface{}) (runtime.Object, error) { func (s PodDisruptionBudgetV2Generator) Generate(params map[string]interface{}) (runtime.Object, error) {
err := ValidateParams(s.ParamNames(), params) err := generate.ValidateParams(s.ParamNames(), params)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"reflect" "reflect"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"
@ -22,6 +22,7 @@ import (
scheduling "k8s.io/api/scheduling/v1beta1" scheduling "k8s.io/api/scheduling/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/kubernetes/pkg/kubectl/generate"
) )
// PriorityClassV1Generator supports stable generation of a priorityClass. // PriorityClassV1Generator supports stable generation of a priorityClass.
@ -33,19 +34,19 @@ type PriorityClassV1Generator struct {
} }
// Ensure it supports the generator pattern that uses parameters specified during construction. // Ensure it supports the generator pattern that uses parameters specified during construction.
var _ StructuredGenerator = &PriorityClassV1Generator{} var _ generate.StructuredGenerator = &PriorityClassV1Generator{}
func (PriorityClassV1Generator) ParamNames() []GeneratorParam { func (PriorityClassV1Generator) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
{"value", true}, {Name: "value", Required: true},
{"global-default", false}, {Name: "global-default", Required: false},
{"description", false}, {Name: "description", Required: false},
} }
} }
func (s PriorityClassV1Generator) Generate(params map[string]interface{}) (runtime.Object, error) { func (s PriorityClassV1Generator) Generate(params map[string]interface{}) (runtime.Object, error) {
if err := ValidateParams(s.ParamNames(), params); err != nil { if err := generate.ValidateParams(s.ParamNames(), params); err != nil {
return nil, err return nil, err
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
scheduling "k8s.io/api/scheduling/v1beta1" scheduling "k8s.io/api/scheduling/v1beta1"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"
@ -22,6 +22,7 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/kubernetes/pkg/kubectl/generate"
) )
// ResourceQuotaGeneratorV1 supports stable generation of a resource quota // ResourceQuotaGeneratorV1 supports stable generation of a resource quota
@ -37,22 +38,22 @@ type ResourceQuotaGeneratorV1 struct {
} }
// ParamNames returns the set of supported input parameters when using the parameter injection generator pattern // ParamNames returns the set of supported input parameters when using the parameter injection generator pattern
func (g ResourceQuotaGeneratorV1) ParamNames() []GeneratorParam { func (g ResourceQuotaGeneratorV1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
{"hard", true}, {Name: "hard", Required: true},
{"scopes", false}, {Name: "scopes", Required: false},
} }
} }
// Ensure it supports the generator pattern that uses parameter injection // Ensure it supports the generator pattern that uses parameter injection
var _ Generator = &ResourceQuotaGeneratorV1{} var _ generate.Generator = &ResourceQuotaGeneratorV1{}
// Ensure it supports the generator pattern that uses parameters specified during construction // Ensure it supports the generator pattern that uses parameters specified during construction
var _ StructuredGenerator = &ResourceQuotaGeneratorV1{} var _ generate.StructuredGenerator = &ResourceQuotaGeneratorV1{}
func (g ResourceQuotaGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) { func (g ResourceQuotaGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) {
err := ValidateParams(g.ParamNames(), genericParams) err := generate.ValidateParams(g.ParamNames(), genericParams)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"reflect" "reflect"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"
@ -24,6 +24,7 @@ import (
rbacv1 "k8s.io/api/rbac/v1" rbacv1 "k8s.io/api/rbac/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
"k8s.io/kubernetes/pkg/kubectl/generate"
) )
// RoleBindingGeneratorV1 supports stable generation of a roleBinding. // RoleBindingGeneratorV1 supports stable generation of a roleBinding.
@ -43,14 +44,14 @@ type RoleBindingGeneratorV1 struct {
} }
// Ensure it supports the generator pattern that uses parameter injection. // Ensure it supports the generator pattern that uses parameter injection.
var _ Generator = &RoleBindingGeneratorV1{} var _ generate.Generator = &RoleBindingGeneratorV1{}
// Ensure it supports the generator pattern that uses parameters specified during construction. // Ensure it supports the generator pattern that uses parameters specified during construction.
var _ StructuredGenerator = &RoleBindingGeneratorV1{} var _ generate.StructuredGenerator = &RoleBindingGeneratorV1{}
// Generate returns a roleBinding using the specified parameters. // Generate returns a roleBinding using the specified parameters.
func (s RoleBindingGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) { func (s RoleBindingGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) {
err := ValidateParams(s.ParamNames(), genericParams) err := generate.ValidateParams(s.ParamNames(), genericParams)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -97,14 +98,14 @@ func (s RoleBindingGeneratorV1) Generate(genericParams map[string]interface{}) (
} }
// ParamNames returns the set of supported input parameters when using the parameter injection generator pattern. // ParamNames returns the set of supported input parameters when using the parameter injection generator pattern.
func (s RoleBindingGeneratorV1) ParamNames() []GeneratorParam { func (s RoleBindingGeneratorV1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
{"clusterrole", false}, {Name: "clusterrole", Required: false},
{"role", false}, {Name: "role", Required: false},
{"user", false}, {Name: "user", Required: false},
{"group", false}, {Name: "group", Required: false},
{"serviceaccount", false}, {Name: "serviceaccount", Required: false},
} }
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"reflect" "reflect"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"
@ -31,28 +31,29 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation"
"k8s.io/kubernetes/pkg/kubectl/generate"
) )
type DeploymentV1Beta1 struct{} type DeploymentV1Beta1 struct{}
func (DeploymentV1Beta1) ParamNames() []GeneratorParam { func (DeploymentV1Beta1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"labels", false}, {Name: "labels", Required: false},
{"default-name", false}, {Name: "default-name", Required: false},
{"name", true}, {Name: "name", Required: true},
{"replicas", true}, {Name: "replicas", Required: true},
{"image", true}, {Name: "image", Required: true},
{"image-pull-policy", false}, {Name: "image-pull-policy", Required: false},
{"port", false}, {Name: "port", Required: false},
{"hostport", false}, {Name: "hostport", Required: false},
{"stdin", false}, {Name: "stdin", Required: false},
{"tty", false}, {Name: "tty", Required: false},
{"command", false}, {Name: "command", Required: false},
{"args", false}, {Name: "args", Required: false},
{"env", false}, {Name: "env", Required: false},
{"requests", false}, {Name: "requests", Required: false},
{"limits", false}, {Name: "limits", Required: false},
{"serviceaccount", false}, {Name: "serviceaccount", Required: false},
} }
} }
@ -123,24 +124,24 @@ func (DeploymentV1Beta1) Generate(genericParams map[string]interface{}) (runtime
type DeploymentAppsV1Beta1 struct{} type DeploymentAppsV1Beta1 struct{}
func (DeploymentAppsV1Beta1) ParamNames() []GeneratorParam { func (DeploymentAppsV1Beta1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"labels", false}, {Name: "labels", Required: false},
{"default-name", false}, {Name: "default-name", Required: false},
{"name", true}, {Name: "name", Required: true},
{"replicas", true}, {Name: "replicas", Required: true},
{"image", true}, {Name: "image", Required: true},
{"image-pull-policy", false}, {Name: "image-pull-policy", Required: false},
{"port", false}, {Name: "port", Required: false},
{"hostport", false}, {Name: "hostport", Required: false},
{"stdin", false}, {Name: "stdin", Required: false},
{"tty", false}, {Name: "tty", Required: false},
{"command", false}, {Name: "command", Required: false},
{"args", false}, {Name: "args", Required: false},
{"env", false}, {Name: "env", Required: false},
{"requests", false}, {Name: "requests", Required: false},
{"limits", false}, {Name: "limits", Required: false},
{"serviceaccount", false}, {Name: "serviceaccount", Required: false},
} }
} }
@ -215,7 +216,7 @@ func getLabels(params map[string]string, name string) (map[string]string, error)
var labels map[string]string var labels map[string]string
var err error var err error
if found && len(labelString) > 0 { if found && len(labelString) > 0 {
labels, err = ParseLabels(labelString) labels, err = generate.ParseLabels(labelString)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -288,25 +289,25 @@ func getEnvs(genericParams map[string]interface{}) ([]v1.EnvVar, error) {
type JobV1 struct{} type JobV1 struct{}
func (JobV1) ParamNames() []GeneratorParam { func (JobV1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"labels", false}, {Name: "labels", Required: false},
{"default-name", false}, {Name: "default-name", Required: false},
{"name", true}, {Name: "name", Required: true},
{"image", true}, {Name: "image", Required: true},
{"image-pull-policy", false}, {Name: "image-pull-policy", Required: false},
{"port", false}, {Name: "port", Required: false},
{"hostport", false}, {Name: "hostport", Required: false},
{"stdin", false}, {Name: "stdin", Required: false},
{"leave-stdin-open", false}, {Name: "leave-stdin-open", Required: false},
{"tty", false}, {Name: "tty", Required: false},
{"command", false}, {Name: "command", Required: false},
{"args", false}, {Name: "args", Required: false},
{"env", false}, {Name: "env", Required: false},
{"requests", false}, {Name: "requests", Required: false},
{"limits", false}, {Name: "limits", Required: false},
{"restart", false}, {Name: "restart", Required: false},
{"serviceaccount", false}, {Name: "serviceaccount", Required: false},
} }
} }
@ -346,7 +347,7 @@ func (JobV1) Generate(genericParams map[string]interface{}) (runtime.Object, err
return nil, err return nil, err
} }
leaveStdinOpen, err := GetBool(params, "leave-stdin-open", false) leaveStdinOpen, err := generate.GetBool(params, "leave-stdin-open", false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -382,26 +383,26 @@ func (JobV1) Generate(genericParams map[string]interface{}) (runtime.Object, err
type CronJobV2Alpha1 struct{} type CronJobV2Alpha1 struct{}
func (CronJobV2Alpha1) ParamNames() []GeneratorParam { func (CronJobV2Alpha1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"labels", false}, {Name: "labels", Required: false},
{"default-name", false}, {Name: "default-name", Required: false},
{"name", true}, {Name: "name", Required: true},
{"image", true}, {Name: "image", Required: true},
{"image-pull-policy", false}, {Name: "image-pull-policy", Required: false},
{"port", false}, {Name: "port", Required: false},
{"hostport", false}, {Name: "hostport", Required: false},
{"stdin", false}, {Name: "stdin", Required: false},
{"leave-stdin-open", false}, {Name: "leave-stdin-open", Required: false},
{"tty", false}, {Name: "tty", Required: false},
{"command", false}, {Name: "command", Required: false},
{"args", false}, {Name: "args", Required: false},
{"env", false}, {Name: "env", Required: false},
{"requests", false}, {Name: "requests", Required: false},
{"limits", false}, {Name: "limits", Required: false},
{"restart", false}, {Name: "restart", Required: false},
{"schedule", true}, {Name: "schedule", Required: true},
{"serviceaccount", false}, {Name: "serviceaccount", Required: false},
} }
} }
@ -441,7 +442,7 @@ func (CronJobV2Alpha1) Generate(genericParams map[string]interface{}) (runtime.O
return nil, err return nil, err
} }
leaveStdinOpen, err := GetBool(params, "leave-stdin-open", false) leaveStdinOpen, err := generate.GetBool(params, "leave-stdin-open", false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -483,26 +484,26 @@ func (CronJobV2Alpha1) Generate(genericParams map[string]interface{}) (runtime.O
type CronJobV1Beta1 struct{} type CronJobV1Beta1 struct{}
func (CronJobV1Beta1) ParamNames() []GeneratorParam { func (CronJobV1Beta1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"labels", false}, {Name: "labels", Required: false},
{"default-name", false}, {Name: "default-name", Required: false},
{"name", true}, {Name: "name", Required: true},
{"image", true}, {Name: "image", Required: true},
{"image-pull-policy", false}, {Name: "image-pull-policy", Required: false},
{"port", false}, {Name: "port", Required: false},
{"hostport", false}, {Name: "hostport", Required: false},
{"stdin", false}, {Name: "stdin", Required: false},
{"leave-stdin-open", false}, {Name: "leave-stdin-open", Required: false},
{"tty", false}, {Name: "tty", Required: false},
{"command", false}, {Name: "command", Required: false},
{"args", false}, {Name: "args", Required: false},
{"env", false}, {Name: "env", Required: false},
{"requests", false}, {Name: "requests", Required: false},
{"limits", false}, {Name: "limits", Required: false},
{"restart", false}, {Name: "restart", Required: false},
{"schedule", true}, {Name: "schedule", Required: true},
{"serviceaccount", false}, {Name: "serviceaccount", Required: false},
} }
} }
@ -542,7 +543,7 @@ func (CronJobV1Beta1) Generate(genericParams map[string]interface{}) (runtime.Ob
return nil, err return nil, err
} }
leaveStdinOpen, err := GetBool(params, "leave-stdin-open", false) leaveStdinOpen, err := generate.GetBool(params, "leave-stdin-open", false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -584,24 +585,24 @@ func (CronJobV1Beta1) Generate(genericParams map[string]interface{}) (runtime.Ob
type BasicReplicationController struct{} type BasicReplicationController struct{}
func (BasicReplicationController) ParamNames() []GeneratorParam { func (BasicReplicationController) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"labels", false}, {Name: "labels", Required: false},
{"default-name", false}, {Name: "default-name", Required: false},
{"name", true}, {Name: "name", Required: true},
{"replicas", true}, {Name: "replicas", Required: true},
{"image", true}, {Name: "image", Required: true},
{"image-pull-policy", false}, {Name: "image-pull-policy", Required: false},
{"port", false}, {Name: "port", Required: false},
{"hostport", false}, {Name: "hostport", Required: false},
{"stdin", false}, {Name: "stdin", Required: false},
{"tty", false}, {Name: "tty", Required: false},
{"command", false}, {Name: "command", Required: false},
{"args", false}, {Name: "args", Required: false},
{"env", false}, {Name: "env", Required: false},
{"requests", false}, {Name: "requests", Required: false},
{"limits", false}, {Name: "limits", Required: false},
{"serviceaccount", false}, {Name: "serviceaccount", Required: false},
} }
} }
@ -649,12 +650,12 @@ func HandleResourceRequirementsV1(params map[string]string) (v1.ResourceRequirem
// makePodSpec returns PodSpec filled with passed parameters. // makePodSpec returns PodSpec filled with passed parameters.
func makePodSpec(params map[string]string, name string) (*v1.PodSpec, error) { func makePodSpec(params map[string]string, name string) (*v1.PodSpec, error) {
stdin, err := GetBool(params, "stdin", false) stdin, err := generate.GetBool(params, "stdin", false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
tty, err := GetBool(params, "tty", false) tty, err := generate.GetBool(params, "tty", false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -747,7 +748,7 @@ func (BasicReplicationController) Generate(genericParams map[string]interface{})
// updatePodContainers updates PodSpec.Containers with passed parameters. // updatePodContainers updates PodSpec.Containers with passed parameters.
func updatePodContainers(params map[string]string, args []string, envs []v1.EnvVar, imagePullPolicy v1.PullPolicy, podSpec *v1.PodSpec) error { func updatePodContainers(params map[string]string, args []string, envs []v1.EnvVar, imagePullPolicy v1.PullPolicy, podSpec *v1.PodSpec) error {
if len(args) > 0 { if len(args) > 0 {
command, err := GetBool(params, "command", false) command, err := generate.GetBool(params, "command", false)
if err != nil { if err != nil {
return err return err
} }
@ -806,25 +807,25 @@ func updatePodPorts(params map[string]string, podSpec *v1.PodSpec) (err error) {
type BasicPod struct{} type BasicPod struct{}
func (BasicPod) ParamNames() []GeneratorParam { func (BasicPod) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"labels", false}, {Name: "labels", Required: false},
{"default-name", false}, {Name: "default-name", Required: false},
{"name", true}, {Name: "name", Required: true},
{"image", true}, {Name: "image", Required: true},
{"image-pull-policy", false}, {Name: "image-pull-policy", Required: false},
{"port", false}, {Name: "port", Required: false},
{"hostport", false}, {Name: "hostport", Required: false},
{"stdin", false}, {Name: "stdin", Required: false},
{"leave-stdin-open", false}, {Name: "leave-stdin-open", Required: false},
{"tty", false}, {Name: "tty", Required: false},
{"restart", false}, {Name: "restart", Required: false},
{"command", false}, {Name: "command", Required: false},
{"args", false}, {Name: "args", Required: false},
{"env", false}, {Name: "env", Required: false},
{"requests", false}, {Name: "requests", Required: false},
{"limits", false}, {Name: "limits", Required: false},
{"serviceaccount", false}, {Name: "serviceaccount", Required: false},
} }
} }
@ -854,16 +855,16 @@ func (BasicPod) Generate(genericParams map[string]interface{}) (runtime.Object,
return nil, err return nil, err
} }
stdin, err := GetBool(params, "stdin", false) stdin, err := generate.GetBool(params, "stdin", false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
leaveStdinOpen, err := GetBool(params, "leave-stdin-open", false) leaveStdinOpen, err := generate.GetBool(params, "leave-stdin-open", false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
tty, err := GetBool(params, "tty", false) tty, err := generate.GetBool(params, "tty", false)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"reflect" "reflect"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"
@ -26,6 +26,7 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation"
"k8s.io/kubernetes/pkg/kubectl/generate"
"k8s.io/kubernetes/pkg/kubectl/util" "k8s.io/kubernetes/pkg/kubectl/util"
"k8s.io/kubernetes/pkg/kubectl/util/hash" "k8s.io/kubernetes/pkg/kubectl/util/hash"
) )
@ -47,14 +48,14 @@ type SecretGeneratorV1 struct {
} }
// Ensure it supports the generator pattern that uses parameter injection // Ensure it supports the generator pattern that uses parameter injection
var _ Generator = &SecretGeneratorV1{} var _ generate.Generator = &SecretGeneratorV1{}
// Ensure it supports the generator pattern that uses parameters specified during construction // Ensure it supports the generator pattern that uses parameters specified during construction
var _ StructuredGenerator = &SecretGeneratorV1{} var _ generate.StructuredGenerator = &SecretGeneratorV1{}
// Generate returns a secret using the specified parameters // Generate returns a secret using the specified parameters
func (s SecretGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) { func (s SecretGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) {
err := ValidateParams(s.ParamNames(), genericParams) err := generate.ValidateParams(s.ParamNames(), genericParams)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -112,15 +113,15 @@ func (s SecretGeneratorV1) Generate(genericParams map[string]interface{}) (runti
} }
// ParamNames returns the set of supported input parameters when using the parameter injection generator pattern // ParamNames returns the set of supported input parameters when using the parameter injection generator pattern
func (s SecretGeneratorV1) ParamNames() []GeneratorParam { func (s SecretGeneratorV1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
{"type", false}, {Name: "type", Required: false},
{"from-file", false}, {Name: "from-file", Required: false},
{"from-literal", false}, {Name: "from-literal", Required: false},
{"from-env-file", false}, {Name: "from-env-file", Required: false},
{"force", false}, {Name: "force", Required: false},
{"append-hash", false}, {Name: "append-hash", Required: false},
} }
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"encoding/json" "encoding/json"
@ -22,7 +22,7 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/kubernetes/pkg/credentialprovider" "k8s.io/kubernetes/pkg/kubectl/generate"
"k8s.io/kubernetes/pkg/kubectl/util/hash" "k8s.io/kubernetes/pkg/kubectl/util/hash"
) )
@ -45,14 +45,14 @@ type SecretForDockerRegistryGeneratorV1 struct {
} }
// Ensure it supports the generator pattern that uses parameter injection // Ensure it supports the generator pattern that uses parameter injection
var _ Generator = &SecretForDockerRegistryGeneratorV1{} var _ generate.Generator = &SecretForDockerRegistryGeneratorV1{}
// Ensure it supports the generator pattern that uses parameters specified during construction // Ensure it supports the generator pattern that uses parameters specified during construction
var _ StructuredGenerator = &SecretForDockerRegistryGeneratorV1{} var _ generate.StructuredGenerator = &SecretForDockerRegistryGeneratorV1{}
// Generate returns a secret using the specified parameters // Generate returns a secret using the specified parameters
func (s SecretForDockerRegistryGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) { func (s SecretForDockerRegistryGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) {
err := ValidateParams(s.ParamNames(), genericParams) err := generate.ValidateParams(s.ParamNames(), genericParams)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -114,15 +114,15 @@ func (s SecretForDockerRegistryGeneratorV1) StructuredGenerate() (runtime.Object
} }
// ParamNames returns the set of supported input parameters when using the parameter injection generator pattern // ParamNames returns the set of supported input parameters when using the parameter injection generator pattern
func (s SecretForDockerRegistryGeneratorV1) ParamNames() []GeneratorParam { func (s SecretForDockerRegistryGeneratorV1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
{"from-file", false}, {Name: "from-file", Required: false},
{"docker-username", true}, {Name: "docker-username", Required: true},
{"docker-email", false}, {Name: "docker-email", Required: false},
{"docker-password", true}, {Name: "docker-password", Required: true},
{"docker-server", true}, {Name: "docker-server", Required: true},
{"append-hash", false}, {Name: "append-hash", Required: false},
} }
} }
@ -148,15 +148,34 @@ func (s SecretForDockerRegistryGeneratorV1) validate() error {
// handleDockerCfgJsonContent serializes a ~/.docker/config.json file // handleDockerCfgJsonContent serializes a ~/.docker/config.json file
func handleDockerCfgJsonContent(username, password, email, server string) ([]byte, error) { func handleDockerCfgJsonContent(username, password, email, server string) ([]byte, error) {
dockercfgAuth := credentialprovider.DockerConfigEntry{ dockercfgAuth := DockerConfigEntry{
Username: username, Username: username,
Password: password, Password: password,
Email: email, Email: email,
} }
dockerCfgJson := credentialprovider.DockerConfigJson{ dockerCfgJson := DockerConfigJson{
Auths: map[string]credentialprovider.DockerConfigEntry{server: dockercfgAuth}, Auths: map[string]DockerConfigEntry{server: dockercfgAuth},
} }
return json.Marshal(dockerCfgJson) return json.Marshal(dockerCfgJson)
} }
// DockerConfigJson represents a local docker auth config file
// for pulling images.
type DockerConfigJson struct {
Auths DockerConfig `json:"auths"`
// +optional
HttpHeaders map[string]string `json:"HttpHeaders,omitempty"`
}
// DockerConfig represents the config file used by the docker CLI.
// This config that represents the credentials that should be used
// when pulling images from specific image repositories.
type DockerConfig map[string]DockerConfigEntry
type DockerConfigEntry struct {
Username string
Password string
Email string
}

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"reflect" "reflect"
@ -73,7 +73,7 @@ func TestSecretForDockerRegistryGenerate(t *testing.T) {
}, },
expected: &v1.Secret{ expected: &v1.Secret{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "foo-548cm7fgdh", Name: "foo-7566tc6mgc",
}, },
Data: map[string][]byte{ Data: map[string][]byte{
v1.DockerConfigJsonKey: secretData, v1.DockerConfigJsonKey: secretData,

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"crypto/tls" "crypto/tls"
@ -23,6 +23,7 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/kubernetes/pkg/kubectl/generate"
"k8s.io/kubernetes/pkg/kubectl/util/hash" "k8s.io/kubernetes/pkg/kubectl/util/hash"
) )
@ -39,14 +40,14 @@ type SecretForTLSGeneratorV1 struct {
} }
// Ensure it supports the generator pattern that uses parameter injection // Ensure it supports the generator pattern that uses parameter injection
var _ Generator = &SecretForTLSGeneratorV1{} var _ generate.Generator = &SecretForTLSGeneratorV1{}
// Ensure it supports the generator pattern that uses parameters specified during construction // Ensure it supports the generator pattern that uses parameters specified during construction
var _ StructuredGenerator = &SecretForTLSGeneratorV1{} var _ generate.StructuredGenerator = &SecretForTLSGeneratorV1{}
// Generate returns a secret using the specified parameters // Generate returns a secret using the specified parameters
func (s SecretForTLSGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) { func (s SecretForTLSGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) {
err := ValidateParams(s.ParamNames(), genericParams) err := generate.ValidateParams(s.ParamNames(), genericParams)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -121,12 +122,12 @@ func readFile(file string) ([]byte, error) {
} }
// ParamNames returns the set of supported input parameters when using the parameter injection generator pattern // ParamNames returns the set of supported input parameters when using the parameter injection generator pattern
func (s SecretForTLSGeneratorV1) ParamNames() []GeneratorParam { func (s SecretForTLSGeneratorV1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
{"key", true}, {Name: "key", Required: true},
{"cert", true}, {Name: "cert", Required: true},
{"append-hash", false}, {Name: "append-hash", Required: false},
} }
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"os" "os"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"
@ -25,58 +25,59 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/kubernetes/pkg/kubectl/generate"
) )
// The only difference between ServiceGeneratorV1 and V2 is that the service port is named "default" in V1, while it is left unnamed in V2. // The only difference between ServiceGeneratorV1 and V2 is that the service port is named "default" in V1, while it is left unnamed in V2.
type ServiceGeneratorV1 struct{} type ServiceGeneratorV1 struct{}
func (ServiceGeneratorV1) ParamNames() []GeneratorParam { func (ServiceGeneratorV1) ParamNames() []generate.GeneratorParam {
return paramNames() return paramNames()
} }
func (ServiceGeneratorV1) Generate(params map[string]interface{}) (runtime.Object, error) { func (ServiceGeneratorV1) Generate(params map[string]interface{}) (runtime.Object, error) {
params["port-name"] = "default" params["port-name"] = "default"
return generate(params) return generateService(params)
} }
type ServiceGeneratorV2 struct{} type ServiceGeneratorV2 struct{}
func (ServiceGeneratorV2) ParamNames() []GeneratorParam { func (ServiceGeneratorV2) ParamNames() []generate.GeneratorParam {
return paramNames() return paramNames()
} }
func (ServiceGeneratorV2) Generate(params map[string]interface{}) (runtime.Object, error) { func (ServiceGeneratorV2) Generate(params map[string]interface{}) (runtime.Object, error) {
return generate(params) return generateService(params)
} }
func paramNames() []GeneratorParam { func paramNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"default-name", true}, {Name: "default-name", Required: true},
{"name", false}, {Name: "name", Required: false},
{"selector", true}, {Name: "selector", Required: true},
// port will be used if a user specifies --port OR the exposed object // port will be used if a user specifies --port OR the exposed object
// has one port // has one port
{"port", false}, {Name: "port", Required: false},
// ports will be used iff a user doesn't specify --port AND the // ports will be used iff a user doesn't specify --port AND the
// exposed object has multiple ports // exposed object has multiple ports
{"ports", false}, {Name: "ports", Required: false},
{"labels", false}, {Name: "labels", Required: false},
{"external-ip", false}, {Name: "external-ip", Required: false},
{"load-balancer-ip", false}, {Name: "load-balancer-ip", Required: false},
{"type", false}, {Name: "type", Required: false},
{"protocol", false}, {Name: "protocol", Required: false},
// protocols will be used to keep port-protocol mapping derived from // protocols will be used to keep port-protocol mapping derived from
// exposed object // exposed object
{"protocols", false}, {Name: "protocols", Required: false},
{"container-port", false}, // alias of target-port {Name: "container-port", Required: false}, // alias of target-port
{"target-port", false}, {Name: "target-port", Required: false},
{"port-name", false}, {Name: "port-name", Required: false},
{"session-affinity", false}, {Name: "session-affinity", Required: false},
{"cluster-ip", false}, {Name: "cluster-ip", Required: false},
} }
} }
func generate(genericParams map[string]interface{}) (runtime.Object, error) { func generateService(genericParams map[string]interface{}) (runtime.Object, error) {
params := map[string]string{} params := map[string]string{}
for key, value := range genericParams { for key, value := range genericParams {
strVal, isString := value.(string) strVal, isString := value.(string)
@ -89,7 +90,7 @@ func generate(genericParams map[string]interface{}) (runtime.Object, error) {
if !found || len(selectorString) == 0 { if !found || len(selectorString) == 0 {
return nil, fmt.Errorf("'selector' is a required parameter.") return nil, fmt.Errorf("'selector' is a required parameter.")
} }
selector, err := ParseLabels(selectorString) selector, err := generate.ParseLabels(selectorString)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -97,7 +98,7 @@ func generate(genericParams map[string]interface{}) (runtime.Object, error) {
labelsString, found := params["labels"] labelsString, found := params["labels"]
var labels map[string]string var labels map[string]string
if found && len(labelsString) > 0 { if found && len(labelsString) > 0 {
labels, err = ParseLabels(labelsString) labels, err = generate.ParseLabels(labelsString)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -123,7 +124,7 @@ func generate(genericParams map[string]interface{}) (runtime.Object, error) {
protocolsString, found := params["protocols"] protocolsString, found := params["protocols"]
var portProtocolMap map[string]string var portProtocolMap map[string]string
if found && len(protocolsString) > 0 { if found && len(protocolsString) > 0 {
portProtocolMap, err = ParseProtocols(protocolsString) portProtocolMap, err = generate.ParseProtocols(protocolsString)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"
@ -26,6 +26,7 @@ import (
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation"
"k8s.io/kubernetes/pkg/kubectl/generate"
) )
type ServiceCommonGeneratorV1 struct { type ServiceCommonGeneratorV1 struct {
@ -54,31 +55,31 @@ type ServiceExternalNameGeneratorV1 struct {
ServiceCommonGeneratorV1 ServiceCommonGeneratorV1
} }
func (ServiceClusterIPGeneratorV1) ParamNames() []GeneratorParam { func (ServiceClusterIPGeneratorV1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
{"tcp", true}, {Name: "tcp", Required: true},
{"clusterip", false}, {Name: "clusterip", Required: false},
} }
} }
func (ServiceNodePortGeneratorV1) ParamNames() []GeneratorParam { func (ServiceNodePortGeneratorV1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
{"tcp", true}, {Name: "tcp", Required: true},
{"nodeport", true}, {Name: "nodeport", Required: true},
} }
} }
func (ServiceLoadBalancerGeneratorV1) ParamNames() []GeneratorParam { func (ServiceLoadBalancerGeneratorV1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
{"tcp", true}, {Name: "tcp", Required: true},
} }
} }
func (ServiceExternalNameGeneratorV1) ParamNames() []GeneratorParam { func (ServiceExternalNameGeneratorV1) ParamNames() []generate.GeneratorParam {
return []GeneratorParam{ return []generate.GeneratorParam{
{"name", true}, {Name: "name", Required: true},
{"externalname", true}, {Name: "externalname", Required: true},
} }
} }
@ -138,7 +139,7 @@ func (s ServiceCommonGeneratorV1) GenerateCommon(params map[string]interface{})
} }
func (s ServiceLoadBalancerGeneratorV1) Generate(params map[string]interface{}) (runtime.Object, error) { func (s ServiceLoadBalancerGeneratorV1) Generate(params map[string]interface{}) (runtime.Object, error) {
err := ValidateParams(s.ParamNames(), params) err := generate.ValidateParams(s.ParamNames(), params)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -151,7 +152,7 @@ func (s ServiceLoadBalancerGeneratorV1) Generate(params map[string]interface{})
} }
func (s ServiceNodePortGeneratorV1) Generate(params map[string]interface{}) (runtime.Object, error) { func (s ServiceNodePortGeneratorV1) Generate(params map[string]interface{}) (runtime.Object, error) {
err := ValidateParams(s.ParamNames(), params) err := generate.ValidateParams(s.ParamNames(), params)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -164,7 +165,7 @@ func (s ServiceNodePortGeneratorV1) Generate(params map[string]interface{}) (run
} }
func (s ServiceClusterIPGeneratorV1) Generate(params map[string]interface{}) (runtime.Object, error) { func (s ServiceClusterIPGeneratorV1) Generate(params map[string]interface{}) (runtime.Object, error) {
err := ValidateParams(s.ParamNames(), params) err := generate.ValidateParams(s.ParamNames(), params)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -177,7 +178,7 @@ func (s ServiceClusterIPGeneratorV1) Generate(params map[string]interface{}) (ru
} }
func (s ServiceExternalNameGeneratorV1) Generate(params map[string]interface{}) (runtime.Object, error) { func (s ServiceExternalNameGeneratorV1) Generate(params map[string]interface{}) (runtime.Object, error) {
err := ValidateParams(s.ParamNames(), params) err := generate.ValidateParams(s.ParamNames(), params)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"reflect" "reflect"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"reflect" "reflect"
@ -23,12 +23,13 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/kubernetes/pkg/kubectl/generate"
) )
func TestGenerateService(t *testing.T) { func TestGenerateService(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
generator Generator generator generate.Generator
params map[string]interface{} params map[string]interface{}
expected v1.Service expected v1.Service
}{ }{

View File

@ -14,13 +14,14 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"fmt" "fmt"
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/kubernetes/pkg/kubectl/generate"
) )
// ServiceAccountGeneratorV1 supports stable generation of a service account // ServiceAccountGeneratorV1 supports stable generation of a service account
@ -30,7 +31,7 @@ type ServiceAccountGeneratorV1 struct {
} }
// Ensure it supports the generator pattern that uses parameters specified during construction // Ensure it supports the generator pattern that uses parameters specified during construction
var _ StructuredGenerator = &ServiceAccountGeneratorV1{} var _ generate.StructuredGenerator = &ServiceAccountGeneratorV1{}
// StructuredGenerate outputs a service account object using the configured fields // StructuredGenerate outputs a service account object using the configured fields
func (g *ServiceAccountGeneratorV1) StructuredGenerate() (runtime.Object, error) { func (g *ServiceAccountGeneratorV1) StructuredGenerate() (runtime.Object, error) {

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package kubectl package versioned
import ( import (
"reflect" "reflect"

View File

@ -23,6 +23,7 @@ go_library(
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//pkg/kubectl:go_default_library", "//pkg/kubectl:go_default_library",
"//pkg/kubectl/generate:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/util/podutils:go_default_library", "//pkg/kubectl/util/podutils:go_default_library",
"//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library",

View File

@ -25,7 +25,7 @@ import (
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
extensionsv1beta1 "k8s.io/api/extensions/v1beta1" extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/generate"
) )
// mapBasedSelectorForObject returns the map-based selector associated with the provided object. If a // mapBasedSelectorForObject returns the map-based selector associated with the provided object. If a
@ -35,19 +35,19 @@ func mapBasedSelectorForObject(object runtime.Object) (string, error) {
// TODO: replace with a swagger schema based approach (identify pod selector via schema introspection) // TODO: replace with a swagger schema based approach (identify pod selector via schema introspection)
switch t := object.(type) { switch t := object.(type) {
case *corev1.ReplicationController: case *corev1.ReplicationController:
return kubectl.MakeLabels(t.Spec.Selector), nil return generate.MakeLabels(t.Spec.Selector), nil
case *corev1.Pod: case *corev1.Pod:
if len(t.Labels) == 0 { if len(t.Labels) == 0 {
return "", fmt.Errorf("the pod has no labels and cannot be exposed") return "", fmt.Errorf("the pod has no labels and cannot be exposed")
} }
return kubectl.MakeLabels(t.Labels), nil return generate.MakeLabels(t.Labels), nil
case *corev1.Service: case *corev1.Service:
if t.Spec.Selector == nil { if t.Spec.Selector == nil {
return "", fmt.Errorf("the service has no pod selector set") return "", fmt.Errorf("the service has no pod selector set")
} }
return kubectl.MakeLabels(t.Spec.Selector), nil return generate.MakeLabels(t.Spec.Selector), nil
case *extensionsv1beta1.Deployment: case *extensionsv1beta1.Deployment:
// TODO(madhusudancs): Make this smarter by admitting MatchExpressions with Equals // TODO(madhusudancs): Make this smarter by admitting MatchExpressions with Equals
@ -55,28 +55,28 @@ func mapBasedSelectorForObject(object runtime.Object) (string, error) {
if len(t.Spec.Selector.MatchExpressions) > 0 { if len(t.Spec.Selector.MatchExpressions) > 0 {
return "", fmt.Errorf("couldn't convert expressions - \"%+v\" to map-based selector format", t.Spec.Selector.MatchExpressions) return "", fmt.Errorf("couldn't convert expressions - \"%+v\" to map-based selector format", t.Spec.Selector.MatchExpressions)
} }
return kubectl.MakeLabels(t.Spec.Selector.MatchLabels), nil return generate.MakeLabels(t.Spec.Selector.MatchLabels), nil
case *appsv1.Deployment: case *appsv1.Deployment:
// TODO(madhusudancs): Make this smarter by admitting MatchExpressions with Equals // TODO(madhusudancs): Make this smarter by admitting MatchExpressions with Equals
// operator, DoubleEquals operator and In operator with only one element in the set. // operator, DoubleEquals operator and In operator with only one element in the set.
if len(t.Spec.Selector.MatchExpressions) > 0 { if len(t.Spec.Selector.MatchExpressions) > 0 {
return "", fmt.Errorf("couldn't convert expressions - \"%+v\" to map-based selector format", t.Spec.Selector.MatchExpressions) return "", fmt.Errorf("couldn't convert expressions - \"%+v\" to map-based selector format", t.Spec.Selector.MatchExpressions)
} }
return kubectl.MakeLabels(t.Spec.Selector.MatchLabels), nil return generate.MakeLabels(t.Spec.Selector.MatchLabels), nil
case *appsv1beta2.Deployment: case *appsv1beta2.Deployment:
// TODO(madhusudancs): Make this smarter by admitting MatchExpressions with Equals // TODO(madhusudancs): Make this smarter by admitting MatchExpressions with Equals
// operator, DoubleEquals operator and In operator with only one element in the set. // operator, DoubleEquals operator and In operator with only one element in the set.
if len(t.Spec.Selector.MatchExpressions) > 0 { if len(t.Spec.Selector.MatchExpressions) > 0 {
return "", fmt.Errorf("couldn't convert expressions - \"%+v\" to map-based selector format", t.Spec.Selector.MatchExpressions) return "", fmt.Errorf("couldn't convert expressions - \"%+v\" to map-based selector format", t.Spec.Selector.MatchExpressions)
} }
return kubectl.MakeLabels(t.Spec.Selector.MatchLabels), nil return generate.MakeLabels(t.Spec.Selector.MatchLabels), nil
case *appsv1beta1.Deployment: case *appsv1beta1.Deployment:
// TODO(madhusudancs): Make this smarter by admitting MatchExpressions with Equals // TODO(madhusudancs): Make this smarter by admitting MatchExpressions with Equals
// operator, DoubleEquals operator and In operator with only one element in the set. // operator, DoubleEquals operator and In operator with only one element in the set.
if len(t.Spec.Selector.MatchExpressions) > 0 { if len(t.Spec.Selector.MatchExpressions) > 0 {
return "", fmt.Errorf("couldn't convert expressions - \"%+v\" to map-based selector format", t.Spec.Selector.MatchExpressions) return "", fmt.Errorf("couldn't convert expressions - \"%+v\" to map-based selector format", t.Spec.Selector.MatchExpressions)
} }
return kubectl.MakeLabels(t.Spec.Selector.MatchLabels), nil return generate.MakeLabels(t.Spec.Selector.MatchLabels), nil
case *extensionsv1beta1.ReplicaSet: case *extensionsv1beta1.ReplicaSet:
// TODO(madhusudancs): Make this smarter by admitting MatchExpressions with Equals // TODO(madhusudancs): Make this smarter by admitting MatchExpressions with Equals
@ -84,21 +84,21 @@ func mapBasedSelectorForObject(object runtime.Object) (string, error) {
if len(t.Spec.Selector.MatchExpressions) > 0 { if len(t.Spec.Selector.MatchExpressions) > 0 {
return "", fmt.Errorf("couldn't convert expressions - \"%+v\" to map-based selector format", t.Spec.Selector.MatchExpressions) return "", fmt.Errorf("couldn't convert expressions - \"%+v\" to map-based selector format", t.Spec.Selector.MatchExpressions)
} }
return kubectl.MakeLabels(t.Spec.Selector.MatchLabels), nil return generate.MakeLabels(t.Spec.Selector.MatchLabels), nil
case *appsv1.ReplicaSet: case *appsv1.ReplicaSet:
// TODO(madhusudancs): Make this smarter by admitting MatchExpressions with Equals // TODO(madhusudancs): Make this smarter by admitting MatchExpressions with Equals
// operator, DoubleEquals operator and In operator with only one element in the set. // operator, DoubleEquals operator and In operator with only one element in the set.
if len(t.Spec.Selector.MatchExpressions) > 0 { if len(t.Spec.Selector.MatchExpressions) > 0 {
return "", fmt.Errorf("couldn't convert expressions - \"%+v\" to map-based selector format", t.Spec.Selector.MatchExpressions) return "", fmt.Errorf("couldn't convert expressions - \"%+v\" to map-based selector format", t.Spec.Selector.MatchExpressions)
} }
return kubectl.MakeLabels(t.Spec.Selector.MatchLabels), nil return generate.MakeLabels(t.Spec.Selector.MatchLabels), nil
case *appsv1beta2.ReplicaSet: case *appsv1beta2.ReplicaSet:
// TODO(madhusudancs): Make this smarter by admitting MatchExpressions with Equals // TODO(madhusudancs): Make this smarter by admitting MatchExpressions with Equals
// operator, DoubleEquals operator and In operator with only one element in the set. // operator, DoubleEquals operator and In operator with only one element in the set.
if len(t.Spec.Selector.MatchExpressions) > 0 { if len(t.Spec.Selector.MatchExpressions) > 0 {
return "", fmt.Errorf("couldn't convert expressions - \"%+v\" to map-based selector format", t.Spec.Selector.MatchExpressions) return "", fmt.Errorf("couldn't convert expressions - \"%+v\" to map-based selector format", t.Spec.Selector.MatchExpressions)
} }
return kubectl.MakeLabels(t.Spec.Selector.MatchLabels), nil return generate.MakeLabels(t.Spec.Selector.MatchLabels), nil
default: default:
return "", fmt.Errorf("cannot extract pod selector from %T", object) return "", fmt.Errorf("cannot extract pod selector from %T", object)

View File

@ -57,11 +57,6 @@ import (
"k8s.io/kubernetes/pkg/printers" "k8s.io/kubernetes/pkg/printers"
) )
func init() {
legacyscheme.Scheme.AddKnownTypes(schema.GroupVersion{Group: "", Version: runtime.APIVersionInternal}, &TestPrintType{})
legacyscheme.Scheme.AddKnownTypes(schema.GroupVersion{Group: "", Version: "v1"}, &TestPrintType{})
}
var testData = TestStruct{ var testData = TestStruct{
TypeMeta: metav1.TypeMeta{APIVersion: "foo/bar", Kind: "TestStruct"}, TypeMeta: metav1.TypeMeta{APIVersion: "foo/bar", Kind: "TestStruct"},
Key: "testValue", Key: "testValue",