diff --git a/pkg/kubectl/cmd/describe.go b/pkg/kubectl/cmd/describe.go index 75e17193e02..e783f8ec166 100644 --- a/pkg/kubectl/cmd/describe.go +++ b/pkg/kubectl/cmd/describe.go @@ -73,8 +73,8 @@ type DescribeOptions struct { Selector string Namespace string - Describer func(*meta.RESTMapping) (printers.Describer, error) - Builder *resource.Builder + Describer func(*meta.RESTMapping) (printers.Describer, error) + NewBuilder func() *resource.Builder BuilderArgs []string @@ -141,7 +141,7 @@ func (o *DescribeOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [ o.BuilderArgs = args o.Describer = f.Describer - o.Builder = f.NewBuilder() + o.NewBuilder = f.NewBuilder // include the uninitialized objects by default // unless user explicitly set --include-uninitialized=false @@ -154,7 +154,7 @@ func (o *DescribeOptions) Validate(args []string) error { } func (o *DescribeOptions) Run() error { - r := o.Builder. + r := o.NewBuilder(). Unstructured(). ContinueOnError(). NamespaceParam(o.Namespace).DefaultNamespace().AllNamespaces(o.AllNamespaces). @@ -212,7 +212,7 @@ func (o *DescribeOptions) Run() error { } func (o *DescribeOptions) DescribeMatchingResources(originalError error, resource, prefix string) error { - r := o.Builder. + r := o.NewBuilder(). Unstructured(). NamespaceParam(o.Namespace).DefaultNamespace(). ResourceTypeOrNameArgs(true, resource). diff --git a/pkg/kubectl/resource/builder.go b/pkg/kubectl/resource/builder.go index bdbbf9fc35d..0f0b53c905d 100644 --- a/pkg/kubectl/resource/builder.go +++ b/pkg/kubectl/resource/builder.go @@ -198,7 +198,7 @@ func (b *Builder) Unstructured() *Builder { b.errs = append(b.errs, fmt.Errorf("no unstructured mapper provided")) return b } - if b.mapper != nil { + if b.mapper != nil && b.mapper != b.unstructured { b.errs = append(b.errs, fmt.Errorf("another mapper was already selected, cannot use unstructured types")) return b } @@ -219,7 +219,7 @@ func (b *Builder) Internal(typer runtime.ObjectTyper) *Builder { b.errs = append(b.errs, fmt.Errorf("no internal mapper provided")) return b } - if b.mapper != nil { + if b.mapper != nil && b.mapper != b.internal { b.errs = append(b.errs, fmt.Errorf("another mapper was already selected, cannot use internal types")) return b }