diff --git a/etc/magnum/magnum.conf.sample b/etc/magnum/magnum.conf.sample index a2371c903d..014578f575 100644 --- a/etc/magnum/magnum.conf.sample +++ b/etc/magnum/magnum.conf.sample @@ -37,9 +37,12 @@ # is displayed in the service's log file. (string value) #backdoor_port = -# Some periodic tasks can be run in a separate process. Should we run -# them here? (boolean value) -#run_external_periodic_tasks = true +# Enable periodic tasks. (boolean value) +#periodic_enable = true + +# Max interval size between periodic tasks execution in seconds. +# (integer value) +#periodic_interval_max = 60 # # From oslo.log diff --git a/magnum/common/rpc_service.py b/magnum/common/rpc_service.py index bd306d3ee7..eaf9729cd0 100644 --- a/magnum/common/rpc_service.py +++ b/magnum/common/rpc_service.py @@ -21,6 +21,7 @@ from oslo_service import service from magnum.common import rpc from magnum.objects import base as objects_base +from magnum.service import periodic # NOTE(paulczar): @@ -39,6 +40,19 @@ TRANSPORT_ALIASES = { 'magnum.openstack.common.rpc.impl_zmq': 'zmq', } +periodic_opts = [ + cfg.BoolOpt('periodic_enable', + default=True, + help='Enable periodic tasks.'), + cfg.IntOpt('periodic_interval_max', + default=60, + help='Max interval size between periodic tasks execution in ' + 'seconds.'), +] + +CONF = cfg.CONF +CONF.register_opts(periodic_opts) + class Service(service.Service): _server = None @@ -55,6 +69,8 @@ class Service(service.Service): serializer=serializer) def start(self): + if CONF.periodic_enable: + self.tg = periodic.setup(CONF) self._server.start() def wait(self): diff --git a/magnum/opts.py b/magnum/opts.py index a01ef1f55b..dd81775606 100644 --- a/magnum/opts.py +++ b/magnum/opts.py @@ -35,6 +35,7 @@ def list_opts(): magnum.common.magnum_keystoneclient.trust_opts, magnum.common.paths.PATH_OPTS, magnum.common.utils.UTILS_OPTS, + magnum.common.rpc_service.periodic_opts )), ('api', magnum.api.app.API_SERVICE_OPTS), ('bay', magnum.conductor.template_definition.template_def_opts), diff --git a/magnum/service/__init__.py b/magnum/service/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/magnum/service/periodic.py b/magnum/service/periodic.py new file mode 100644 index 0000000000..a41824fd4e --- /dev/null +++ b/magnum/service/periodic.py @@ -0,0 +1,37 @@ +# Copyright (c) 2015 Intel Inc. +# +# 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. +from oslo_log import log +from oslo_service import periodic_task +from oslo_service import threadgroup + +LOG = log.getLogger(__name__) + + +class MagnumPeriodicTasks(periodic_task.PeriodicTasks): + '''Magnum periodic Task class + + Any periodic task job need to be added into this class + ''' + pass + + +def setup(conf): + tg = threadgroup.ThreadGroup() + pt = MagnumPeriodicTasks(conf) + tg.add_dynamic_timer( + pt.run_periodic_tasks, + periodic_interval_max=conf.periodic_interval_max, + context=None) + return tg