forked from openshift/origin
-
Notifications
You must be signed in to change notification settings - Fork 1
/
deploy_generictrigger_controller.go
81 lines (67 loc) · 2.63 KB
/
deploy_generictrigger_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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package generictrigger
import (
"k8s.io/apimachinery/pkg/runtime"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/client-go/util/workqueue"
kcorelister "k8s.io/kubernetes/pkg/client/listers/core/v1"
"github.com/golang/glog"
deployapi "github.com/openshift/origin/pkg/apps/apis/apps"
appsclient "github.com/openshift/origin/pkg/apps/generated/internalclientset/typed/apps/internalversion"
appslister "github.com/openshift/origin/pkg/apps/generated/listers/apps/internalversion"
)
const (
// maxRetryCount is the number of times a deployment config will be retried before it is dropped
// out of the queue.
maxRetryCount = 15
)
// DeploymentTriggerController processes all triggers for a deployment config
// and kicks new deployments whenever possible.
type DeploymentTriggerController struct {
// triggerFromImages is true if image changes should be processed by the instantiate
// endpoint
triggerFromImages bool
// dn is used to update deployment configs.
dn appsclient.DeploymentConfigsGetter
// queue contains deployment configs that need to be synced.
queue workqueue.RateLimitingInterface
// dcLister provides a local cache for deployment configs.
dcLister appslister.DeploymentConfigLister
// 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 kcorelister.ReplicationControllerLister
// 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,
}
if !c.triggerFromImages {
request.ExcludeTriggers = []deployapi.DeploymentTriggerType{deployapi.DeploymentTriggerOnImageChange}
}
_, err := c.dn.DeploymentConfigs(config.Namespace).Instantiate(config.Name, request)
return err
}
func (c *DeploymentTriggerController) handleErr(err error, key interface{}) {
if err == nil {
c.queue.Forget(key)
return
}
if c.queue.NumRequeues(key) < maxRetryCount {
glog.V(2).Infof("Error instantiating deployment config %v: %v", key, err)
c.queue.AddRateLimited(key)
return
}
utilruntime.HandleError(err)
glog.V(2).Infof("Dropping deployment config %q out of the trigger queue: %v", key, err)
c.queue.Forget(key)
}