Merge "Finalized centralization of configuration"
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(
|
||||
|
||||
@@ -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,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