mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-11-02 23:02:25 +00:00 
			
		
		
		
	Refactor pkg/kubectl/{scale.go|rollingupdater.go} for move to staging
This commit is contained in:
		@@ -106,7 +106,6 @@ pkg/credentialprovider/gcp
 | 
			
		||||
pkg/features
 | 
			
		||||
pkg/kubeapiserver
 | 
			
		||||
pkg/kubeapiserver/options
 | 
			
		||||
pkg/kubectl
 | 
			
		||||
pkg/kubectl/cmd/annotate
 | 
			
		||||
pkg/kubectl/cmd/apply
 | 
			
		||||
pkg/kubectl/cmd/attach
 | 
			
		||||
@@ -536,6 +535,7 @@ staging/src/k8s.io/kubectl/pkg/generate
 | 
			
		||||
staging/src/k8s.io/kubectl/pkg/generate/versioned
 | 
			
		||||
staging/src/k8s.io/kubectl/pkg/metricsutil
 | 
			
		||||
staging/src/k8s.io/kubectl/pkg/polymorphichelpers
 | 
			
		||||
staging/src/k8s.io/kubectl/pkg/scale
 | 
			
		||||
staging/src/k8s.io/kubectl/pkg/util/templates
 | 
			
		||||
staging/src/k8s.io/kubelet/config/v1beta1
 | 
			
		||||
staging/src/k8s.io/legacy-cloud-providers/vsphere
 | 
			
		||||
 
 | 
			
		||||
@@ -1,70 +1,21 @@
 | 
			
		||||
package(default_visibility = ["//visibility:public"])
 | 
			
		||||
 | 
			
		||||
