diff --git a/staging/src/k8s.io/cli-runtime/pkg/resource/dry_run_verifier.go b/staging/src/k8s.io/cli-runtime/pkg/resource/query_param_verifier.go similarity index 50% rename from staging/src/k8s.io/cli-runtime/pkg/resource/dry_run_verifier.go rename to staging/src/k8s.io/cli-runtime/pkg/resource/query_param_verifier.go index 1fb36503a27..51e8df1b86d 100644 --- a/staging/src/k8s.io/cli-runtime/pkg/resource/dry_run_verifier.go +++ b/staging/src/k8s.io/cli-runtime/pkg/resource/query_param_verifier.go @@ -21,19 +21,104 @@ import ( "fmt" openapi_v2 "github.com/googleapis/gnostic/openapiv2" - yaml "gopkg.in/yaml.v2" + "gopkg.in/yaml.v2" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/discovery" "k8s.io/client-go/dynamic" ) -func NewDryRunVerifier(dynamicClient dynamic.Interface, openAPIGetter discovery.OpenAPISchemaInterface) *DryRunVerifier { - return &DryRunVerifier{ +func NewQueryParamVerifier(dynamicClient dynamic.Interface, openAPIGetter discovery.OpenAPISchemaInterface, queryParam VerifiableQueryParam) *QueryParamVerifier { + return &QueryParamVerifier{ finder: NewCRDFinder(CRDFromDynamic(dynamicClient)), openAPIGetter: openAPIGetter, + queryParam: queryParam, } } +// QueryParamVerifier verifies if a given group-version-kind supports a +// given VerifiableQueryParam against the current server. +// +// Currently supported query params are: +// 1. dryRun +// 2. fieldValidation +// +// Support for each of these query params needs to be verified because: +// +// 1. Sending dryRun requests to apiserver that +// don't support it will result in objects being unwillingly persisted. +// +// 2. We determine whether or not to perform server-side or client-side +// schema validation based on whether the fieldValidation query param is +// supported or not. +// +// It reads the OpenAPI to see if the given GVK supports the given query param. +// If the GVK can not be found, we assume that CRDs will have the same level of +// support as "namespaces", and non-CRDs will not be supported. We +// delay the check for CRDs as much as possible though, since it +// requires an extra round-trip to the server. +type QueryParamVerifier struct { + finder CRDFinder + openAPIGetter discovery.OpenAPISchemaInterface + queryParam VerifiableQueryParam +} + +// VerifiableQueryParam is a query parameter who's enablement on the +// apiserver can be determined by evaluating the OpenAPI for a specific +// GVK. +type VerifiableQueryParam string + +const ( + QueryParamDryRun VerifiableQueryParam = "dryRun" + QueryParamFieldValidation VerifiableQueryParam = "fieldValidation" +) + +func (v *QueryParamVerifier) HasSupport(gvk schema.GroupVersionKind) error { + oapi, err := v.openAPIGetter.OpenAPISchema() + if err != nil { + return fmt.Errorf("failed to download openapi: %v", err) + } + supports, err := supportsQueryParam(oapi, gvk, v.queryParam) + if err != nil { + // We assume that we couldn't find the type, then check for namespace: + supports, _ = supportsQueryParam(oapi, schema.GroupVersionKind{Group: "", Version: "v1", Kind: "Namespace"}, v.queryParam) + // If namespace supports the query param, then we will support the query param for CRDs only. + if supports { + supports, err = v.finder.HasCRD(gvk.GroupKind()) + if err != nil { + return fmt.Errorf("failed to check CRD: %v", err) + } + } + } + if !supports { + return newParamUnsupportedError(gvk, v.queryParam) + } + return nil +} + +type paramUnsupportedError struct { + gvk schema.GroupVersionKind + param VerifiableQueryParam +} + +func newParamUnsupportedError(gvk schema.GroupVersionKind, param VerifiableQueryParam) error { + return ¶mUnsupportedError{ + gvk: gvk, + param: param, + } +} + +func (e *paramUnsupportedError) Error() string { + return fmt.Sprintf("%v doesn't support %s", e.gvk, e.param) +} + +func IsParamUnsupportedError(err error) bool { + if err == nil { + return false + } + _, ok := err.(*paramUnsupportedError) + return ok +} + func hasGVKExtension(extensions []*openapi_v2.NamedAny, gvk schema.GroupVersionKind) bool { for _, extension := range extensions { if extension.GetValue().GetYaml() == "" || @@ -54,56 +139,17 @@ func hasGVKExtension(extensions []*openapi_v2.NamedAny, gvk schema.GroupVersionK return false } -// DryRunVerifier verifies if a given group-version-kind supports DryRun -// against the current server. Sending dryRun requests to apiserver that -// don't support it will result in objects being unwillingly persisted. -// -// It reads the OpenAPI to see if the given GVK supports dryRun. If the -// GVK can not be found, we assume that CRDs will have the same level of -// support as "namespaces", and non-CRDs will not be supported. We -// delay the check for CRDs as much as possible though, since it -// requires an extra round-trip to the server. -type DryRunVerifier struct { - finder CRDFinder - openAPIGetter discovery.OpenAPISchemaInterface -} - -// HasSupport verifies if the given gvk supports DryRun. An error is -// returned if it doesn't. -func (v *DryRunVerifier) HasSupport(gvk schema.GroupVersionKind) error { - oapi, err := v.openAPIGetter.OpenAPISchema() - if err != nil { - return fmt.Errorf("failed to download openapi: %v", err) - } - supports, err := supportsDryRun(oapi, gvk) - if err != nil { - // We assume that we couldn't find the type, then check for namespace: - supports, _ = supportsDryRun(oapi, schema.GroupVersionKind{Group: "", Version: "v1", Kind: "Namespace"}) - // If namespace supports dryRun, then we will support dryRun for CRDs only. - if supports { - supports, err = v.finder.HasCRD(gvk.GroupKind()) - if err != nil { - return fmt.Errorf("failed to check CRD: %v", err) - } - } - } - if !supports { - return fmt.Errorf("%v doesn't support dry-run", gvk) - } - return nil -} - -// supportsDryRun is a method that let's us look in the OpenAPI if the -// specific group-version-kind supports the dryRun query parameter for +// supportsQueryParam is a method that let's us look in the OpenAPI if the +// specific group-version-kind supports the specific query parameter for // the PATCH end-point. -func supportsDryRun(doc *openapi_v2.Document, gvk schema.GroupVersionKind) (bool, error) { +func supportsQueryParam(doc *openapi_v2.Document, gvk schema.GroupVersionKind, queryParam VerifiableQueryParam) (bool, error) { for _, path := range doc.GetPaths().GetPath() { // Is this describing the gvk we're looking for? if !hasGVKExtension(path.GetValue().GetPatch().GetVendorExtension(), gvk) { continue } for _, param := range path.GetValue().GetPatch().GetParameters() { - if param.GetParameter().GetNonBodyParameter().GetQueryParameterSubSchema().GetName() == "dryRun" { + if param.GetParameter().GetNonBodyParameter().GetQueryParameterSubSchema().GetName() == string(queryParam) { return true, nil } } diff --git a/staging/src/k8s.io/cli-runtime/pkg/resource/dry_run_verifier_test.go b/staging/src/k8s.io/cli-runtime/pkg/resource/query_param_verifier_test.go similarity index 94% rename from staging/src/k8s.io/cli-runtime/pkg/resource/dry_run_verifier_test.go rename to staging/src/k8s.io/cli-runtime/pkg/resource/query_param_verifier_test.go index ed3e5c84714..51832b41a51 100644 --- a/staging/src/k8s.io/cli-runtime/pkg/resource/dry_run_verifier_test.go +++ b/staging/src/k8s.io/cli-runtime/pkg/resource/query_param_verifier_test.go @@ -66,7 +66,7 @@ func TestSupportsDryRun(t *testing.T) { } for _, test := range tests { - supports, err := supportsDryRun(doc, test.gvk) + supports, err := supportsQueryParam(doc, test.gvk, QueryParamDryRun) if supports != test.supports || ((err == nil) != test.success) { errStr := "nil" if test.success == false { @@ -84,7 +84,7 @@ func TestSupportsDryRun(t *testing.T) { var fakeSchema = openapitesting.Fake{Path: filepath.Join("..", "..", "artifacts", "openapi", "swagger.json")} func TestDryRunVerifier(t *testing.T) { - dryRunVerifier := DryRunVerifier{ + dryRunVerifier := QueryParamVerifier{ finder: NewCRDFinder(func() ([]schema.GroupKind, error) { return []schema.GroupKind{ { @@ -98,6 +98,7 @@ func TestDryRunVerifier(t *testing.T) { }, nil }), openAPIGetter: &fakeSchema, + queryParam: QueryParamDryRun, } err := dryRunVerifier.HasSupport(schema.GroupVersionKind{Group: "", Version: "v1", Kind: "NodeProxyOptions"}) @@ -128,7 +129,7 @@ func (EmptyOpenAPI) OpenAPISchema() (*openapi_v2.Document, error) { } func TestDryRunVerifierNoOpenAPI(t *testing.T) { - dryRunVerifier := DryRunVerifier{ + dryRunVerifier := QueryParamVerifier{ finder: NewCRDFinder(func() ([]schema.GroupKind, error) { return []schema.GroupKind{ { @@ -142,6 +143,7 @@ func TestDryRunVerifierNoOpenAPI(t *testing.T) { }, nil }), openAPIGetter: EmptyOpenAPI{}, + queryParam: QueryParamDryRun, } err := dryRunVerifier.HasSupport(schema.GroupVersionKind{Group: "", Version: "v1", Kind: "Pod"}) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/annotate/annotate.go b/staging/src/k8s.io/kubectl/pkg/cmd/annotate/annotate.go index be4678b2900..9ebfd97dad1 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/annotate/annotate.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/annotate/annotate.go @@ -57,7 +57,7 @@ type AnnotateOptions struct { list bool local bool dryRunStrategy cmdutil.DryRunStrategy - dryRunVerifier *resource.DryRunVerifier + dryRunVerifier *resource.QueryParamVerifier fieldManager string all bool allNamespaces bool @@ -182,7 +182,7 @@ func (o *AnnotateOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [ if err != nil { return err } - o.dryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.dryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.dryRunStrategy) printer, err := o.PrintFlags.ToPrinter() diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/apply/apply.go b/staging/src/k8s.io/kubectl/pkg/cmd/apply/apply.go index aba4cd3884b..ccffc4012bc 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/apply/apply.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/apply/apply.go @@ -85,7 +85,7 @@ type ApplyOptions struct { FieldManager string Selector string DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier Prune bool PruneResources []prune.Resource cmdBaseName string @@ -237,7 +237,7 @@ func (flags *ApplyFlags) ToOptions(cmd *cobra.Command, baseName string, args []s return nil, err } - dryRunVerifier := resource.NewDryRunVerifier(dynamicClient, flags.Factory.OpenAPIGetter()) + dryRunVerifier := resource.NewQueryParamVerifier(dynamicClient, flags.Factory.OpenAPIGetter(), resource.QueryParamDryRun) fieldManager := GetApplyFieldManagerFlag(cmd, serverSideApply) // allow for a success message operation to be specified at print time diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/apply/apply_set_last_applied.go b/staging/src/k8s.io/kubectl/pkg/cmd/apply/apply_set_last_applied.go index 3bf097a785c..86b49f4904a 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/apply/apply_set_last_applied.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/apply/apply_set_last_applied.go @@ -50,7 +50,7 @@ type SetLastAppliedOptions struct { namespace string enforceNamespace bool dryRunStrategy cmdutil.DryRunStrategy - dryRunVerifier *resource.DryRunVerifier + dryRunVerifier *resource.QueryParamVerifier shortOutput bool output string patchBufferList []PatchBuffer @@ -128,7 +128,7 @@ func (o *SetLastAppliedOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) if err != nil { return err } - o.dryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.dryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) o.output = cmdutil.GetFlagString(cmd, "output") o.shortOutput = o.output == "name" diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/autoscale/autoscale.go b/staging/src/k8s.io/kubectl/pkg/cmd/autoscale/autoscale.go index 4598cb478b9..72426a7d8d6 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/autoscale/autoscale.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/autoscale/autoscale.go @@ -73,7 +73,7 @@ type AutoscaleOptions struct { enforceNamespace bool namespace string dryRunStrategy cmdutil.DryRunStrategy - dryRunVerifier *resource.DryRunVerifier + dryRunVerifier *resource.QueryParamVerifier builder *resource.Builder fieldManager string @@ -145,7 +145,7 @@ func (o *AutoscaleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args if err != nil { return err } - o.dryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.dryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) o.createAnnotation = cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag) o.builder = f.NewBuilder() o.scaleKindResolver = scale.NewDiscoveryScaleKindResolver(discoveryClient) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create.go index e45215cc9ca..f26e9a0a814 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create.go @@ -52,7 +52,7 @@ type CreateOptions struct { RecordFlags *genericclioptions.RecordFlags DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier fieldManager string @@ -207,7 +207,7 @@ func (o *CreateOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error { if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) printer, err := o.PrintFlags.ToPrinter() if err != nil { @@ -344,7 +344,7 @@ type CreateSubcommandOptions struct { // StructuredGenerator is the resource generator for the object being created StructuredGenerator generate.StructuredGenerator DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier CreateAnnotation bool FieldManager string @@ -384,7 +384,7 @@ func (o *CreateSubcommandOptions) Complete(f cmdutil.Factory, cmd *cobra.Command if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) o.CreateAnnotation = cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_clusterrolebinding.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_clusterrolebinding.go index ec557081799..1115f79d8f5 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_clusterrolebinding.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_clusterrolebinding.go @@ -61,7 +61,7 @@ type ClusterRoleBindingOptions struct { Client rbacclientv1.RbacV1Interface DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier genericclioptions.IOStreams } @@ -139,7 +139,7 @@ func (o *ClusterRoleBindingOptions) Complete(f cmdutil.Factory, cmd *cobra.Comma if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) printer, err := o.PrintFlags.ToPrinter() diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_configmap.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_configmap.go index 5fba15e54b3..8d7837c92e7 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_configmap.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_configmap.go @@ -98,7 +98,7 @@ type ConfigMapOptions struct { Client corev1client.CoreV1Interface DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier genericclioptions.IOStreams } @@ -173,13 +173,12 @@ func (o *ConfigMapOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args if err != nil { return err } - discoveryClient, err := f.ToDiscoveryClient() if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, discoveryClient) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, discoveryClient, resource.QueryParamDryRun) o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace() if err != nil { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_cronjob.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_cronjob.go index da7500dc3f1..ba29705a0f9 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_cronjob.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_cronjob.go @@ -64,7 +64,7 @@ type CreateCronJobOptions struct { EnforceNamespace bool Client batchv1client.BatchV1Interface DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier Builder *resource.Builder FieldManager string CreateAnnotation bool @@ -150,7 +150,7 @@ func (o *CreateCronJobOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, a if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) printer, err := o.PrintFlags.ToPrinter() if err != nil { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_deployment.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_deployment.go index da3c70467fe..1b69cbc71b4 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_deployment.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_deployment.go @@ -74,7 +74,7 @@ type CreateDeploymentOptions struct { Client appsv1client.AppsV1Interface DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier genericclioptions.IOStreams } @@ -156,7 +156,7 @@ func (o *CreateDeploymentOptions) Complete(f cmdutil.Factory, cmd *cobra.Command if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) printer, err := o.PrintFlags.ToPrinter() diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_ingress.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_ingress.go index bd6a5d2ffd9..3906a91a256 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_ingress.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_ingress.go @@ -118,7 +118,7 @@ type CreateIngressOptions struct { Client networkingv1client.NetworkingV1Interface DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier FieldManager string @@ -198,7 +198,7 @@ func (o *CreateIngressOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, a if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) printer, err := o.PrintFlags.ToPrinter() diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_job.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_job.go index 44fd497a4cf..fbe686d4517 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_job.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_job.go @@ -66,7 +66,7 @@ type CreateJobOptions struct { EnforceNamespace bool Client batchv1client.BatchV1Interface DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier Builder *resource.Builder FieldManager string CreateAnnotation bool @@ -145,7 +145,7 @@ func (o *CreateJobOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) printer, err := o.PrintFlags.ToPrinter() if err != nil { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_namespace.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_namespace.go index cb7fdb7e0f4..a0e49b169f2 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_namespace.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_namespace.go @@ -19,6 +19,7 @@ package create import ( "context" "fmt" + "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -52,7 +53,7 @@ type NamespaceOptions struct { Name string DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier CreateAnnotation bool FieldManager string @@ -129,7 +130,7 @@ func (o *NamespaceOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, discoveryClient) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, discoveryClient, resource.QueryParamDryRun) o.CreateAnnotation = cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) printer, err := o.PrintFlags.ToPrinter() diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_pdb.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_pdb.go index c5db39fd516..e97a6e6e78c 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_pdb.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_pdb.go @@ -28,6 +28,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/cli-runtime/pkg/genericclioptions" + "k8s.io/cli-runtime/pkg/resource" resourcecli "k8s.io/cli-runtime/pkg/resource" policyv1client "k8s.io/client-go/kubernetes/typed/policy/v1" cmdutil "k8s.io/kubectl/pkg/cmd/util" @@ -71,7 +72,7 @@ type PodDisruptionBudgetOpts struct { Client *policyv1client.PolicyV1Client DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resourcecli.DryRunVerifier + DryRunVerifier *resourcecli.QueryParamVerifier genericclioptions.IOStreams } @@ -146,7 +147,7 @@ func (o *PodDisruptionBudgetOpts) Complete(f cmdutil.Factory, cmd *cobra.Command if err != nil { return err } - o.DryRunVerifier = resourcecli.NewDryRunVerifier(dynamicClient, discoveryClient) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, discoveryClient, resource.QueryParamDryRun) o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace() if err != nil { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_priorityclass.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_priorityclass.go index 4b54fd241a1..31c70b4e7be 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_priorityclass.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_priorityclass.go @@ -66,7 +66,7 @@ type PriorityClassOptions struct { Client *schedulingv1client.SchedulingV1Client DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier genericclioptions.IOStreams } @@ -138,7 +138,7 @@ func (o *PriorityClassOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, a if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) printer, err := o.PrintFlags.ToPrinter() diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_quota.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_quota.go index 6d67c38b0a6..3494c908bc6 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_quota.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_quota.go @@ -28,6 +28,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/cli-runtime/pkg/genericclioptions" + "k8s.io/cli-runtime/pkg/resource" resourcecli "k8s.io/cli-runtime/pkg/resource" coreclient "k8s.io/client-go/kubernetes/typed/core/v1" cmdutil "k8s.io/kubectl/pkg/cmd/util" @@ -67,7 +68,7 @@ type QuotaOpts struct { Client *coreclient.CoreV1Client DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resourcecli.DryRunVerifier + DryRunVerifier *resourcecli.QueryParamVerifier genericclioptions.IOStreams } @@ -136,7 +137,7 @@ func (o *QuotaOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, args []strin if err != nil { return err } - o.DryRunVerifier = resourcecli.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resourcecli.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace() if err != nil { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_role.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_role.go index 20b8876fe0e..1b4b2edd482 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_role.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_role.go @@ -137,7 +137,7 @@ type CreateRoleOptions struct { ResourceNames []string DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier OutputFormat string Namespace string EnforceNamespace bool @@ -258,7 +258,7 @@ func (o *CreateRoleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) o.OutputFormat = cmdutil.GetFlagString(cmd, "output") o.CreateAnnotation = cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_rolebinding.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_rolebinding.go index beef08b059e..fdef4cc72af 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_rolebinding.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_rolebinding.go @@ -63,7 +63,7 @@ type RoleBindingOptions struct { Client rbacclientv1.RbacV1Interface DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier genericclioptions.IOStreams } @@ -136,11 +136,11 @@ func (o *RoleBindingOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, arg if err != nil { return err } - dynamicCient, err := f.DynamicClient() + dynamicClient, err := f.DynamicClient() if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicCient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) printer, err := o.PrintFlags.ToPrinter() if err != nil { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret.go index be990fc8a19..346690ac8d9 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret.go @@ -114,7 +114,7 @@ type CreateSecretOptions struct { Client corev1client.CoreV1Interface DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier genericclioptions.IOStreams } @@ -195,7 +195,7 @@ func (o *CreateSecretOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, ar return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, discoveryClient) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, discoveryClient, resource.QueryParamDryRun) o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace() if err != nil { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret_docker.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret_docker.go index 6cf36b43a28..26fd5dd54d6 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret_docker.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret_docker.go @@ -110,7 +110,7 @@ type CreateSecretDockerRegistryOptions struct { Client corev1client.CoreV1Interface DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier genericclioptions.IOStreams } @@ -194,7 +194,7 @@ func (o *CreateSecretDockerRegistryOptions) Complete(f cmdutil.Factory, cmd *cob return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, discoveryClient) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, discoveryClient, resource.QueryParamDryRun) o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace() if err != nil { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret_tls.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret_tls.go index 11641c8b920..2091a32850b 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret_tls.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_secret_tls.go @@ -71,7 +71,7 @@ type CreateSecretTLSOptions struct { Client corev1client.CoreV1Interface DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier genericclioptions.IOStreams } @@ -151,7 +151,7 @@ func (o *CreateSecretTLSOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, discoveryClient) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, discoveryClient, resource.QueryParamDryRun) o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace() if err != nil { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_service.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_service.go index ff2f2b0bcf7..95f41fbdd20 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_service.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_service.go @@ -76,7 +76,7 @@ type ServiceOptions struct { Client corev1client.CoreV1Interface DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier genericclioptions.IOStreams } @@ -119,7 +119,7 @@ func (o *ServiceOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [] if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) printer, err := o.PrintFlags.ToPrinter() diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_serviceaccount.go b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_serviceaccount.go index f35649a694e..2bc7969374d 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/create/create_serviceaccount.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/create/create_serviceaccount.go @@ -53,7 +53,7 @@ type ServiceAccountOpts struct { // Name of resource being created Name string DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier CreateAnnotation bool FieldManager string @@ -128,7 +128,7 @@ func (o *ServiceAccountOpts) Complete(f cmdutil.Factory, cmd *cobra.Command, arg if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace() if err != nil { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/delete/delete.go b/staging/src/k8s.io/kubectl/pkg/cmd/delete/delete.go index cd3df4280b2..7af71a767d5 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/delete/delete.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/delete/delete.go @@ -121,7 +121,7 @@ type DeleteOptions struct { Timeout time.Duration DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier Output string @@ -195,7 +195,7 @@ func (o *DeleteOptions) Complete(f cmdutil.Factory, args []string, cmd *cobra.Co if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) if len(o.Raw) == 0 { r := f.NewBuilder(). diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/diff/diff.go b/staging/src/k8s.io/kubectl/pkg/cmd/diff/diff.go index 79c26075c1a..15aef59edfc 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/diff/diff.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/diff/diff.go @@ -112,7 +112,7 @@ type DiffOptions struct { OpenAPISchema openapi.Resources DiscoveryClient discovery.DiscoveryInterface DynamicClient dynamic.Interface - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier CmdNamespace string EnforceNamespace bool Builder *resource.Builder @@ -639,7 +639,7 @@ func (o *DiffOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(o.DynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(o.DynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) o.CmdNamespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace() if err != nil { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/drain/drain.go b/staging/src/k8s.io/kubectl/pkg/cmd/drain/drain.go index 31398362a1f..1f32a159771 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/drain/drain.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/drain/drain.go @@ -227,7 +227,7 @@ func (o *DrainCmdOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [ if err != nil { return err } - o.drainer.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.drainer.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) if o.drainer.Client, err = f.KubernetesClientSet(); err != nil { return err diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/expose/expose.go b/staging/src/k8s.io/kubectl/pkg/cmd/expose/expose.go index 7ba07fe2cf2..312c6efd78c 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/expose/expose.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/expose/expose.go @@ -91,7 +91,7 @@ type ExposeServiceOptions struct { PrintObj printers.ResourcePrinterFunc DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier EnforceNamespace bool fieldManager string @@ -181,7 +181,7 @@ func (o *ExposeServiceOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) e if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) printer, err := o.PrintFlags.ToPrinter() diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/label/label.go b/staging/src/k8s.io/kubectl/pkg/cmd/label/label.go index ac79e07bbfd..c1c65292560 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/label/label.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/label/label.go @@ -83,7 +83,7 @@ type LabelOptions struct { enforceNamespace bool builder *resource.Builder unstructuredClientForMapping func(mapping *meta.RESTMapping) (resource.RESTClient, error) - dryRunVerifier *resource.DryRunVerifier + dryRunVerifier *resource.QueryParamVerifier // Common shared fields genericclioptions.IOStreams @@ -185,7 +185,7 @@ func (o *LabelOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st if err != nil { return err } - o.dryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.dryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.dryRunStrategy) o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/patch/patch.go b/staging/src/k8s.io/kubectl/pkg/cmd/patch/patch.go index 457ce9df4a9..b39404961a4 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/patch/patch.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/patch/patch.go @@ -64,7 +64,7 @@ type PatchOptions struct { namespace string enforceNamespace bool dryRunStrategy cmdutil.DryRunStrategy - dryRunVerifier *resource.DryRunVerifier + dryRunVerifier *resource.QueryParamVerifier outputFormat string args []string builder *resource.Builder @@ -169,7 +169,7 @@ func (o *PatchOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st if err != nil { return err } - o.dryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.dryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) return nil } diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/replace/replace.go b/staging/src/k8s.io/kubectl/pkg/cmd/replace/replace.go index a5e33103bda..53c911b5d11 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/replace/replace.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/replace/replace.go @@ -75,7 +75,7 @@ type ReplaceOptions struct { DeleteOptions *delete.DeleteOptions DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier PrintObj func(obj runtime.Object) error @@ -156,7 +156,7 @@ func (o *ReplaceOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [] if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) printer, err := o.PrintFlags.ToPrinter() diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_undo.go b/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_undo.go index 267c01a1324..c12c55dd59d 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_undo.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_undo.go @@ -41,7 +41,7 @@ type UndoOptions struct { Builder func() *resource.Builder ToRevision int64 DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier Resources []string Namespace string LabelSelector string @@ -117,7 +117,7 @@ func (o *UndoOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []str if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) if o.Namespace, o.EnforceNamespace, err = f.ToRawKubeConfigLoader().Namespace(); err != nil { return err diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/run/run.go b/staging/src/k8s.io/kubectl/pkg/cmd/run/run.go index 627b8ef1071..e1d27a0d381 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/run/run.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/run/run.go @@ -109,7 +109,7 @@ type RunOptions struct { DeleteOptions *cmddelete.DeleteOptions DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier PrintObj func(runtime.Object) error Recorder genericclioptions.Recorder @@ -218,7 +218,7 @@ func (o *RunOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error { if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) attachFlag := cmd.Flags().Lookup("attach") if !attachFlag.Changed && o.Interactive { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/scale/scale.go b/staging/src/k8s.io/kubectl/pkg/cmd/scale/scale.go index dfe14e6c6b2..aedfd897155 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/scale/scale.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/scale/scale.go @@ -87,7 +87,7 @@ type ScaleOptions struct { unstructuredClientForMapping func(mapping *meta.RESTMapping) (resource.RESTClient, error) parent string dryRunStrategy cmdutil.DryRunStrategy - dryRunVerifier *resource.DryRunVerifier + dryRunVerifier *resource.QueryParamVerifier genericclioptions.IOStreams } @@ -158,7 +158,7 @@ func (o *ScaleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st if err != nil { return err } - o.dryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.dryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) o.namespace, o.enforceNamespace, err = f.ToRawKubeConfigLoader().Namespace() if err != nil { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/set/set_env.go b/staging/src/k8s.io/kubectl/pkg/cmd/set/set_env.go index a27dfc40a09..b45fcfde21b 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/set/set_env.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/set/set_env.go @@ -122,7 +122,7 @@ type EnvOptions struct { resources []string output string dryRunStrategy cmdutil.DryRunStrategy - dryRunVerifier *resource.DryRunVerifier + dryRunVerifier *resource.QueryParamVerifier builder func() *resource.Builder updatePodSpecForObject polymorphichelpers.UpdatePodSpecForObjectFunc namespace string @@ -233,7 +233,7 @@ func (o *EnvOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []stri if err != nil { return err } - o.dryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.dryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.dryRunStrategy) printer, err := o.PrintFlags.ToPrinter() diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/set/set_image.go b/staging/src/k8s.io/kubectl/pkg/cmd/set/set_image.go index c59ec1bdfe5..b3bbb311a0c 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/set/set_image.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/set/set_image.go @@ -47,7 +47,7 @@ type SetImageOptions struct { Infos []*resource.Info Selector string DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier All bool Output string Local bool @@ -158,7 +158,7 @@ func (o *SetImageOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [ if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) o.Output = cmdutil.GetFlagString(cmd, "output") o.ResolveImage = ImageResolver diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/set/set_resources.go b/staging/src/k8s.io/kubectl/pkg/cmd/set/set_resources.go index 0745108c243..a3caf4a80f4 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/set/set_resources.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/set/set_resources.go @@ -86,7 +86,7 @@ type SetResourcesOptions struct { UpdatePodSpecForObject polymorphichelpers.UpdatePodSpecForObjectFunc Resources []string - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier genericclioptions.IOStreams } @@ -161,7 +161,7 @@ func (o *SetResourcesOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, ar if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) printer, err := o.PrintFlags.ToPrinter() diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/set/set_selector.go b/staging/src/k8s.io/kubectl/pkg/cmd/set/set_selector.go index 62bd64ccc39..7fbd2122813 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/set/set_selector.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/set/set_selector.go @@ -45,7 +45,7 @@ type SetSelectorOptions struct { PrintFlags *genericclioptions.PrintFlags RecordFlags *genericclioptions.RecordFlags dryRunStrategy cmdutil.DryRunStrategy - dryRunVerifier *resource.DryRunVerifier + dryRunVerifier *resource.QueryParamVerifier fieldManager string // set by args @@ -140,7 +140,7 @@ func (o *SetSelectorOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, arg if err != nil { return err } - o.dryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.dryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) o.resources, o.selector, err = getResourcesAndSelector(args) if err != nil { diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/set/set_serviceaccount.go b/staging/src/k8s.io/kubectl/pkg/cmd/set/set_serviceaccount.go index bdaef2566ee..d037f5bed85 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/set/set_serviceaccount.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/set/set_serviceaccount.go @@ -63,7 +63,7 @@ type SetServiceAccountOptions struct { fileNameOptions resource.FilenameOptions dryRunStrategy cmdutil.DryRunStrategy - dryRunVerifier *resource.DryRunVerifier + dryRunVerifier *resource.QueryParamVerifier shortOutput bool all bool output string @@ -142,7 +142,7 @@ func (o *SetServiceAccountOptions) Complete(f cmdutil.Factory, cmd *cobra.Comman if err != nil { return err } - o.dryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.dryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) o.output = cmdutil.GetFlagString(cmd, "output") o.updatePodSpecForObject = polymorphichelpers.UpdatePodSpecForObjectFn diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/set/set_subject.go b/staging/src/k8s.io/kubectl/pkg/cmd/set/set_subject.go index b9979dd3c28..f6f6e79ae7d 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/set/set_subject.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/set/set_subject.go @@ -66,7 +66,7 @@ type SubjectOptions struct { Output string All bool DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier Local bool fieldManager string @@ -132,7 +132,7 @@ func (o *SubjectOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [] if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) printer, err := o.PrintFlags.ToPrinter() diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/taint/taint.go b/staging/src/k8s.io/kubectl/pkg/cmd/taint/taint.go index 403a05d8f63..f8273ac3d39 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/taint/taint.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/taint/taint.go @@ -48,7 +48,7 @@ type TaintOptions struct { ToPrinter func(string) (printers.ResourcePrinter, error) DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier resources []string taintsToAdd []v1.Taint @@ -147,7 +147,7 @@ func (o *TaintOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st if err != nil { return err } - o.DryRunVerifier = resource.NewDryRunVerifier(dynamicClient, f.OpenAPIGetter()) + o.DryRunVerifier = resource.NewQueryParamVerifier(dynamicClient, f.OpenAPIGetter(), resource.QueryParamDryRun) cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.DryRunStrategy) // retrieves resource and taint args from args diff --git a/staging/src/k8s.io/kubectl/pkg/drain/drain.go b/staging/src/k8s.io/kubectl/pkg/drain/drain.go index 53e7bfa628d..b36692eb4e4 100644 --- a/staging/src/k8s.io/kubectl/pkg/drain/drain.go +++ b/staging/src/k8s.io/kubectl/pkg/drain/drain.go @@ -83,7 +83,7 @@ type Helper struct { ErrOut io.Writer DryRunStrategy cmdutil.DryRunStrategy - DryRunVerifier *resource.DryRunVerifier + DryRunVerifier *resource.QueryParamVerifier // OnPodDeletedOrEvicted is called when a pod is evicted/deleted; for printing progress output OnPodDeletedOrEvicted func(pod *corev1.Pod, usingEviction bool)