// Scale updates a replication controller created by the DeploymentConfig with the provided namespace/name, // to a new size, with optional precondition check (if preconditions is not nil),optional retries (if retry // is not nil), and then optionally waits for it's replica count to reach the new value (if wait is not nil). func (scaler *DeploymentConfigScaler) Scale(namespace, name string, newSize uint, preconditions *kubectl.ScalePrecondition, retry, waitForReplicas *kubectl.RetryParams) error { if preconditions == nil { preconditions = &kubectl.ScalePrecondition{Size: -1, ResourceVersion: ""} } if retry == nil { // Make it try only once, immediately retry = &kubectl.RetryParams{Interval: time.Millisecond, Timeout: time.Millisecond} } cond := kubectl.ScaleCondition(scaler, preconditions, namespace, name, newSize) if err := wait.Poll(retry.Interval, retry.Timeout, cond); err != nil { if scaleErr := err.(kubectl.ControllerScaleError); kerrors.IsNotFound(scaleErr.ActualError) { glog.Infof("No deployment found for dc/%s. Scaling the deployment configuration template...", name) dc, err := scaler.dcClient.DeploymentConfigs(namespace).Get(name) if err != nil { return err } dc.Template.ControllerTemplate.Replicas = int(newSize) if _, err := scaler.dcClient.DeploymentConfigs(namespace).Update(dc); err != nil { return err } return nil } return err } if waitForReplicas != nil { rc, err := scaler.rcClient.ReplicationControllers(namespace).Get(name) if err != nil { return err } return wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, kclient.ControllerHasDesiredReplicas(scaler.clientInterface, rc)) } return nil }
// Scale updates the DeploymentConfig with the provided namespace/name, to a // new size, with optional precondition check (if preconditions is not nil), // optional retries (if retry is not nil), and then optionally waits for its // deployment replica count to reach the new value (if wait is not nil). func (scaler *DeploymentConfigScaler) Scale(namespace, name string, newSize uint, preconditions *kubectl.ScalePrecondition, retry, waitForReplicas *kubectl.RetryParams) error { if preconditions == nil { preconditions = &kubectl.ScalePrecondition{Size: -1, ResourceVersion: ""} } if retry == nil { // Make it try only once, immediately retry = &kubectl.RetryParams{Interval: time.Millisecond, Timeout: time.Millisecond} } cond := kubectl.ScaleCondition(scaler, preconditions, namespace, name, newSize) if err := wait.Poll(retry.Interval, retry.Timeout, cond); err != nil { return err } if waitForReplicas != nil { dc, err := scaler.dcClient.DeploymentConfigs(namespace).Get(name) if err != nil { return err } rc, err := scaler.rcClient.ReplicationControllers(namespace).Get(util.LatestDeploymentNameForConfig(dc)) if err != nil { return err } return wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, controllerHasSpecifiedReplicas(scaler.clientInterface, rc, dc.Template.ControllerTemplate.Replicas)) } return nil }
// Scale updates a replication controller created by the DeploymentConfig with the provided namespace/name, // to a new size, with optional precondition check (if preconditions is not nil),optional retries (if retry // is not nil), and then optionally waits for it's replica count to reach the new value (if wait is not nil). func (scaler *DeploymentConfigScaler) Scale(namespace, name string, newSize uint, preconditions *kubectl.ScalePrecondition, retry, waitForReplicas *kubectl.RetryParams) error { if preconditions == nil { preconditions = &kubectl.ScalePrecondition{-1, ""} } if retry == nil { // Make it try only once, immediately retry = &kubectl.RetryParams{Interval: time.Millisecond, Timeout: time.Millisecond} } cond := kubectl.ScaleCondition(scaler, preconditions, namespace, name, newSize) if err := wait.Poll(retry.Interval, retry.Timeout, cond); err != nil { return err } if waitForReplicas != nil { rc, err := scaler.c.GetReplicationController(namespace, name) if err != nil { return err } return wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, scaler.c.ControllerHasDesiredReplicas(rc)) } return nil }