package generictrigger import ( "k8s.io/kubernetes/pkg/client/cache" "k8s.io/kubernetes/pkg/runtime" utilruntime "k8s.io/kubernetes/pkg/util/runtime" "k8s.io/kubernetes/pkg/util/workqueue" "github.com/golang/glog" osclient "github.com/openshift/origin/pkg/client" oscache "github.com/openshift/origin/pkg/client/cache" deployapi "github.com/openshift/origin/pkg/deploy/api" ) // DeploymentTriggerController processes all triggers for a deployment config // and kicks new deployments whenever possible. type DeploymentTriggerController struct { // dn is used to update deployment configs. dn osclient.DeploymentConfigsNamespacer // queue contains deployment configs that need to be synced. queue workqueue.RateLimitingInterface // dcLister provides a local cache for deployment configs. dcLister oscache.StoreToDeploymentConfigLister // dcListerSynced makes sure the dc store is synced before reconcling any deployment config. dcListerSynced func() bool // rcLister provides a local cache for replication controllers. rcLister cache.StoreToReplicationControllerLister // rcListerSynced makes sure the dc store is synced before reconcling any replication controller. rcListerSynced func() bool // codec is used for decoding a config out of a deployment. codec runtime.Codec } // Handle processes deployment triggers for a deployment config. func (c *DeploymentTriggerController) Handle(config *deployapi.DeploymentConfig) error { if len(config.Spec.Triggers) == 0 || config.Spec.Paused { return nil } request := &deployapi.DeploymentRequest{ Name: config.Name, Latest: true, Force: false, } _, err := c.dn.DeploymentConfigs(config.Namespace).Instantiate(request) return err } func (c *DeploymentTriggerController) handleErr(err error, key interface{}) { if err == nil { c.queue.Forget(key) return } if c.queue.NumRequeues(key) < MaxRetries { glog.V(2).Infof("Error instantiating deployment config %v: %v", key, err) c.queue.AddRateLimited(key) return } utilruntime.HandleError(err) c.queue.Forget(key) }