Merge pull request #114252 from ardaguclu/scale-piped-input

kubectl scale: Use visitor only once

Kubernetes-commit: 9758911fd5e778f7686b2602d2e0d88ad061d24b
This commit is contained in:
Kubernetes Publisher 2022-12-10 07:55:19 -08:00
commit 85b1dc79cd
1 changed files with 26 additions and 26 deletions

View File

@ -144,16 +144,18 @@ func (o *ScaleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st
if err != nil { if err != nil {
return err return err
} }
o.dryRunStrategy, err = cmdutil.GetDryRunStrategy(cmd)
if err != nil {
return err
}
cmdutil.PrintFlagsWithDryRunStrategy(o.PrintFlags, o.dryRunStrategy)
printer, err := o.PrintFlags.ToPrinter() printer, err := o.PrintFlags.ToPrinter()
if err != nil { if err != nil {
return err return err
} }
o.PrintObj = printer.PrintObj o.PrintObj = printer.PrintObj
o.dryRunStrategy, err = cmdutil.GetDryRunStrategy(cmd)
if err != nil {
return err
}
dynamicClient, err := f.DynamicClient() dynamicClient, err := f.DynamicClient()
if err != nil { if err != nil {
return err return err
@ -209,13 +211,11 @@ func (o *ScaleOptions) RunScale() error {
return err return err
} }
infos := []*resource.Info{} // We don't immediately return infoErr if it is not nil.
r.Visit(func(info *resource.Info, err error) error { // Because we want to proceed for other valid resources and
if err == nil { // at the end of the function, we'll return this
infos = append(infos, info) // to show invalid resources to the user.
} infos, infoErr := r.Infos()
return nil
})
if len(o.ResourceVersion) != 0 && len(infos) > 1 { if len(o.ResourceVersion) != 0 && len(infos) > 1 {
return fmt.Errorf("cannot use --resource-version with multiple resources") return fmt.Errorf("cannot use --resource-version with multiple resources")
@ -234,17 +234,19 @@ func (o *ScaleOptions) RunScale() error {
waitForReplicas = scale.NewRetryParams(1*time.Second, o.Timeout) waitForReplicas = scale.NewRetryParams(1*time.Second, o.Timeout)
} }
counter := 0 if len(infos) == 0 {
err = r.Visit(func(info *resource.Info, err error) error { return fmt.Errorf("no objects passed to scale")
if err != nil {
return err
} }
counter++
for _, info := range infos {
mapping := info.ResourceMapping() mapping := info.ResourceMapping()
if o.dryRunStrategy == cmdutil.DryRunClient { if o.dryRunStrategy == cmdutil.DryRunClient {
return o.PrintObj(info.Object, o.Out) if err := o.PrintObj(info.Object, o.Out); err != nil {
return err
} }
continue
}
if err := o.scaler.Scale(info.Namespace, info.Name, uint(o.Replicas), precondition, retry, waitForReplicas, mapping.Resource, o.dryRunStrategy == cmdutil.DryRunServer); err != nil { if err := o.scaler.Scale(info.Namespace, info.Name, uint(o.Replicas), precondition, retry, waitForReplicas, mapping.Resource, o.dryRunStrategy == cmdutil.DryRunServer); err != nil {
return err return err
} }
@ -263,15 +265,13 @@ func (o *ScaleOptions) RunScale() error {
} }
} }
return o.PrintObj(info.Object, o.Out) err := o.PrintObj(info.Object, o.Out)
})
if err != nil { if err != nil {
return err return err
} }
if counter == 0 {
return fmt.Errorf("no objects passed to scale")
} }
return nil
return infoErr
} }
func scaler(f cmdutil.Factory) (scale.Scaler, error) { func scaler(f cmdutil.Factory) (scale.Scaler, error) {