diff --git a/pkg/kubectl/cmd/set/set_image.go b/pkg/kubectl/cmd/set/set_image.go index 83fa12171b0..779a94e382a 100644 --- a/pkg/kubectl/cmd/set/set_image.go +++ b/pkg/kubectl/cmd/set/set_image.go @@ -150,7 +150,15 @@ func (o *ImageOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st SelectorParam(o.Selector). ResourceTypeOrNameArgs(o.All, o.Resources...). Latest() + } else { + // if a --local flag was provided, and a resource was specified in the form + // /, fail immediately as --local cannot query the api server + // for the specified resource. + if len(o.Resources) > 0 { + return resource.LocalResourceError + } } + o.Infos, err = builder.Do().Infos() if err != nil { return err diff --git a/pkg/kubectl/cmd/set/set_resources.go b/pkg/kubectl/cmd/set/set_resources.go index e3cff84942c..f26d0876272 100644 --- a/pkg/kubectl/cmd/set/set_resources.go +++ b/pkg/kubectl/cmd/set/set_resources.go @@ -155,6 +155,13 @@ func (o *ResourcesOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args SelectorParam(o.Selector). ResourceTypeOrNameArgs(o.All, args...). Latest() + } else { + // if a --local flag was provided, and a resource was specified in the form + // /, fail immediately as --local cannot query the api server + // for the specified resource. + if len(args) > 0 { + return resource.LocalResourceError + } } o.Infos, err = builder.Do().Infos() diff --git a/pkg/kubectl/cmd/set/set_resources_test.go b/pkg/kubectl/cmd/set/set_resources_test.go index 204322c8854..16bd5300bef 100644 --- a/pkg/kubectl/cmd/set/set_resources_test.go +++ b/pkg/kubectl/cmd/set/set_resources_test.go @@ -60,7 +60,7 @@ func TestResourcesLocal(t *testing.T) { Requests: "cpu=200m,memory=512Mi", ContainerSelector: "*"} - err := opts.Complete(f, cmd, []string{""}) + err := opts.Complete(f, cmd, []string{}) if err == nil { err = opts.Validate() } diff --git a/pkg/kubectl/cmd/set/set_selector.go b/pkg/kubectl/cmd/set/set_selector.go index ae3f074099d..895daf0ee98 100644 --- a/pkg/kubectl/cmd/set/set_selector.go +++ b/pkg/kubectl/cmd/set/set_selector.go @@ -134,6 +134,13 @@ func (o *SelectorOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [ o.builder = o.builder. ResourceTypeOrNameArgs(o.all, o.resources...). Latest() + } else { + // if a --local flag was provided, and a resource was specified in the form + // /, fail immediately as --local cannot query the api server + // for the specified resource. + if len(o.resources) > 0 { + return resource.LocalResourceError + } } o.PrintObject = func(obj runtime.Object) error { diff --git a/pkg/kubectl/cmd/set/set_subject.go b/pkg/kubectl/cmd/set/set_subject.go index 791021b9b2f..7e148048e51 100644 --- a/pkg/kubectl/cmd/set/set_subject.go +++ b/pkg/kubectl/cmd/set/set_subject.go @@ -137,7 +137,15 @@ func (o *SubjectOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [] SelectorParam(o.Selector). ResourceTypeOrNameArgs(o.All, args...). Latest() + } else { + // if a --local flag was provided, and a resource was specified in the form + // /, fail immediately as --local cannot query the api server + // for the specified resource. + if len(args) > 0 { + return resource.LocalResourceError + } } + o.Infos, err = builder.Do().Infos() if err != nil { return err diff --git a/pkg/kubectl/resource/builder.go b/pkg/kubectl/resource/builder.go index 8908bc2ef30..70a60937818 100644 --- a/pkg/kubectl/resource/builder.go +++ b/pkg/kubectl/resource/builder.go @@ -17,6 +17,7 @@ limitations under the License. package resource import ( + "errors" "fmt" "io" "net/url" @@ -88,6 +89,11 @@ Example resource specifications include: ' ' ''`) +var LocalResourceError = errors.New(`error: you must specify resources by --filename when --local is set. +Example resource specifications include: + '-f rsrc.yaml' + '--filename=rsrc.json'`) + // TODO: expand this to include other errors. func IsUsageError(err error) bool { if err == nil {