forked from openshift/origin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
controller.go
67 lines (55 loc) · 2.02 KB
/
controller.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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)
}