// NewRollingDeploymentStrategy makes a new RollingDeploymentStrategy. func NewRollingDeploymentStrategy(namespace string, client kclient.Interface, tags client.ImageStreamTagsNamespacer, decoder runtime.Decoder, initialStrategy acceptingDeploymentStrategy, out, errOut io.Writer, until string) *RollingDeploymentStrategy { if out == nil { out = ioutil.Discard } if errOut == nil { errOut = ioutil.Discard } return &RollingDeploymentStrategy{ out: out, errOut: errOut, until: until, decoder: decoder, initialStrategy: initialStrategy, client: client, tags: tags, apiRetryPeriod: DefaultApiRetryPeriod, apiRetryTimeout: DefaultApiRetryTimeout, rollingUpdate: func(config *kubectl.RollingUpdaterConfig) error { updater := kubectl.NewRollingUpdater(namespace, client) return updater.Update(config) }, hookExecutor: stratsupport.NewHookExecutor(client, tags, os.Stdout, decoder), getUpdateAcceptor: func(timeout time.Duration) strat.UpdateAcceptor { return stratsupport.NewAcceptNewlyObservedReadyPods(out, client, timeout, AcceptorInterval) }, } }
// NewRollingDeploymentStrategy makes a new RollingDeploymentStrategy. func NewRollingDeploymentStrategy(namespace string, client kclient.Interface, codec runtime.Codec, initialStrategy acceptingDeploymentStrategy) *RollingDeploymentStrategy { return &RollingDeploymentStrategy{ codec: codec, initialStrategy: initialStrategy, client: client, apiRetryPeriod: DefaultApiRetryPeriod, apiRetryTimeout: DefaultApiRetryTimeout, rollingUpdate: func(config *kubectl.RollingUpdaterConfig) error { updater := kubectl.NewRollingUpdater(namespace, client) return updater.Update(config) }, hookExecutor: &stratsupport.HookExecutor{ PodClient: &stratsupport.HookExecutorPodClientImpl{ CreatePodFunc: func(namespace string, pod *kapi.Pod) (*kapi.Pod, error) { return client.Pods(namespace).Create(pod) }, PodWatchFunc: func(namespace, name, resourceVersion string, stopChannel chan struct{}) func() *kapi.Pod { return stratsupport.NewPodWatch(client, namespace, name, resourceVersion, stopChannel) }, }, }, getUpdateAcceptor: func(timeout time.Duration) strat.UpdateAcceptor { return stratsupport.NewAcceptNewlyObservedReadyPods(client, timeout, AcceptorInterval) }, } }
// NewRecreateDeploymentStrategy makes a RecreateDeploymentStrategy backed by // a real HookExecutor and client. func NewRecreateDeploymentStrategy(client kclient.Interface, tagClient client.ImageStreamTagsNamespacer, events record.EventSink, decoder runtime.Decoder, out, errOut io.Writer, until string) *RecreateDeploymentStrategy { if out == nil { out = ioutil.Discard } if errOut == nil { errOut = ioutil.Discard } scaler, _ := kubectl.ScalerFor(kapi.Kind("ReplicationController"), client) return &RecreateDeploymentStrategy{ out: out, errOut: errOut, events: events, until: until, rcClient: client, eventClient: client, getUpdateAcceptor: func(timeout time.Duration, minReadySeconds int32) strat.UpdateAcceptor { return stratsupport.NewAcceptNewlyObservedReadyPods(out, client, timeout, AcceptorInterval, minReadySeconds) }, scaler: scaler, decoder: decoder, hookExecutor: stratsupport.NewHookExecutor(client, tagClient, client, os.Stdout, decoder), retryTimeout: 120 * time.Second, retryPeriod: 1 * time.Second, } }
// NewRollingDeploymentStrategy makes a new RollingDeploymentStrategy. func NewRollingDeploymentStrategy(namespace string, oldClient kclient.Interface, tags client.ImageStreamTagsNamespacer, events record.EventSink, decoder runtime.Decoder, initialStrategy acceptingDeploymentStrategy, out, errOut io.Writer, until string) *RollingDeploymentStrategy { if out == nil { out = ioutil.Discard } if errOut == nil { errOut = ioutil.Discard } // TODO internalclientset: get rid of oldClient after next rebase client := adapter.FromUnversionedClient(oldClient.(*kclient.Client)) return &RollingDeploymentStrategy{ out: out, errOut: errOut, until: until, decoder: decoder, initialStrategy: initialStrategy, rcClient: client.Core(), eventClient: client.Core(), tags: tags, apiRetryPeriod: DefaultApiRetryPeriod, apiRetryTimeout: DefaultApiRetryTimeout, rollingUpdate: func(config *kubectl.RollingUpdaterConfig) error { updater := kubectl.NewRollingUpdater(namespace, oldClient) return updater.Update(config) }, hookExecutor: stratsupport.NewHookExecutor(client.Core(), tags, client.Core(), os.Stdout, decoder), getUpdateAcceptor: func(timeout time.Duration, minReadySeconds int32) strat.UpdateAcceptor { return stratsupport.NewAcceptNewlyObservedReadyPods(out, client.Core(), timeout, AcceptorInterval, minReadySeconds) }, } }
// NewRollingDeploymentStrategy makes a new RollingDeploymentStrategy. func NewRollingDeploymentStrategy(namespace string, client kclient.Interface, codec runtime.Codec, initialStrategy acceptingDeploymentStrategy) *RollingDeploymentStrategy { updaterClient := &rollingUpdaterClient{ ControllerHasDesiredReplicasFn: func(rc *kapi.ReplicationController) wait.ConditionFunc { return kclient.ControllerHasDesiredReplicas(client, rc) }, GetReplicationControllerFn: func(namespace, name string) (*kapi.ReplicationController, error) { return client.ReplicationControllers(namespace).Get(name) }, UpdateReplicationControllerFn: func(namespace string, rc *kapi.ReplicationController) (*kapi.ReplicationController, error) { return client.ReplicationControllers(namespace).Update(rc) }, // This guards against the RollingUpdater's built-in behavior to create // RCs when the supplied old RC is nil. We won't pass nil, but it doesn't // hurt to further guard against it since we would have no way to identify // or clean up orphaned RCs RollingUpdater might inadvertently create. CreateReplicationControllerFn: func(namespace string, rc *kapi.ReplicationController) (*kapi.ReplicationController, error) { return nil, fmt.Errorf("unexpected attempt to create Deployment: %#v", rc) }, // We give the RollingUpdater a policy which should prevent it from // deleting the source deployment after the transition, but it doesn't // hurt to guard by removing its ability to delete. DeleteReplicationControllerFn: func(namespace, name string) error { return fmt.Errorf("unexpected attempt to delete Deployment %s/%s", namespace, name) }, } return &RollingDeploymentStrategy{ codec: codec, initialStrategy: initialStrategy, client: updaterClient, rollingUpdate: func(config *kubectl.RollingUpdaterConfig) error { updater := kubectl.NewRollingUpdater(namespace, updaterClient) return updater.Update(config) }, hookExecutor: &stratsupport.HookExecutor{ PodClient: &stratsupport.HookExecutorPodClientImpl{ CreatePodFunc: func(namespace string, pod *kapi.Pod) (*kapi.Pod, error) { return client.Pods(namespace).Create(pod) }, PodWatchFunc: func(namespace, name, resourceVersion string, stopChannel chan struct{}) func() *kapi.Pod { return stratsupport.NewPodWatch(client, namespace, name, resourceVersion, stopChannel) }, }, }, getUpdateAcceptor: func(timeout time.Duration) kubectl.UpdateAcceptor { return stratsupport.NewAcceptNewlyObservedReadyPods(client, timeout, AcceptorInterval) }, } }
// NewRecreateDeploymentStrategy makes a RecreateDeploymentStrategy backed by // a real HookExecutor and client. func NewRecreateDeploymentStrategy(client kclient.Interface, tagClient client.ImageStreamTagsNamespacer, decoder runtime.Decoder) *RecreateDeploymentStrategy { scaler, _ := kubectl.ScalerFor(kapi.Kind("ReplicationController"), client) return &RecreateDeploymentStrategy{ getReplicationController: func(namespace, name string) (*kapi.ReplicationController, error) { return client.ReplicationControllers(namespace).Get(name) }, getUpdateAcceptor: func(timeout time.Duration) strat.UpdateAcceptor { return stratsupport.NewAcceptNewlyObservedReadyPods(client, timeout, AcceptorInterval) }, scaler: scaler, decoder: decoder, hookExecutor: stratsupport.NewHookExecutor(client, tagClient, os.Stdout, decoder), retryTimeout: 120 * time.Second, retryPeriod: 1 * time.Second, } }
// NewRollingDeploymentStrategy makes a new RollingDeploymentStrategy. func NewRollingDeploymentStrategy(namespace string, client kclient.Interface, codec runtime.Codec, initialStrategy acceptingDeploymentStrategy) *RollingDeploymentStrategy { return &RollingDeploymentStrategy{ codec: codec, initialStrategy: initialStrategy, client: client, apiRetryPeriod: DefaultApiRetryPeriod, apiRetryTimeout: DefaultApiRetryTimeout, rollingUpdate: func(config *kubectl.RollingUpdaterConfig) error { updater := kubectl.NewRollingUpdater(namespace, client) return updater.Update(config) }, hookExecutor: stratsupport.NewHookExecutor(client, os.Stdout), getUpdateAcceptor: func(timeout time.Duration) strat.UpdateAcceptor { return stratsupport.NewAcceptNewlyObservedReadyPods(client, timeout, AcceptorInterval) }, } }