diff --git a/designate/backend/agent_backend/impl_bind9.py b/designate/backend/agent_backend/impl_bind9.py index d8cd5c261..eece61237 100644 --- a/designate/backend/agent_backend/impl_bind9.py +++ b/designate/backend/agent_backend/impl_bind9.py @@ -22,7 +22,6 @@ from oslo_concurrency import lockutils from oslo_config import cfg from oslo_log import log as logging -import designate.conf from designate.backend.agent_backend import base from designate import exceptions from designate import utils @@ -35,11 +34,6 @@ class Bind9Backend(base.AgentBackend): __plugin_name__ = 'bind9' __backend_status__ = 'untested' - @classmethod - def get_cfg_opts(cls): - return [(designate.conf.bind9.BIND9_GROUP, - designate.conf.bind9.BINS9_OPTS)] - def start(self): LOG.info("Started bind9 backend") diff --git a/designate/backend/agent_backend/impl_denominator.py b/designate/backend/agent_backend/impl_denominator.py index 2acc72fbc..5b3500796 100644 --- a/designate/backend/agent_backend/impl_denominator.py +++ b/designate/backend/agent_backend/impl_denominator.py @@ -23,7 +23,6 @@ from oslo_config import cfg from oslo_concurrency import lockutils from oslo_log import log as logging -import designate.conf from designate.backend.agent_backend import base from designate import exceptions from designate import utils @@ -97,11 +96,6 @@ class DenominatorBackend(base.AgentBackend): self.denominator = Denominator( cfg.CONF[CFG_GROUP_NAME]) - @classmethod - def get_cfg_opts(cls): - return [(designate.conf.denominator.DENOMINATOR_GROUP, - designate.conf.denominator.DENOMINATOR_OPTS)] - def start(self): LOG.info("Started Denominator backend") diff --git a/designate/backend/agent_backend/impl_djbdns.py b/designate/backend/agent_backend/impl_djbdns.py index 7c95fd214..dd8ba2dfd 100755 --- a/designate/backend/agent_backend/impl_djbdns.py +++ b/designate/backend/agent_backend/impl_djbdns.py @@ -52,7 +52,6 @@ from oslo_concurrency.processutils import ProcessExecutionError from oslo_config import cfg from oslo_log import log as logging -import designate.conf from designate import exceptions from designate import utils from designate.backend.agent_backend import base @@ -93,11 +92,6 @@ class DjbdnsBackend(base.AgentBackend): __plugin_name__ = 'djbdns' __backend_status__ = 'experimental' - @classmethod - def get_cfg_opts(cls): - return [(designate.conf.djbdns.DJBDNS_GROUP, - designate.conf.djbdns.DJDNS_OPTS)] - def __init__(self, *a, **kw): """Configure the backend""" super(DjbdnsBackend, self).__init__(*a, **kw) diff --git a/designate/backend/agent_backend/impl_gdnsd.py b/designate/backend/agent_backend/impl_gdnsd.py index b817668a1..e87dba0ce 100644 --- a/designate/backend/agent_backend/impl_gdnsd.py +++ b/designate/backend/agent_backend/impl_gdnsd.py @@ -50,7 +50,6 @@ from oslo_concurrency.processutils import ProcessExecutionError from oslo_config import cfg from oslo_log import log as logging -import designate.conf from designate import utils from designate import exceptions from designate.backend.agent_backend import base @@ -83,11 +82,6 @@ class GdnsdBackend(base.AgentBackend): __plugin_name__ = 'gdnsd' __backend_status__ = 'experimental' - @classmethod - def get_cfg_opts(cls): - return [(designate.conf.gdnsd.GDNSD_GROUP, - designate.conf.gdnsd.GDNSD_OPTS)] - def __init__(self, *a, **kw): """Configure the backend""" super(GdnsdBackend, self).__init__(*a, **kw) diff --git a/designate/backend/agent_backend/impl_knot2.py b/designate/backend/agent_backend/impl_knot2.py index d1c494b9a..09f11c605 100755 --- a/designate/backend/agent_backend/impl_knot2.py +++ b/designate/backend/agent_backend/impl_knot2.py @@ -44,7 +44,6 @@ from oslo_concurrency.processutils import ProcessExecutionError from oslo_config import cfg from oslo_log import log as logging -import designate.conf from designate import exceptions from designate.backend.agent_backend import base from designate.utils import execute @@ -64,11 +63,6 @@ class Knot2Backend(base.AgentBackend): __backend_status__ = 'untested' _lock_name = 'knot2.lock' - @classmethod - def get_cfg_opts(cls): - return [(designate.conf.knot2.KNOT2_GROUP, - designate.conf.knot2.KNOT2_OPTS)] - def __init__(self, *a, **kw): """Configure the backend""" super(Knot2Backend, self).__init__(*a, **kw) diff --git a/designate/backend/agent_backend/impl_msdns.py b/designate/backend/agent_backend/impl_msdns.py index cd25c3bd1..b3ef9e6d6 100644 --- a/designate/backend/agent_backend/impl_msdns.py +++ b/designate/backend/agent_backend/impl_msdns.py @@ -22,7 +22,6 @@ from os_win import utilsfactory from os_win import constants from os_win import exceptions as os_win_exc -import designate.conf from designate.backend.agent_backend import base from designate import exceptions @@ -48,11 +47,6 @@ class MSDNSBackend(base.AgentBackend): LOG.info("AXFR masters: %r", self._masters) - @classmethod - def get_cfg_opts(cls): - return [(designate.conf.msdns.MSDNS_GROUP, - designate.conf.msdns.MSDNS_OPTS)] - def start(self): """Start the backend""" LOG.info("Started msdns backend") diff --git a/designate/backend/impl_akamai.py b/designate/backend/impl_akamai.py index 56673e837..2c9172467 100644 --- a/designate/backend/impl_akamai.py +++ b/designate/backend/impl_akamai.py @@ -17,7 +17,6 @@ from oslo_log import log as logging from oslo_config import cfg from oslo_utils import importutils -import designate.conf from designate import exceptions from designate import utils from designate.backend import base @@ -236,11 +235,6 @@ class AkamaiBackend(base.Backend): __backend_status__ = 'untested' - @classmethod - def get_cfg_opts(cls): - return [(designate.conf.akamai.AKAMAI_GROUP, - designate.conf.akamai.AKAMAI_OPTS)] - def __init__(self, target): super(AkamaiBackend, self).__init__(target) diff --git a/designate/backend/impl_dynect.py b/designate/backend/impl_dynect.py index b405bab99..b31f15f61 100755 --- a/designate/backend/impl_dynect.py +++ b/designate/backend/impl_dynect.py @@ -22,7 +22,6 @@ from oslo_serialization import jsonutils import requests from requests.adapters import HTTPAdapter -import designate.conf from designate import exceptions from designate import utils from designate.backend import base @@ -303,11 +302,6 @@ class DynECTBackend(base.Backend): __backend_status__ = 'untested' - @classmethod - def get_cfg_opts(cls): - return [(designate.conf.dynect.DYNECT_GROUP, - designate.conf.dynect.DYNECT_OPTS)] - def __init__(self, target): super(DynECTBackend, self).__init__(target) diff --git a/designate/backend/impl_powerdns/__init__.py b/designate/backend/impl_powerdns/__init__.py index 98ccaa4b8..1308680b6 100644 --- a/designate/backend/impl_powerdns/__init__.py +++ b/designate/backend/impl_powerdns/__init__.py @@ -13,12 +13,10 @@ # 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 copy import threading import six from oslo_config import cfg -from oslo_db import options from oslo_db.exception import DBDuplicateEntry from oslo_log import log as logging from oslo_utils import excutils @@ -42,17 +40,6 @@ class PowerDNSBackend(base.Backend): __backend_status__ = 'deprecated' - @classmethod - def get_cfg_opts(cls): - group = cfg.OptGroup(CFG_GROUP_NAME) - opts = copy.deepcopy(options.database_opts) - - # Strip connection options - discard_opts = ('sqlite_db', 'connection', 'slave_connection') - opts = [opt for opt in opts if opt.name not in discard_opts] - - return [(group, opts,)] - def __init__(self, target): super(PowerDNSBackend, self).__init__(target) diff --git a/designate/conf/producer.py b/designate/conf/producer.py index cf85c5250..ae2902cc3 100644 --- a/designate/conf/producer.py +++ b/designate/conf/producer.py @@ -15,15 +15,39 @@ # under the License. from oslo_config import cfg -from designate.producer import tasks - PRODUCER_GROUP = cfg.OptGroup( name='service:producer', - title="Configuration for Producer Service" + title='Configuration for Producer Service' ) ZONE_MANAGER_GROUP = cfg.OptGroup( - name='service:zone_manager', title="Configuration for Zone Manager Service" + name='service:zone_manager', + title='Configuration for Zone Manager Service' +) + +PRODUCER_TASK_DELAYED_NOTIFY_GROUP = cfg.OptGroup( + name='producer_task:delayed_notify', + title='Configuration for Producer Task: Delayed Notify' +) + +PRODUCER_TASK_PERIODIC_EXISTS_GROUP = cfg.OptGroup( + name='producer_task:periodic_exists', + title='Configuration for Producer Task: Periodic Exists' +) + +PRODUCER_TASK_PERIODIC_SECONDARY_REFRESH_GROUP = cfg.OptGroup( + name='producer_task:periodic_secondary_refresh', + title='Configuration for Producer Task: Periodic Secondary Refresh' +) + +PRODUCER_TASK_WORKER_PERIODIC_RECOVERY_GROUP = cfg.OptGroup( + name='producer_task:worker_periodic_recovery', + title='Configuration for Producer Task: Worker Periodic Recovery' +) + +PRODUCER_TASK_ZONE_PURGE_GROUP = cfg.OptGroup( + name='producer_task:zone_purge', + title='Configuration for Producer Task: Zone Purge' ) PRODUCER_OPTS = [ @@ -66,32 +90,47 @@ ZONE_MANAGER_OPTS = [ deprecated_reason='Migrated to designate-worker'), ] -# NOTE(trungnv): Get [producer_task:zone_purge] config -zone_purge_opts = tasks.DeletedZonePurgeTask.get_cfg_opts()[0][1] -zone_purge_old_group = tasks.DeletedZonePurgeTask.get_cfg_opts()[0][0].name -zone_purge_group = cfg.OptGroup(zone_purge_old_group) +PRODUCER_TASK_DELAYED_NOTIFY_OPTS = [ + cfg.IntOpt('interval', default=5, + help='Run interval in seconds'), + cfg.IntOpt('per_page', default=100, + help='Default amount of results returned per page'), + cfg.IntOpt('batch_size', default=100, + help='How many zones to receive NOTIFY on each run'), +] -# NOTE(trungnv): Get [producer_task:periodic_exists] config -periodic_exists_opts = tasks.PeriodicExistsTask.get_cfg_opts()[0][1] -periodic_exists_old_group = tasks.PeriodicExistsTask.get_cfg_opts()[0][0].name -periodic_exists_group = cfg.OptGroup(periodic_exists_old_group) +PRODUCER_TASK_PERIODIC_EXISTS_OPTS = [ + cfg.IntOpt('interval', default=3600, + help='Run interval in seconds'), + cfg.IntOpt('per_page', default=100, + help='Default amount of results returned per page'), +] -# NOTE(trungnv): Get [producer_task:periodic_secondary_refresh] config -psr_opts = tasks.PeriodicSecondaryRefreshTask.get_cfg_opts()[0][1] -psr_old_group = tasks.PeriodicSecondaryRefreshTask.get_cfg_opts()[0][0].name -psr_group = cfg.OptGroup(psr_old_group) +PRODUCER_TASK_PERIODIC_SECONDARY_REFRESH_OPTS = [ + cfg.IntOpt('interval', default=3600, + help='Run interval in seconds'), + cfg.IntOpt('per_page', default=100, + help='Default amount of results returned per page'), +] -# NOTE(trungnv): Get [producer_task:delayed_notify] config -delayed_notify_opts = \ - tasks.PeriodicGenerateDelayedNotifyTask.get_cfg_opts()[0][1] -delayed_notify_old_group = \ - tasks.PeriodicGenerateDelayedNotifyTask.get_cfg_opts()[0][0].name -delayed_notify_group = cfg.OptGroup(delayed_notify_old_group) +PRODUCER_TASK_WORKER_PERIODIC_RECOVERY_OPTS = [ + cfg.IntOpt('interval', default=120, + help='Run interval in seconds'), + cfg.IntOpt('per_page', default=100, + help='Default amount of results returned per page'), +] -# NOTE(trungnv): Get [producer_task:worker_periodic_recovery] config -wpr_opts = tasks.WorkerPeriodicRecovery.get_cfg_opts()[0][1] -wpr_old_group = tasks.WorkerPeriodicRecovery.get_cfg_opts()[0][0].name -wpr_group = cfg.OptGroup(wpr_old_group) +PRODUCER_TASK_ZONE_PURGE_OPTS = [ + cfg.IntOpt('interval', default=3600, + help='Run interval in seconds'), + cfg.IntOpt('per_page', default=100, + help='Default amount of results returned per page'), + cfg.IntOpt('time_threshold', default=604800, + help='How old deleted zones should be (deleted_at) to be ' + 'purged, in seconds'), + cfg.IntOpt('batch_size', default=100, + help='How many zones to be purged on each run'), +] def register_opts(conf): @@ -99,25 +138,34 @@ def register_opts(conf): conf.register_opts(PRODUCER_OPTS, group=PRODUCER_GROUP) conf.register_group(ZONE_MANAGER_GROUP) conf.register_opts(ZONE_MANAGER_OPTS, group=ZONE_MANAGER_GROUP) - conf.register_group(zone_purge_group) - conf.register_opts(zone_purge_opts, group=zone_purge_group) - conf.register_group(periodic_exists_group) - conf.register_opts(periodic_exists_opts, group=periodic_exists_group) - conf.register_group(psr_group) - conf.register_opts(psr_opts, group=psr_group) - conf.register_group(delayed_notify_group) - conf.register_opts(delayed_notify_opts, group=delayed_notify_group) - conf.register_group(wpr_group) - conf.register_opts(wpr_opts, group=wpr_group) + conf.register_group(PRODUCER_TASK_DELAYED_NOTIFY_GROUP) + conf.register_opts(PRODUCER_TASK_DELAYED_NOTIFY_OPTS, + group=PRODUCER_TASK_DELAYED_NOTIFY_GROUP) + conf.register_group(PRODUCER_TASK_PERIODIC_EXISTS_GROUP) + conf.register_opts(PRODUCER_TASK_PERIODIC_EXISTS_OPTS, + group=PRODUCER_TASK_PERIODIC_EXISTS_GROUP) + conf.register_group(PRODUCER_TASK_PERIODIC_SECONDARY_REFRESH_GROUP) + conf.register_opts(PRODUCER_TASK_PERIODIC_SECONDARY_REFRESH_OPTS, + group=PRODUCER_TASK_PERIODIC_SECONDARY_REFRESH_GROUP) + conf.register_group(PRODUCER_TASK_WORKER_PERIODIC_RECOVERY_GROUP) + conf.register_opts(PRODUCER_TASK_WORKER_PERIODIC_RECOVERY_OPTS, + group=PRODUCER_TASK_WORKER_PERIODIC_RECOVERY_GROUP) + conf.register_group(PRODUCER_TASK_ZONE_PURGE_GROUP) + conf.register_opts(PRODUCER_TASK_ZONE_PURGE_OPTS, + group=PRODUCER_TASK_ZONE_PURGE_GROUP) def list_opts(): return { PRODUCER_GROUP: PRODUCER_OPTS, ZONE_MANAGER_GROUP: ZONE_MANAGER_OPTS, - zone_purge_group: zone_purge_opts, - periodic_exists_group: periodic_exists_opts, - psr_group: psr_opts, - delayed_notify_group: delayed_notify_opts, - wpr_group: wpr_opts, + PRODUCER_TASK_DELAYED_NOTIFY_GROUP: + PRODUCER_TASK_DELAYED_NOTIFY_OPTS, + PRODUCER_TASK_PERIODIC_EXISTS_GROUP: + PRODUCER_TASK_PERIODIC_EXISTS_OPTS, + PRODUCER_TASK_PERIODIC_SECONDARY_REFRESH_GROUP: + PRODUCER_TASK_PERIODIC_SECONDARY_REFRESH_OPTS, + PRODUCER_TASK_WORKER_PERIODIC_RECOVERY_GROUP: + PRODUCER_TASK_WORKER_PERIODIC_RECOVERY_OPTS, + PRODUCER_TASK_ZONE_PURGE_GROUP: PRODUCER_TASK_ZONE_PURGE_OPTS, } diff --git a/designate/manage/powerdns.py b/designate/manage/powerdns.py index 03bc2dcc2..ecdec33b5 100644 --- a/designate/manage/powerdns.py +++ b/designate/manage/powerdns.py @@ -21,7 +21,6 @@ from oslo_db.sqlalchemy.migration_cli import manager as migration_manager from designate.manage import base from designate import rpc -from designate import utils from designate.central import rpcapi as central_rpcapi @@ -29,7 +28,6 @@ REPOSITORY = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'backend', 'impl_powerdns', 'migrate_repo')) CONF = cfg.CONF -utils.register_plugin_opts() def get_manager(pool_target): diff --git a/designate/plugin.py b/designate/plugin.py index b2108db1b..204462f34 100644 --- a/designate/plugin.py +++ b/designate/plugin.py @@ -18,7 +18,6 @@ import abc import six from stevedore import driver from stevedore import enabled -from stevedore import extension from oslo_config import cfg from oslo_log import log as logging @@ -55,50 +54,6 @@ class Plugin(object): def get_plugin_type(cls): return cls.__plugin_type__ - @classmethod - def get_cfg_opts(cls): - """Get any static configuration options - - Returns an array of tuples in the form: - - [(group1, [Option1, Option2]), (group2, [Option1, Option2])] - """ - return [] - - @classmethod - def get_extra_cfg_opts(cls): - """Get any dynamically built configuration options - - Returns an array of tuples in the form: - - [(group1, [Option1, Option2]), (group2, [Option1, Option2])] - """ - return [] - - @classmethod - def register_cfg_opts(cls, namespace): - mgr = extension.ExtensionManager(namespace) - - for e in mgr: - for group, opts in e.plugin.get_cfg_opts(): - if isinstance(group, six.string_types): - group = cfg.OptGroup(name=group) - - CONF.register_group(group) - CONF.register_opts(opts, group=group) - - @classmethod - def register_extra_cfg_opts(cls, namespace): - mgr = extension.ExtensionManager(namespace) - - for e in mgr: - for group, opts in e.plugin.get_extra_cfg_opts(): - if isinstance(group, six.string_types): - group = cfg.OptGroup(name=group) - - CONF.register_group(group) - CONF.register_opts(opts, group=group) - class DriverPlugin(Plugin): """ diff --git a/designate/producer/tasks.py b/designate/producer/tasks.py index 62643e88b..87d56edf9 100644 --- a/designate/producer/tasks.py +++ b/designate/producer/tasks.py @@ -27,6 +27,7 @@ from oslo_log import log as logging from oslo_utils import timeutils LOG = logging.getLogger(__name__) +CONF = cfg.CONF class PeriodicTask(plugin.ExtensionPlugin): @@ -34,24 +35,10 @@ class PeriodicTask(plugin.ExtensionPlugin): """ __plugin_ns__ = 'designate.producer_tasks' __plugin_type__ = 'producer_task' - __interval__ = None def __init__(self): + super(PeriodicTask, self).__init__() self.my_partitions = None - self.options = cfg.CONF[self.get_canonical_name()] - - @classmethod - def get_base_opts(cls): - options = [ - cfg.IntOpt( - 'interval', - default=cls.__interval__, - help='Run interval in seconds' - ), - cfg.IntOpt('per_page', default=100, - help='Default amount of results returned per page'), - ] - return options @property def central_api(self): @@ -69,7 +56,7 @@ class PeriodicTask(plugin.ExtensionPlugin): def zone_api(self): # TODO(timsim): Remove this when pool_manager_api is gone if cfg.CONF['service:worker'].enabled: - return self.worker_api + return self.worker_api return self.pool_manager_api def on_partition_change(self, my_partitions, members, event): @@ -88,7 +75,7 @@ class PeriodicTask(plugin.ExtensionPlugin): return {col: "BETWEEN %s,%s" % self._my_range()} def _iter(self, method, *args, **kwargs): - kwargs.setdefault("limit", self.options.per_page) + kwargs.setdefault("limit", CONF[self.name].per_page) while True: items = method(*args, **kwargs) @@ -112,31 +99,11 @@ class DeletedZonePurgeTask(PeriodicTask): Deleted zones have values in the deleted_at column. Purging means removing them from the database entirely. """ - __plugin_name__ = 'zone_purge' - __interval__ = 3600 def __init__(self): super(DeletedZonePurgeTask, self).__init__() - @classmethod - def get_cfg_opts(cls): - group = cfg.OptGroup(cls.get_canonical_name()) - options = cls.get_base_opts() + [ - cfg.IntOpt( - 'time_threshold', - default=604800, - help="How old deleted zones should be (deleted_at) to be " - "purged, in seconds" - ), - cfg.IntOpt( - 'batch_size', - default=100, - help='How many zones to be purged on each run' - ), - ] - return [(group, options)] - def __call__(self): """Call the Central API to perform a purge of deleted zones based on expiration time and sharding range. @@ -149,7 +116,7 @@ class DeletedZonePurgeTask(PeriodicTask): "end": pend }) - delta = datetime.timedelta(seconds=self.options.time_threshold) + delta = datetime.timedelta(seconds=CONF[self.name].time_threshold) time_threshold = timeutils.utcnow() - delta LOG.debug("Filtering deleted zones before %s", time_threshold) @@ -163,24 +130,17 @@ class DeletedZonePurgeTask(PeriodicTask): self.central_api.purge_zones( ctxt, criterion, - limit=self.options.batch_size, + limit=CONF[self.name].batch_size, ) class PeriodicExistsTask(PeriodicTask): __plugin_name__ = 'periodic_exists' - __interval__ = 3600 def __init__(self): super(PeriodicExistsTask, self).__init__() self.notifier = rpc.get_notifier('producer') - @classmethod - def get_cfg_opts(cls): - group = cfg.OptGroup(cls.get_canonical_name()) - options = cls.get_base_opts() - return [(group, options)] - @staticmethod def _get_period(seconds): interval = datetime.timedelta(seconds=seconds) @@ -200,7 +160,7 @@ class PeriodicExistsTask(PeriodicTask): ctxt = context.DesignateContext.get_admin_context() ctxt.all_tenants = True - start, end = self._get_period(self.options.interval) + start, end = self._get_period(CONF[self.name].interval) extra_data = { "audit_period_beginning": start, @@ -230,13 +190,6 @@ class PeriodicExistsTask(PeriodicTask): class PeriodicSecondaryRefreshTask(PeriodicTask): __plugin_name__ = 'periodic_secondary_refresh' - __interval__ = 3600 - - @classmethod - def get_cfg_opts(cls): - group = cfg.OptGroup(cls.get_canonical_name()) - options = cls.get_base_opts() - return [(group, options)] def __call__(self): pstart, pend = self._my_range() @@ -275,30 +228,11 @@ class PeriodicGenerateDelayedNotifyTask(PeriodicTask): """Generate delayed NOTIFY transactions Scan the database for zones with the delayed_notify flag set. """ - __plugin_name__ = 'delayed_notify' - __interval__ = 5 def __init__(self): super(PeriodicGenerateDelayedNotifyTask, self).__init__() - @classmethod - def get_cfg_opts(cls): - group = cfg.OptGroup(cls.get_canonical_name()) - options = cls.get_base_opts() + [ - cfg.IntOpt( - 'interval', - default=cls.__interval__, - help='Run interval in seconds' - ), - cfg.IntOpt( - 'batch_size', - default=100, - help='How many zones to receive NOTIFY on each run' - ), - ] - return [(group, options)] - def __call__(self): """Fetch a list of zones with the delayed_notify flag set up to "batch_size" @@ -318,7 +252,7 @@ class PeriodicGenerateDelayedNotifyTask(PeriodicTask): zones = self.central_api.find_zones( ctxt, criterion, - limit=self.options.batch_size, + limit=CONF[self.name].batch_size, sort_key='updated_at', sort_dir='asc', ) @@ -339,24 +273,11 @@ class PeriodicGenerateDelayedNotifyTask(PeriodicTask): class WorkerPeriodicRecovery(PeriodicTask): __plugin_name__ = 'worker_periodic_recovery' - __interval__ = 120 - - @classmethod - def get_cfg_opts(cls): - group = cfg.OptGroup(cls.get_canonical_name()) - options = cls.get_base_opts() + [ - cfg.IntOpt( - 'interval', - default=cls.__interval__, - help='Run interval in seconds' - ), - ] - return [(group, options)] def __call__(self): # TODO(timsim): Remove this when worker is always on if not cfg.CONF['service:worker'].enabled: - return + return pstart, pend = self._my_range() LOG.info( diff --git a/designate/tests/__init__.py b/designate/tests/__init__.py index 38a6aae40..53e64dbb5 100644 --- a/designate/tests/__init__.py +++ b/designate/tests/__init__.py @@ -384,7 +384,6 @@ class TestCase(base.BaseTestCase): # "Read" Configuration self.CONF([], project='designate') - utils.register_plugin_opts() self.useFixture(fixtures.PolicyFixture()) self.network_api = fixtures.NetworkAPIFixture() diff --git a/designate/tests/unit/producer/test_tasks.py b/designate/tests/unit/producer/test_tasks.py index 0cc3ada39..23c17ce56 100644 --- a/designate/tests/unit/producer/test_tasks.py +++ b/designate/tests/unit/producer/test_tasks.py @@ -22,6 +22,8 @@ import datetime import fixtures import mock import oslotest.base +from oslo_config import cfg +from oslo_config import fixture as cfg_fixture from oslo_utils import timeutils from designate import context @@ -31,34 +33,29 @@ from designate.producer import tasks from designate.tests.unit import RoObject from designate.utils import generate_uuid +DUMMY_TASK_GROUP = cfg.OptGroup( + name='producer_task:dummy', + title='Configuration for Producer Task: Dummy Task' +) +DUMMY_TASK_OPTS = [ + cfg.IntOpt('per_page', default=100, + help='Default amount of results returned per page'), +] + +CONF = cfg.CONF +CONF.register_group(DUMMY_TASK_GROUP) +CONF.register_opts(DUMMY_TASK_OPTS, group=DUMMY_TASK_GROUP) + class DummyTask(tasks.PeriodicTask): """Dummy task used to test helper functions""" __plugin_name__ = 'dummy' -class TaskTest(oslotest.base.BaseTestCase): - def setup_opts(self, config): - opts = RoObject(**config) - - self.opts = opts - self.opts_patcher = mock.patch('oslo_config.cfg.CONF') - self.addCleanup(self.opts_patcher.stop) - - self.opts_mock = self.opts_patcher.start() - self.opts_mock.__getitem__.side_effect = lambda n: opts[n] - - -class PeriodicTest(TaskTest): +class PeriodicTest(oslotest.base.BaseTestCase): def setUp(self): super(PeriodicTest, self).setUp() - - opts = { - "producer_task:dummy": RoObject({ - "per_page": 100, - }) - } - self.setup_opts(opts) + self.useFixture(cfg_fixture.Config(CONF)) self.task = DummyTask() self.task.my_partitions = range(0, 10) @@ -111,17 +108,12 @@ class PeriodicTest(TaskTest): self.assertEqual((0, 9), self.task._my_range()) -class PeriodicExistsTest(TaskTest): +class PeriodicExistsTest(oslotest.base.BaseTestCase): def setUp(self): super(PeriodicExistsTest, self).setUp() + self.useFixture(cfg_fixture.Config(CONF)) - opts = { - "producer_task:periodic_exists": RoObject({ - "per_page": 100, - "interval": 5 - }) - } - self.setup_opts(opts) + CONF.set_override('interval', 5, 'producer_task:periodic_exists') # Mock a ctxt... self.ctxt = mock.Mock() @@ -196,16 +188,10 @@ class PeriodicExistsTest(TaskTest): self.ctxt, "dns.zone.exists", data) -class PeriodicSecondaryRefreshTest(TaskTest): +class PeriodicSecondaryRefreshTest(oslotest.base.BaseTestCase): def setUp(self): super(PeriodicSecondaryRefreshTest, self).setUp() - - opts = { - "producer_task:periodic_secondary_refresh": RoObject({ - "per_page": 100 - }) - } - self.setup_opts(opts) + self.useFixture(cfg_fixture.Config(CONF)) # Mock a ctxt... self.ctxt = mock.Mock() diff --git a/designate/utils.py b/designate/utils.py index 487b88b6a..98cad2268 100644 --- a/designate/utils.py +++ b/designate/utils.py @@ -82,30 +82,11 @@ def read_config(prog, argv): default_config_files=config_files) config.set_defaults() - register_plugin_opts() - # Avoid circular dependency imports from designate import pool_manager pool_manager.register_dynamic_pool_options() -def register_plugin_opts(): - # Avoid circular dependency imports - from designate import plugin - - # Register Producer Tasks - plugin.Plugin.register_cfg_opts('designate.producer_tasks') - plugin.Plugin.register_extra_cfg_opts('designate.producer_tasks') - - # Register Backend Plugin Config Options - plugin.Plugin.register_cfg_opts('designate.backend') - plugin.Plugin.register_extra_cfg_opts('designate.backend') - - # Register Agent Backend Plugin Config Options - plugin.Plugin.register_cfg_opts('designate.backend.agent_backend') - plugin.Plugin.register_extra_cfg_opts('designate.backend.agent_backend') - - def resource_string(*args): if len(args) == 0: raise ValueError()