diff --git a/pkg/kubectl/cmd/apply.go b/pkg/kubectl/cmd/apply.go index 3a006880caa..9bbc45fc04e 100644 --- a/pkg/kubectl/cmd/apply.go +++ b/pkg/kubectl/cmd/apply.go @@ -188,7 +188,7 @@ func parsePruneResources(mapper meta.RESTMapper, gvks []string) ([]pruneResource } func RunApply(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, options *ApplyOptions) error { - schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagBool(cmd, "openapi-validation"), cmdutil.GetFlagString(cmd, "schema-cache-dir")) + schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate")) if err != nil { return err } diff --git a/pkg/kubectl/cmd/convert.go b/pkg/kubectl/cmd/convert.go index c5c4afb74c7..58e3268ef53 100644 --- a/pkg/kubectl/cmd/convert.go +++ b/pkg/kubectl/cmd/convert.go @@ -128,7 +128,7 @@ func (o *ConvertOptions) Complete(f cmdutil.Factory, out io.Writer, cmd *cobra.C // build the builder o.builder = f.NewBuilder() if !o.local { - schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagBool(cmd, "openapi-validation"), cmdutil.GetFlagString(cmd, "schema-cache-dir")) + schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate")) if err != nil { return err } diff --git a/pkg/kubectl/cmd/create.go b/pkg/kubectl/cmd/create.go index 31eaa484f64..5ed32cb813f 100644 --- a/pkg/kubectl/cmd/create.go +++ b/pkg/kubectl/cmd/create.go @@ -115,7 +115,7 @@ func RunCreate(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, opt if options.EditBeforeCreate { return RunEditOnCreate(f, out, errOut, cmd, &options.FilenameOptions) } - schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagBool(cmd, "openapi-validation"), cmdutil.GetFlagString(cmd, "schema-cache-dir")) + schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate")) if err != nil { return err } @@ -196,7 +196,6 @@ func RunEditOnCreate(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Comman FilenameOptions: *options, ValidateOptions: cmdutil.ValidateOptions{ EnableValidation: cmdutil.GetFlagBool(cmd, "validate"), - SchemaCacheDir: cmdutil.GetFlagString(cmd, "schema-cache-dir"), }, Output: cmdutil.GetFlagString(cmd, "output"), WindowsLineEndings: cmdutil.GetFlagBool(cmd, "windows-line-endings"), diff --git a/pkg/kubectl/cmd/replace.go b/pkg/kubectl/cmd/replace.go index 330971c56db..d6f5e26357c 100644 --- a/pkg/kubectl/cmd/replace.go +++ b/pkg/kubectl/cmd/replace.go @@ -92,7 +92,7 @@ func NewCmdReplace(f cmdutil.Factory, out io.Writer) *cobra.Command { } func RunReplace(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, options *resource.FilenameOptions) error { - schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagBool(cmd, "openapi-validation"), cmdutil.GetFlagString(cmd, "schema-cache-dir")) + schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate")) if err != nil { return err } @@ -167,7 +167,7 @@ func RunReplace(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []str } func forceReplace(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string, shortOutput bool, options *resource.FilenameOptions) error { - schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagBool(cmd, "openapi-validation"), cmdutil.GetFlagString(cmd, "schema-cache-dir")) + schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate")) if err != nil { return err } diff --git a/pkg/kubectl/cmd/rollingupdate.go b/pkg/kubectl/cmd/rollingupdate.go index b8449042b59..3f6ac6d046b 100644 --- a/pkg/kubectl/cmd/rollingupdate.go +++ b/pkg/kubectl/cmd/rollingupdate.go @@ -194,7 +194,7 @@ func RunRollingUpdate(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args mapper, typer := f.Object() if len(filename) != 0 { - schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagBool(cmd, "openapi-validation"), cmdutil.GetFlagString(cmd, "schema-cache-dir")) + schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate")) if err != nil { return err } diff --git a/pkg/kubectl/cmd/testing/fake.go b/pkg/kubectl/cmd/testing/fake.go index 522cf5b3dac..cb46de93789 100644 --- a/pkg/kubectl/cmd/testing/fake.go +++ b/pkg/kubectl/cmd/testing/fake.go @@ -415,7 +415,7 @@ func (f *FakeFactory) ResolveImage(name string) (string, error) { return name, nil } -func (f *FakeFactory) Validator(validate bool, openapi bool, cacheDir string) (validation.Schema, error) { +func (f *FakeFactory) Validator(validate bool) (validation.Schema, error) { return f.tf.Validator, f.tf.Err } @@ -718,7 +718,7 @@ func (f *fakeAPIFactory) AttachablePodForObject(object runtime.Object, timeout t } } -func (f *fakeAPIFactory) Validator(validate bool, openapi bool, cacheDir string) (validation.Schema, error) { +func (f *fakeAPIFactory) Validator(validate bool) (validation.Schema, error) { return f.tf.Validator, f.tf.Err } diff --git a/pkg/kubectl/cmd/util/editor/editoptions.go b/pkg/kubectl/cmd/util/editor/editoptions.go index 96cd207f9bc..f125efa60bb 100644 --- a/pkg/kubectl/cmd/util/editor/editoptions.go +++ b/pkg/kubectl/cmd/util/editor/editoptions.go @@ -230,7 +230,7 @@ func (o *EditOptions) Run() error { glog.V(4).Infof("User edited:\n%s", string(edited)) // Apply validation - schema, err := o.f.Validator(o.EnableValidation, o.UseOpenAPI, o.SchemaCacheDir) + schema, err := o.f.Validator(o.EnableValidation) if err != nil { return preservedFile(err, file, o.ErrOut) } diff --git a/pkg/kubectl/cmd/util/factory.go b/pkg/kubectl/cmd/util/factory.go index eb25c5a00d1..032840b2cb8 100644 --- a/pkg/kubectl/cmd/util/factory.go +++ b/pkg/kubectl/cmd/util/factory.go @@ -233,7 +233,7 @@ type ObjectMappingFactory interface { AttachablePodForObject(object runtime.Object, timeout time.Duration) (*api.Pod, error) // Returns a schema that can validate objects stored on disk. - Validator(validate bool, openapi bool, cacheDir string) (validation.Schema, error) + Validator(validate bool) (validation.Schema, error) // SwaggerSchema returns the schema declaration for the provided group version kind. SwaggerSchema(schema.GroupVersionKind) (*swagger.ApiDeclaration, error) // OpenAPISchema returns the schema openapi schema definiton diff --git a/pkg/kubectl/cmd/util/factory_object_mapping.go b/pkg/kubectl/cmd/util/factory_object_mapping.go index 2b51808cf84..3686f73a505 100644 --- a/pkg/kubectl/cmd/util/factory_object_mapping.go +++ b/pkg/kubectl/cmd/util/factory_object_mapping.go @@ -22,13 +22,11 @@ import ( "errors" "fmt" "os" - "path" "sort" "sync" "time" swagger "github.com/emicklei/go-restful-swagger12" - "github.com/golang/glog" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/meta" @@ -409,43 +407,20 @@ func (f *ring1Factory) AttachablePodForObject(object runtime.Object, timeout tim return pod, err } -func (f *ring1Factory) Validator(validate, openapi bool, cacheDir string) (validation.Schema, error) { - if validate { - if openapi { - resources, err := f.OpenAPISchema() - if err == nil { - return validation.ConjunctiveSchema{ - openapivalidation.NewSchemaValidation(resources), - validation.NoDoubleKeySchema{}, - }, nil - } - - glog.Warningf("Failed to download OpenAPI (%v), falling back to swagger", err) - } - - discovery, err := f.clientAccessFactory.DiscoveryClient() - if err != nil { - return nil, err - } - dir := cacheDir - if len(dir) > 0 { - version, err := discovery.ServerVersion() - if err == nil { - dir = path.Join(cacheDir, version.String()) - } else { - dir = "" // disable caching as a fallback - } - } - swaggerSchema := &clientSwaggerSchema{ - c: discovery.RESTClient(), - cacheDir: dir, - } - return validation.ConjunctiveSchema{ - swaggerSchema, - validation.NoDoubleKeySchema{}, - }, nil +func (f *ring1Factory) Validator(validate bool) (validation.Schema, error) { + if !validate { + return validation.NullSchema{}, nil } - return validation.NullSchema{}, nil + + resources, err := f.OpenAPISchema() + if err != nil { + return nil, err + } + + return validation.ConjunctiveSchema{ + openapivalidation.NewSchemaValidation(resources), + validation.NoDoubleKeySchema{}, + }, nil } func (f *ring1Factory) SwaggerSchema(gvk schema.GroupVersionKind) (*swagger.ApiDeclaration, error) { diff --git a/pkg/kubectl/cmd/util/helpers.go b/pkg/kubectl/cmd/util/helpers.go index 36aac301fba..02a76775950 100644 --- a/pkg/kubectl/cmd/util/helpers.go +++ b/pkg/kubectl/cmd/util/helpers.go @@ -395,20 +395,10 @@ func GetPodRunningTimeoutFlag(cmd *cobra.Command) (time.Duration, error) { func AddValidateFlags(cmd *cobra.Command) { cmd.Flags().Bool("validate", true, "If true, use a schema to validate the input before sending it") - cmd.Flags().String("schema-cache-dir", fmt.Sprintf("~/%s/%s", clientcmd.RecommendedHomeDir, clientcmd.RecommendedSchemaName), fmt.Sprintf("If non-empty, load/store cached API schemas in this directory, default is '$HOME/%s/%s'", clientcmd.RecommendedHomeDir, clientcmd.RecommendedSchemaName)) - cmd.Flags().Bool("openapi-validation", true, "If true, use openapi rather than swagger for validation.") - cmd.MarkFlagFilename("schema-cache-dir") } func AddValidateOptionFlags(cmd *cobra.Command, options *ValidateOptions) { cmd.Flags().BoolVar(&options.EnableValidation, "validate", true, "If true, use a schema to validate the input before sending it") - cmd.Flags().StringVar(&options.SchemaCacheDir, "schema-cache-dir", fmt.Sprintf("~/%s/%s", clientcmd.RecommendedHomeDir, clientcmd.RecommendedSchemaName), fmt.Sprintf("If non-empty, load/store cached API schemas in this directory, default is '$HOME/%s/%s'", clientcmd.RecommendedHomeDir, clientcmd.RecommendedSchemaName)) - cmd.Flags().BoolVar(&options.UseOpenAPI, "openapi-validation", true, "If true, use openapi rather than swagger for validation") - cmd.MarkFlagFilename("schema-cache-dir") -} - -func AddOpenAPIFlags(cmd *cobra.Command) { - cmd.Flags().Bool("openapi-validation", true, "If true, use openapi rather than swagger for validation") } func AddFilenameOptionFlags(cmd *cobra.Command, options *resource.FilenameOptions, usage string) { @@ -446,8 +436,6 @@ func AddGeneratorFlags(cmd *cobra.Command, defaultGenerator string) { type ValidateOptions struct { EnableValidation bool - UseOpenAPI bool - SchemaCacheDir string } func ReadConfigDataFromReader(reader io.Reader, source string) ([]byte, error) {