load(
 | 
			
		||||
    "@io_bazel_rules_go//go:def.bzl",
 | 
			
		||||
    "go_library",
 | 
			
		||||
    "go_test",
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go_test(
 | 
			
		||||
    name = "go_default_test",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "rolling_updater_test.go",
 | 
			
		||||
        "scale_test.go",
 | 
			
		||||
    ],
 | 
			
		||||
    embed = [":go_default_library"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//staging/src/k8s.io/api/autoscaling/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/api/core/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/apis/testapigroup/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/rest:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/rest/fake:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/scale:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/scale/fake:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/testing:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/scheme:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/util:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "conditions.go",
 | 
			
		||||
        "doc.go",
 | 
			
		||||
        "rolling_updater.go",
 | 
			
		||||
        "scale.go",
 | 
			
		||||
    ],
 | 
			
		||||
    importpath = "k8s.io/kubernetes/pkg/kubectl",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//staging/src/k8s.io/api/autoscaling/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/api/core/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/scale:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/util/retry:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/util:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/util/deployment:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/util/podutils:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/integer:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/pointer:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -84,4 +35,5 @@ filegroup(
 | 
			
		||||
        "//pkg/kubectl/proxy:all-srcs",
 | 
			
		||||
    ],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -2,39 +2,72 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = ["rollingupdate.go"],
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "rolling_updater.go",
 | 
			
		||||
        "rollingupdate.go",
 | 
			
		||||
    ],
 | 
			
		||||
    importpath = "k8s.io/kubernetes/pkg/kubectl/cmd/rollingupdate",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/kubectl:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/api/core/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/cli-runtime/pkg/printers:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/scale:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/util/retry:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/cmd/util:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/scale:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/scheme:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/util:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/util/deployment:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/util/i18n:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/util/podutils:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/util/templates:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/validation:go_default_library",
 | 
			
		||||
        "//vendor/github.com/spf13/cobra:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/klog:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/integer:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/utils/pointer:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go_test(
 | 
			
		||||
    name = "go_default_test",
 | 
			
		||||
    srcs = ["rollingupdate_test.go"],
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "rolling_updater_test.go",
 | 
			
		||||
        "rollingupdate_test.go",
 | 
			
		||||
    ],
 | 
			
		||||
    embed = [":go_default_library"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/kubectl/cmd/testing:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/api/core/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/rest:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/rest/fake:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/testing:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/scale:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/scheme:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/util:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package kubectl
 | 
			
		||||
package rollingupdate
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
@@ -34,6 +34,7 @@ import (
 | 
			
		||||
	corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
 | 
			
		||||
	scaleclient "k8s.io/client-go/scale"
 | 
			
		||||
	"k8s.io/client-go/util/retry"
 | 
			
		||||
	"k8s.io/kubectl/pkg/scale"
 | 
			
		||||
	"k8s.io/kubectl/pkg/util"
 | 
			
		||||
	deploymentutil "k8s.io/kubectl/pkg/util/deployment"
 | 
			
		||||
	"k8s.io/kubectl/pkg/util/podutils"
 | 
			
		||||
@@ -128,7 +129,7 @@ type RollingUpdater struct {
 | 
			
		||||
	// Namespace for resources
 | 
			
		||||
	ns string
 | 
			
		||||
	// scaleAndWait scales a controller and returns its updated state.
 | 
			
		||||
	scaleAndWait func(rc *corev1.ReplicationController, retry *RetryParams, wait *RetryParams) (*corev1.ReplicationController, error)
 | 
			
		||||
	scaleAndWait func(rc *corev1.ReplicationController, retry *scale.RetryParams, wait *scale.RetryParams) (*corev1.ReplicationController, error)
 | 
			
		||||
	//getOrCreateTargetController gets and validates an existing controller or
 | 
			
		||||
	//makes a new one.
 | 
			
		||||
	getOrCreateTargetController func(controller *corev1.ReplicationController, sourceID string) (*corev1.ReplicationController, bool, error)
 | 
			
		||||
@@ -180,7 +181,7 @@ func NewRollingUpdater(namespace string, rcClient corev1client.ReplicationContro
 | 
			
		||||
func (r *RollingUpdater) Update(config *RollingUpdaterConfig) error {
 | 
			
		||||
	out := config.Out
 | 
			
		||||
	oldRc := config.OldRc
 | 
			
		||||
	scaleRetryParams := NewRetryParams(config.Interval, config.Timeout)
 | 
			
		||||
	scaleRetryParams := scale.NewRetryParams(config.Interval, config.Timeout)
 | 
			
		||||
 | 
			
		||||
	// Find an existing controller (for continuing an interrupted update) or
 | 
			
		||||
	// create a new one if necessary.
 | 
			
		||||
@@ -321,7 +322,7 @@ func (r *RollingUpdater) Update(config *RollingUpdaterConfig) error {
 | 
			
		||||
// scaleUp scales up newRc to desired by whatever increment is possible given
 | 
			
		||||
// the configured surge threshold. scaleUp will safely no-op as necessary when
 | 
			
		||||
// it detects redundancy or other relevant conditions.
 | 
			
		||||
func (r *RollingUpdater) scaleUp(newRc, oldRc *corev1.ReplicationController, desired, maxSurge, maxUnavailable int32, scaleRetryParams *RetryParams, config *RollingUpdaterConfig) (*corev1.ReplicationController, error) {
 | 
			
		||||
func (r *RollingUpdater) scaleUp(newRc, oldRc *corev1.ReplicationController, desired, maxSurge, maxUnavailable int32, scaleRetryParams *scale.RetryParams, config *RollingUpdaterConfig) (*corev1.ReplicationController, error) {
 | 
			
		||||
	// If we're already at the desired, do nothing.
 | 
			
		||||
	if valOrZero(newRc.Spec.Replicas) == desired {
 | 
			
		||||
		return newRc, nil
 | 
			
		||||
@@ -398,7 +399,10 @@ func (r *RollingUpdater) scaleDown(newRc, oldRc *corev1.ReplicationController, d
 | 
			
		||||
	}
 | 
			
		||||
	// Perform the scale-down.
 | 
			
		||||
	fmt.Fprintf(config.Out, "Scaling %s down to %d\n", oldRc.Name, valOrZero(oldRc.Spec.Replicas))
 | 
			
		||||
	retryWait := &RetryParams{config.Interval, config.Timeout}
 | 
			
		||||
	retryWait := &scale.RetryParams{
 | 
			
		||||
		Interval: config.Interval,
 | 
			
		||||
		Timeout:  config.Timeout,
 | 
			
		||||
	}
 | 
			
		||||
	scaledRc, err := r.scaleAndWait(oldRc, retryWait, retryWait)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
@@ -407,9 +411,9 @@ func (r *RollingUpdater) scaleDown(newRc, oldRc *corev1.ReplicationController, d
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// scalerScaleAndWait scales a controller using a Scaler and a real client.
 | 
			
		||||
func (r *RollingUpdater) scaleAndWaitWithScaler(rc *corev1.ReplicationController, retry *RetryParams, wait *RetryParams) (*corev1.ReplicationController, error) {
 | 
			
		||||
	scaler := NewScaler(r.scaleClient)
 | 
			
		||||
	if err := scaler.Scale(rc.Namespace, rc.Name, uint(valOrZero(rc.Spec.Replicas)), &ScalePrecondition{-1, ""}, retry, wait, schema.GroupResource{Resource: "replicationcontrollers"}); err != nil {
 | 
			
		||||
func (r *RollingUpdater) scaleAndWaitWithScaler(rc *corev1.ReplicationController, retry *scale.RetryParams, wait *scale.RetryParams) (*corev1.ReplicationController, error) {
 | 
			
		||||
	scaler := scale.NewScaler(r.scaleClient)
 | 
			
		||||
	if err := scaler.Scale(rc.Namespace, rc.Name, uint(valOrZero(rc.Spec.Replicas)), &scale.ScalePrecondition{Size: -1, ResourceVersion: ""}, retry, wait, schema.GroupResource{Resource: "replicationcontrollers"}); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return r.rcClient.ReplicationControllers(rc.Namespace).Get(rc.Name, metav1.GetOptions{})
 | 
			
		||||
@@ -520,7 +524,7 @@ func (r *RollingUpdater) cleanupWithClients(oldRc, newRc *corev1.ReplicationCont
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err = wait.Poll(config.Interval, config.Timeout, ControllerHasDesiredReplicas(r.rcClient, newRc)); err != nil {
 | 
			
		||||
	if err = wait.Poll(config.Interval, config.Timeout, controllerHasDesiredReplicas(r.rcClient, newRc)); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	newRc, err = r.rcClient.ReplicationControllers(r.ns).Get(newRc.Name, metav1.GetOptions{})
 | 
			
		||||
@@ -838,3 +842,24 @@ func FindSourceController(r corev1client.ReplicationControllersGetter, namespace
 | 
			
		||||
	}
 | 
			
		||||
	return nil, fmt.Errorf("couldn't find a replication controller with source id == %s/%s", namespace, name)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// controllerHasDesiredReplicas returns a condition that will be true if and only if
 | 
			
		||||
// the desired replica count for a controller's ReplicaSelector equals the Replicas count.
 | 
			
		||||
func controllerHasDesiredReplicas(rcClient corev1client.ReplicationControllersGetter, controller *corev1.ReplicationController) wait.ConditionFunc {
 | 
			
		||||
 | 
			
		||||
	// If we're given a controller where the status lags the spec, it either means that the controller is stale,
 | 
			
		||||
	// or that the rc manager hasn't noticed the update yet. Polling status.Replicas is not safe in the latter case.
 | 
			
		||||
	desiredGeneration := controller.Generation
 | 
			
		||||
 | 
			
		||||
	return func() (bool, error) {
 | 
			
		||||
		ctrl, err := rcClient.ReplicationControllers(controller.Namespace).Get(controller.Name, metav1.GetOptions{})
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return false, err
 | 
			
		||||
		}
 | 
			
		||||
		// There's a chance a concurrent update modifies the Spec.Replicas causing this check to pass,
 | 
			
		||||
		// or, after this check has passed, a modification causes the rc manager to create more pods.
 | 
			
		||||
		// This will not be an issue once we've implemented graceful delete for rcs, but till then
 | 
			
		||||
		// concurrent stop operations on the same rc might have unintended side effects.
 | 
			
		||||
		return ctrl.Status.ObservedGeneration >= desiredGeneration && ctrl.Status.Replicas == valOrZero(ctrl.Spec.Replicas), nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package kubectl
 | 
			
		||||
package rollingupdate
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
@@ -40,6 +40,7 @@ import (
 | 
			
		||||
	restclient "k8s.io/client-go/rest"
 | 
			
		||||
	manualfake "k8s.io/client-go/rest/fake"
 | 
			
		||||
	testcore "k8s.io/client-go/testing"
 | 
			
		||||
	"k8s.io/kubectl/pkg/scale"
 | 
			
		||||
	"k8s.io/kubectl/pkg/scheme"
 | 
			
		||||
	"k8s.io/kubectl/pkg/util"
 | 
			
		||||
)
 | 
			
		||||
@@ -790,7 +791,7 @@ Scaling foo-v2 up to 2
 | 
			
		||||
			t.Logf("running test %d (%s) (up: %v, down: %v, oldReady: %v, newReady: %v)", i, tt.name, upTo, downTo, oldReady, newReady)
 | 
			
		||||
			updater := &RollingUpdater{
 | 
			
		||||
				ns: "default",
 | 
			
		||||
				scaleAndWait: func(rc *corev1.ReplicationController, retry *RetryParams, wait *RetryParams) (*corev1.ReplicationController, error) {
 | 
			
		||||
				scaleAndWait: func(rc *corev1.ReplicationController, retry *scale.RetryParams, wait *scale.RetryParams) (*corev1.ReplicationController, error) {
 | 
			
		||||
					// Return a scale up or scale down expectation depending on the rc,
 | 
			
		||||
					// and throw errors if there is no expectation expressed for this
 | 
			
		||||
					// call.
 | 
			
		||||
@@ -861,7 +862,7 @@ func TestUpdate_progressTimeout(t *testing.T) {
 | 
			
		||||
	newRc := newRc(0, 2)
 | 
			
		||||
	updater := &RollingUpdater{
 | 
			
		||||
		ns: "default",
 | 
			
		||||
		scaleAndWait: func(rc *corev1.ReplicationController, retry *RetryParams, wait *RetryParams) (*corev1.ReplicationController, error) {
 | 
			
		||||
		scaleAndWait: func(rc *corev1.ReplicationController, retry *scale.RetryParams, wait *scale.RetryParams) (*corev1.ReplicationController, error) {
 | 
			
		||||
			// Do nothing.
 | 
			
		||||
			return rc, nil
 | 
			
		||||
		},
 | 
			
		||||
@@ -906,7 +907,7 @@ func TestUpdate_assignOriginalAnnotation(t *testing.T) {
 | 
			
		||||
		rcClient:  fake.CoreV1(),
 | 
			
		||||
		podClient: fake.CoreV1(),
 | 
			
		||||
		ns:        "default",
 | 
			
		||||
		scaleAndWait: func(rc *corev1.ReplicationController, retry *RetryParams, wait *RetryParams) (*corev1.ReplicationController, error) {
 | 
			
		||||
		scaleAndWait: func(rc *corev1.ReplicationController, retry *scale.RetryParams, wait *scale.RetryParams) (*corev1.ReplicationController, error) {
 | 
			
		||||
			return rc, nil
 | 
			
		||||
		},
 | 
			
		||||
		getOrCreateTargetController: func(controller *corev1.ReplicationController, sourceID string) (*corev1.ReplicationController, bool, error) {
 | 
			
		||||
@@ -40,7 +40,6 @@ import (
 | 
			
		||||
	"k8s.io/kubectl/pkg/util/i18n"
 | 
			
		||||
	"k8s.io/kubectl/pkg/util/templates"
 | 
			
		||||
	"k8s.io/kubectl/pkg/validation"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubectl"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
@@ -255,11 +254,11 @@ func (o *RollingUpdateOptions) Run() error {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		// We're in the middle of a rename, look for an RC with a source annotation of oldName
 | 
			
		||||
		newRc, err := kubectl.FindSourceController(coreClient, o.Namespace, o.OldName)
 | 
			
		||||
		newRc, err := FindSourceController(coreClient, o.Namespace, o.OldName)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		return kubectl.Rename(coreClient, newRc, o.OldName)
 | 
			
		||||
		return Rename(coreClient, newRc, o.OldName)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var replicasDefaulted bool
 | 
			
		||||
@@ -311,7 +310,7 @@ func (o *RollingUpdateOptions) Run() error {
 | 
			
		||||
	if len(o.Image) != 0 {
 | 
			
		||||
		codec := scheme.Codecs.LegacyCodec(corev1.SchemeGroupVersion)
 | 
			
		||||
		newName := o.FindNewName(oldRc)
 | 
			
		||||
		if newRc, err = kubectl.LoadExistingNextReplicationController(coreClient, o.Namespace, newName); err != nil {
 | 
			
		||||
		if newRc, err = LoadExistingNextReplicationController(coreClient, o.Namespace, newName); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		if newRc != nil {
 | 
			
		||||
@@ -320,7 +319,7 @@ func (o *RollingUpdateOptions) Run() error {
 | 
			
		||||
			}
 | 
			
		||||
			fmt.Fprintf(o.Out, "Found existing update in progress (%s), resuming.\n", newRc.Name)
 | 
			
		||||
		} else {
 | 
			
		||||
			config := &kubectl.NewControllerConfig{
 | 
			
		||||
			config := &NewControllerConfig{
 | 
			
		||||
				Namespace:     o.Namespace,
 | 
			
		||||
				OldName:       o.OldName,
 | 
			
		||||
				NewName:       newName,
 | 
			
		||||
@@ -334,7 +333,7 @@ func (o *RollingUpdateOptions) Run() error {
 | 
			
		||||
				}
 | 
			
		||||
				config.PullPolicy = corev1.PullPolicy(o.PullPolicy)
 | 
			
		||||
			}
 | 
			
		||||
			newRc, err = kubectl.CreateNewControllerFromCurrentController(coreClient, codec, config)
 | 
			
		||||
			newRc, err = CreateNewControllerFromCurrentController(coreClient, codec, config)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
@@ -347,7 +346,7 @@ func (o *RollingUpdateOptions) Run() error {
 | 
			
		||||
		}
 | 
			
		||||
		// If new image is same as old, the hash may not be distinct, so add a suffix.
 | 
			
		||||
		oldHash += "-orig"
 | 
			
		||||
		oldRc, err = kubectl.UpdateExistingReplicationController(coreClient, coreClient, oldRc, o.Namespace, newRc.Name, o.DeploymentKey, oldHash, o.Out)
 | 
			
		||||
		oldRc, err = UpdateExistingReplicationController(coreClient, coreClient, oldRc, o.Namespace, newRc.Name, o.DeploymentKey, oldHash, o.Out)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
@@ -355,7 +354,7 @@ func (o *RollingUpdateOptions) Run() error {
 | 
			
		||||
 | 
			
		||||
	if o.Rollback {
 | 
			
		||||
		newName := o.FindNewName(oldRc)
 | 
			
		||||
		if newRc, err = kubectl.LoadExistingNextReplicationController(coreClient, o.Namespace, newName); err != nil {
 | 
			
		||||
		if newRc, err = LoadExistingNextReplicationController(coreClient, o.Namespace, newName); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -369,7 +368,7 @@ func (o *RollingUpdateOptions) Run() error {
 | 
			
		||||
			filename, o.OldName)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	updater := kubectl.NewRollingUpdater(newRc.Namespace, coreClient, coreClient, o.ScaleClient)
 | 
			
		||||
	updater := NewRollingUpdater(newRc.Namespace, coreClient, coreClient, o.ScaleClient)
 | 
			
		||||
 | 
			
		||||
	// To successfully pull off a rolling update the new and old rc have to differ
 | 
			
		||||
	// by at least one selector. Every new pod should have the selector and every
 | 
			
		||||
@@ -412,11 +411,11 @@ func (o *RollingUpdateOptions) Run() error {
 | 
			
		||||
		fmt.Fprintf(o.Out, "Rolling from:\n%s\nTo:\n%s\n", string(oldRcData.Bytes()), string(newRcData.Bytes()))
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	updateCleanupPolicy := kubectl.DeleteRollingUpdateCleanupPolicy
 | 
			
		||||
	updateCleanupPolicy := DeleteRollingUpdateCleanupPolicy
 | 
			
		||||
	if o.KeepOldName {
 | 
			
		||||
		updateCleanupPolicy = kubectl.RenameRollingUpdateCleanupPolicy
 | 
			
		||||
		updateCleanupPolicy = RenameRollingUpdateCleanupPolicy
 | 
			
		||||
	}
 | 
			
		||||
	config := &kubectl.RollingUpdaterConfig{
 | 
			
		||||
	config := &RollingUpdaterConfig{
 | 
			
		||||
		Out:            o.Out,
 | 
			
		||||
		OldRc:          oldRc,
 | 
			
		||||
		NewRc:          newRc,
 | 
			
		||||
@@ -428,7 +427,7 @@ func (o *RollingUpdateOptions) Run() error {
 | 
			
		||||
		MaxSurge:       intstr.FromInt(1),
 | 
			
		||||
	}
 | 
			
		||||
	if o.Rollback {
 | 
			
		||||
		err = kubectl.AbortRollingUpdate(config)
 | 
			
		||||
		err = AbortRollingUpdate(config)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
@@ -462,7 +461,7 @@ func findNewName(args []string, oldRc *corev1.ReplicationController) string {
 | 
			
		||||
		return args[1]
 | 
			
		||||
	}
 | 
			
		||||
	if oldRc != nil {
 | 
			
		||||
		newName, _ := kubectl.GetNextControllerAnnotation(oldRc)
 | 
			
		||||
		newName, _ := GetNextControllerAnnotation(oldRc)
 | 
			
		||||
		return newName
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,6 @@ go_library(
 | 
			
		||||
    importpath = "k8s.io/kubernetes/pkg/kubectl/cmd/scale",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//pkg/kubectl:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library",
 | 
			
		||||
@@ -14,6 +13,7 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/cli-runtime/pkg/resource:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/cmd/util:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/scale:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/util/i18n:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/util/templates:go_default_library",
 | 
			
		||||
        "//vendor/github.com/spf13/cobra:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -30,9 +30,9 @@ import (
 | 
			
		||||
	"k8s.io/cli-runtime/pkg/resource"
 | 
			
		||||
	"k8s.io/client-go/kubernetes"
 | 
			
		||||
	cmdutil "k8s.io/kubectl/pkg/cmd/util"
 | 
			
		||||
	"k8s.io/kubectl/pkg/scale"
 | 
			
		||||
	"k8s.io/kubectl/pkg/util/i18n"
 | 
			
		||||
	"k8s.io/kubectl/pkg/util/templates"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubectl"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
@@ -86,7 +86,7 @@ type ScaleOptions struct {
 | 
			
		||||
	args                         []string
 | 
			
		||||
	shortOutput                  bool
 | 
			
		||||
	clientSet                    kubernetes.Interface
 | 
			
		||||
	scaler                       kubectl.Scaler
 | 
			
		||||
	scaler                       scale.Scaler
 | 
			
		||||
	unstructuredClientForMapping func(mapping *meta.RESTMapping) (resource.RESTClient, error)
 | 
			
		||||
	parent                       string
 | 
			
		||||
 | 
			
		||||
@@ -209,15 +209,15 @@ func (o *ScaleOptions) RunScale() error {
 | 
			
		||||
 | 
			
		||||
	// only set a precondition if the user has requested one.  A nil precondition means we can do a blind update, so
 | 
			
		||||
	// we avoid a Scale GET that may or may not succeed
 | 
			
		||||
	var precondition *kubectl.ScalePrecondition
 | 
			
		||||
	var precondition *scale.ScalePrecondition
 | 
			
		||||
	if o.CurrentReplicas != -1 || len(o.ResourceVersion) > 0 {
 | 
			
		||||
		precondition = &kubectl.ScalePrecondition{Size: o.CurrentReplicas, ResourceVersion: o.ResourceVersion}
 | 
			
		||||
		precondition = &scale.ScalePrecondition{Size: o.CurrentReplicas, ResourceVersion: o.ResourceVersion}
 | 
			
		||||
	}
 | 
			
		||||
	retry := kubectl.NewRetryParams(1*time.Second, 5*time.Minute)
 | 
			
		||||
	retry := scale.NewRetryParams(1*time.Second, 5*time.Minute)
 | 
			
		||||
 | 
			
		||||
	var waitForReplicas *kubectl.RetryParams
 | 
			
		||||
	var waitForReplicas *scale.RetryParams
 | 
			
		||||
	if o.Timeout != 0 {
 | 
			
		||||
		waitForReplicas = kubectl.NewRetryParams(1*time.Second, timeout)
 | 
			
		||||
		waitForReplicas = scale.NewRetryParams(1*time.Second, timeout)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	counter := 0
 | 
			
		||||
@@ -257,11 +257,11 @@ func (o *ScaleOptions) RunScale() error {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func scaler(f cmdutil.Factory) (kubectl.Scaler, error) {
 | 
			
		||||
func scaler(f cmdutil.Factory) (scale.Scaler, error) {
 | 
			
		||||
	scalesGetter, err := cmdutil.ScaleClientFn(f)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return kubectl.NewScaler(scalesGetter), nil
 | 
			
		||||
	return scale.NewScaler(scalesGetter), nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,13 @@ import (
 | 
			
		||||
	corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func valOrZero(val *int32) int32 {
 | 
			
		||||
	if val == nil {
 | 
			
		||||
		return int32(0)
 | 
			
		||||
	}
 | 
			
		||||
	return *val
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ControllerHasDesiredReplicas returns a condition that will be true if and only if
 | 
			
		||||
// the desired replica count for a controller's ReplicaSelector equals the Replicas count.
 | 
			
		||||
func ControllerHasDesiredReplicas(rcClient corev1client.ReplicationControllersGetter, controller *corev1.ReplicationController) wait.ConditionFunc {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,7 @@ filegroup(
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/metricsutil:all-srcs",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/polymorphichelpers:all-srcs",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/rawhttp:all-srcs",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/scale:all-srcs",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/scheme:all-srcs",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/util:all-srcs",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/validation:all-srcs",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								staging/src/k8s.io/kubectl/pkg/scale/BUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								staging/src/k8s.io/kubectl/pkg/scale/BUILD
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = ["scale.go"],
 | 
			
		||||
    importmap = "k8s.io/kubernetes/vendor/k8s.io/kubectl/pkg/scale",
 | 
			
		||||
    importpath = "k8s.io/kubectl/pkg/scale",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//staging/src/k8s.io/api/autoscaling/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/scale:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go_test(
 | 
			
		||||
    name = "go_default_test",
 | 
			
		||||
    srcs = ["scale_test.go"],
 | 
			
		||||
    embed = [":go_default_library"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//staging/src/k8s.io/api/autoscaling/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/apis/testapigroup/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/scale:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/scale/fake:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/testing:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [":package-srcs"],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package kubectl
 | 
			
		||||
package scale
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package kubectl
 | 
			
		||||
package scale
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
@@ -32,7 +32,6 @@ go_library(
 | 
			
		||||
        "//pkg/apis/core:go_default_library",
 | 
			
		||||
        "//pkg/apis/extensions:go_default_library",
 | 
			
		||||
        "//pkg/controller/deployment/util:go_default_library",
 | 
			
		||||
        "//pkg/kubectl:go_default_library",
 | 
			
		||||
        "//pkg/util/labels:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/api/apps/v1:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/api/auditregistration/v1alpha1:go_default_library",
 | 
			
		||||
@@ -63,6 +62,7 @@ go_library(
 | 
			
		||||
        "//staging/src/k8s.io/client-go/tools/cache:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/util/cert:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/client-go/util/workqueue:go_default_library",
 | 
			
		||||
        "//staging/src/k8s.io/kubectl/pkg/scale:go_default_library",
 | 
			
		||||
        "//vendor/github.com/davecgh/go-spew/spew:go_default_library",
 | 
			
		||||
        "//vendor/github.com/pkg/errors:go_default_library",
 | 
			
		||||
        "//vendor/github.com/stretchr/testify/require:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -22,13 +22,13 @@ import (
 | 
			
		||||
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/wait"
 | 
			
		||||
	"k8s.io/client-go/scale"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubectl"
 | 
			
		||||
	scaleclient "k8s.io/client-go/scale"
 | 
			
		||||
	"k8s.io/kubectl/pkg/scale"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	// Parameters for retrying updates/waits with linear backoff.
 | 
			
		||||
	// TODO: Try to move this to exponential backoff by modifying kubectl.Scale().
 | 
			
		||||
	// TODO: Try to move this to exponential backoff by modifying scale.Scale().
 | 
			
		||||
	updateRetryInterval = 5 * time.Second
 | 
			
		||||
	updateRetryTimeout  = 1 * time.Minute
 | 
			
		||||
	waitRetryInterval   = 5 * time.Second
 | 
			
		||||
@@ -45,17 +45,17 @@ func RetryErrorCondition(condition wait.ConditionFunc) wait.ConditionFunc {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ScaleResourceWithRetries(scalesGetter scale.ScalesGetter, namespace, name string, size uint, gr schema.GroupResource) error {
 | 
			
		||||
	scaler := kubectl.NewScaler(scalesGetter)
 | 
			
		||||
	preconditions := &kubectl.ScalePrecondition{
 | 
			
		||||
func ScaleResourceWithRetries(scalesGetter scaleclient.ScalesGetter, namespace, name string, size uint, gr schema.GroupResource) error {
 | 
			
		||||
	scaler := scale.NewScaler(scalesGetter)
 | 
			
		||||
	preconditions := &scale.ScalePrecondition{
 | 
			
		||||
		Size:            -1,
 | 
			
		||||
		ResourceVersion: "",
 | 
			
		||||
	}
 | 
			
		||||
	waitForReplicas := kubectl.NewRetryParams(waitRetryInterval, waitRetryTimeout)
 | 
			
		||||
	cond := RetryErrorCondition(kubectl.ScaleCondition(scaler, preconditions, namespace, name, size, nil, gr))
 | 
			
		||||
	waitForReplicas := scale.NewRetryParams(waitRetryInterval, waitRetryTimeout)
 | 
			
		||||
	cond := RetryErrorCondition(scale.ScaleCondition(scaler, preconditions, namespace, name, size, nil, gr))
 | 
			
		||||
	err := wait.PollImmediate(updateRetryInterval, updateRetryTimeout, cond)
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		err = kubectl.WaitForScaleHasDesiredReplicas(scalesGetter, gr, name, namespace, size, waitForReplicas)
 | 
			
		||||
		err = scale.WaitForScaleHasDesiredReplicas(scalesGetter, gr, name, namespace, size, waitForReplicas)
 | 
			
		||||
	}
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("Error while scaling %s to %d replicas: %v", name, size, err)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							@@ -1124,8 +1124,6 @@ k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructuredscheme
 | 
			
		||||
k8s.io/apimachinery/pkg/apis/meta/v1/validation
 | 
			
		||||
k8s.io/apimachinery/pkg/apis/meta/v1beta1
 | 
			
		||||
k8s.io/apimachinery/pkg/apis/meta/v1beta1/validation
 | 
			
		||||
k8s.io/apimachinery/pkg/apis/testapigroup
 | 
			
		||||
k8s.io/apimachinery/pkg/apis/testapigroup/v1
 | 
			
		||||
k8s.io/apimachinery/pkg/conversion
 | 
			
		||||
k8s.io/apimachinery/pkg/conversion/queryparams
 | 
			
		||||
k8s.io/apimachinery/pkg/fields
 | 
			
		||||
@@ -1655,6 +1653,7 @@ k8s.io/kubectl/pkg/generated
 | 
			
		||||
k8s.io/kubectl/pkg/metricsutil
 | 
			
		||||
k8s.io/kubectl/pkg/polymorphichelpers
 | 
			
		||||
k8s.io/kubectl/pkg/rawhttp
 | 
			
		||||
k8s.io/kubectl/pkg/scale
 | 
			
		||||
k8s.io/kubectl/pkg/scheme
 | 
			
		||||
k8s.io/kubectl/pkg/util
 | 
			
		||||
k8s.io/kubectl/pkg/util/certificate
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user