Merge "Finalized centralization of configuration"

This commit is contained in:
Zuul
2019-06-23 20:14:33 +00:00
committed by Gerrit Code Review
16 changed files with 120 additions and 293 deletions
@@ -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")
@@ -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")
@@ -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)
@@ -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)
@@ -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)
@@ -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")
-6
View File
@@ -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)
-6
View File
@@ -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)
@@ -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)
+89 -41
View File
@@ -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,
}
-2
View File
@@ -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):
-45
View File
@@ -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):
"""
+9 -88
View File
@@ -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(
-1
View File
@@ -387,7 +387,6 @@ class TestCase(base.BaseTestCase):
# "Read" Configuration
self.CONF([], project='designate')
utils.register_plugin_opts()
self.useFixture(fixtures.PolicyFixture())
self.network_api = fixtures.NetworkAPIFixture()
+22 -36
View File
@@ -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()
-19
View File
@@ -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()