Finalized centralization of configuration
This patch removes get_cfg_opts from the plugin class, and moves all configuration directly into designate.conf. There are no changes in the generated configuration due to this patch. Finally, this complets the blueprint to centralize all configuration, and is a follow up to this patch I3be68bf294157631a9bac128df0841220020de96 blueprint centralize-config-designate Change-Id: I007fc004fc533950c5eda3974f41f05c6db5b43f
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
"""
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user