From 93b042c0be12f0530996f667e3a58543e952be74 Mon Sep 17 00:00:00 2001 From: Yuriy Zveryanskyy <yzveryanskyy@mirantis.com> Date: Wed, 19 Mar 2014 15:18:27 +0200 Subject: [PATCH] Fix 'spacing' parameters for periodic tasks conductor.manager module contains 'spacing' parameters for periodic tasks, they do not work because manager module imported before parsing config options. There is not such problem in Nova which uses create() method in class derived from common Service for lazy loading manager module. Because this derived class not needed for Ironic simple load_manager function added to common.service. Partial-Bug: #1279774 Change-Id: Ib31024c8eaf75d38de09983459d86125847cdf30 --- ironic/cmd/conductor.py | 5 +++-- ironic/common/service.py | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ironic/cmd/conductor.py b/ironic/cmd/conductor.py index f11bc3608d..cb99251d42 100644 --- a/ironic/cmd/conductor.py +++ b/ironic/cmd/conductor.py @@ -26,7 +26,6 @@ from oslo.config import cfg from ironic.openstack.common import service from ironic.common import service as ironic_service -from ironic.conductor import manager CONF = cfg.CONF @@ -35,6 +34,8 @@ def main(): # Pase config file and command line options, then start logging ironic_service.prepare_service(sys.argv) - mgr = manager.ConductorManager(CONF.host, manager.MANAGER_TOPIC) + mgr = ironic_service.load_manager('ironic.conductor.manager', + 'ConductorManager', + CONF.host) launcher = service.launch(mgr) launcher.wait() diff --git a/ironic/common/service.py b/ironic/common/service.py index dba16926a0..5bcd7bc7cf 100644 --- a/ironic/common/service.py +++ b/ironic/common/service.py @@ -21,6 +21,7 @@ import socket from oslo.config import cfg from ironic.openstack.common import context +from ironic.openstack.common import importutils from ironic.openstack.common import log from ironic.openstack.common import periodic_task from ironic.openstack.common import rpc @@ -67,3 +68,9 @@ def prepare_service(argv=[]): ]) cfg.CONF(argv[1:], project='ironic') log.setup('ironic') + + +def load_manager(manager_modulename, manager_classname, host): + manager_module = importutils.import_module(manager_modulename) + manager_class = getattr(manager_module, manager_classname) + return manager_class(host, manager_module.MANAGER_TOPIC)