summaryrefslogtreecommitdiff
path: root/zuul/driver/timer/timertrigger.py
diff options
context:
space:
mode:
authorJames E. Blair <jeblair@redhat.com>2016-12-08 15:22:26 -0800
committerJames E. Blair <jeblair@redhat.com>2017-01-20 05:43:21 -0800
commite511d2f6c4925c64f1fb00640826ed3a8999e0be (patch)
tree5097386737eef34536311ccccc9de61ed01b089f /zuul/driver/timer/timertrigger.py
parent7f238a2991f7f831ea2f31d44af24f40c33fdabc (diff)
downloadzuul-e511d2f6c4925c64f1fb00640826ed3a8999e0be.tar.gz
Reorganize connections into drivers
This change, while substantial, is mostly organizational. Currently, connections, sources, triggers, and reporters are discrete concepts, and yet are related by virtue of the fact that the ConnectionRegistry is used to instantiate each of them. The method used to instantiate them is called "_getDriver", in recognition that behind each "trigger", etc., which appears in the config file, there is a class in the zuul.trigger hierarchy implementing the driver for that trigger. Connections also specify a "driver" in the config file. In this change, we redefine a "driver" as a single class that organizes related connections, sources, triggers and reporters. The connection, source, trigger, and reporter interfaces still exist. A driver class is responsible for indicating which of those interfaces it supports and instantiating them when asked to do so. Zuul instantiates a single instance of each driver class it knows about (currently hardcoded, but in the future, we will be able to easily ask entrypoints for these). That instance will be retained for the life of the Zuul server process. When Zuul is (re-)configured, it asks the driver instances to create new connection, source, trigger, reporter instances as necessary. For instance, a user may specify a connection that uses the "gerrit" driver, and the ConnectionRegistry would call getConnection() on the Gerrit driver instance. This is done for two reasons: first, it allows us to organize all of the code related to interfacing with an external system together. All of the existing connection, source, trigger, and reporter classes are moved as follows: zuul.connection.FOO -> zuul.driver.FOO.FOOconnection zuul.source.FOO -> zuul.driver.FOO.FOOsource zuul.trigger.FOO -> zuul.driver.FOO.FOOtrigger zuul.reporter.FOO -> zuul.driver.FOO.FOOreporter For instance, all of the code related to interfacing with Gerrit is now is zuul.driver.gerrit. Second, the addition of a single, long-lived object associated with each of these systems allows us to better support some types of interfaces. For instance, the Zuul trigger maintains a list of events it is required to emit -- this list relates to a tenant as a whole rather than individual pipelines or triggers. The timer trigger maintains a single scheduler instance for all tenants, but must be able to add or remove cron jobs based on an individual tenant being reconfigured. The global driver instance for each of these can be used to accomplish this. As a result of using the driver interface to create new connection, source, trigger and reporter instances, the connection setup in ConnectionRegistry is much simpler, and can easily be extended with entrypoints in the future. The existing tests of connections, sources, triggers, and reporters which only tested that they could be instantiated and have names have been removed, as there are functional tests which cover them. Change-Id: Ib2f7297d81f7a003de48f799dc1b09e82d4894bc
Diffstat (limited to 'zuul/driver/timer/timertrigger.py')
-rw-r--r--zuul/driver/timer/timertrigger.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/zuul/driver/timer/timertrigger.py b/zuul/driver/timer/timertrigger.py
new file mode 100644
index 000000000..b0f282ccc
--- /dev/null
+++ b/zuul/driver/timer/timertrigger.py
@@ -0,0 +1,46 @@
+# Copyright 2012 Hewlett-Packard Development Company, L.P.
+# Copyright 2013 OpenStack Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import voluptuous as v
+
+from zuul.model import EventFilter
+from zuul.trigger import BaseTrigger
+
+
+class TimerTrigger(BaseTrigger):
+ name = 'timer'
+
+ def getEventFilters(self, trigger_conf):
+ def toList(item):
+ if not item:
+ return []
+ if isinstance(item, list):
+ return item
+ return [item]
+
+ efilters = []
+ for trigger in toList(trigger_conf):
+ f = EventFilter(trigger=self,
+ types=['timer'],
+ timespecs=toList(trigger['time']))
+
+ efilters.append(f)
+
+ return efilters
+
+
+def getSchema():
+ timer_trigger = {v.Required('time'): str}
+ return timer_trigger