Auto-generate designate.conf.sample via genconfig testenv

- Keep currently config in the Designate
- Fix some warning about missing help string
- Auto-generate sample config via genconfig testenv.
- Add an instruction in README about genconfig
- Create config sample along with whole service, backend
- Create opts.py to focus list_opts.

Change-Id: Iead7772cd13316c9f4adafe1b1e70d36bbc6a11a
This commit is contained in:
Nguyen Van Trung 2017-06-10 00:21:01 +07:00
parent 3c323d5eab
commit 416ae6cd08
38 changed files with 514 additions and 234 deletions

View File

@ -27,7 +27,7 @@ from oslo_concurrency import lockutils
import oslo_messaging as messaging import oslo_messaging as messaging
cfg.CONF.register_opts([ designate_opts = [
cfg.StrOpt('host', default=socket.gethostname(), cfg.StrOpt('host', default=socket.gethostname(),
help='Name of this node'), help='Name of this node'),
cfg.StrOpt( cfg.StrOpt(
@ -46,21 +46,23 @@ cfg.CONF.register_opts([
cfg.StrOpt('worker-topic', default='worker', help='Worker Topic'), cfg.StrOpt('worker-topic', default='worker', help='Worker Topic'),
# Default TTL # Default TTL
cfg.IntOpt('default-ttl', default=3600), cfg.IntOpt('default-ttl', default=3600, help='TTL Value'),
# Default SOA Values # Default SOA Values
cfg.IntOpt('default-soa-refresh-min', default=3500, cfg.IntOpt('default-soa-refresh-min', default=3500,
deprecated_name='default-soa-refresh'), deprecated_name='default-soa-refresh',
cfg.IntOpt('default-soa-refresh-max', default=3600), help='SOA refresh-min value'),
cfg.IntOpt('default-soa-retry', default=600), cfg.IntOpt('default-soa-refresh-max', default=3600,
cfg.IntOpt('default-soa-expire', default=86400), help='SOA max value'),
cfg.IntOpt('default-soa-minimum', default=3600), cfg.IntOpt('default-soa-retry', default=600, help='SOA retry'),
cfg.IntOpt('default-soa-expire', default=86400, help='SOA expire'),
cfg.IntOpt('default-soa-minimum', default=3600, help='SOA minimum value'),
# Supported record types # Supported record types
cfg.ListOpt('supported-record-type', help='Supported record types', cfg.ListOpt('supported-record-type', help='Supported record types',
default=['A', 'AAAA', 'CNAME', 'MX', 'SRV', 'TXT', 'SPF', 'NS', default=['A', 'AAAA', 'CNAME', 'MX', 'SRV', 'TXT', 'SPF', 'NS',
'PTR', 'SSHFP', 'SOA']), 'PTR', 'SSHFP', 'SOA']),
]) ]
# Set some Oslo Log defaults # Set some Oslo Log defaults
log.set_defaults(default_log_levels=[ log.set_defaults(default_log_levels=[
@ -84,3 +86,5 @@ messaging.set_transport_defaults('designate')
# Set some Oslo Oslo Concurrency defaults # Set some Oslo Oslo Concurrency defaults
lockutils.set_defaults(lock_path='$state_path') lockutils.set_defaults(lock_path='$state_path')
cfg.CONF.register_opts(designate_opts)

View File

@ -17,12 +17,19 @@
from oslo_config import cfg from oslo_config import cfg
from designate.utils import DEFAULT_AGENT_PORT from designate.utils import DEFAULT_AGENT_PORT
from designate.backend.agent_backend import impl_bind9
from designate.backend.agent_backend import impl_denominator
from designate.backend.agent_backend import impl_djbdns
from designate.backend.agent_backend import impl_gdnsd
from designate.backend.agent_backend import impl_knot2
from designate.backend.agent_backend import impl_msdns
cfg.CONF.register_group(cfg.OptGroup(
agent_group = cfg.OptGroup(
name='service:agent', title="Configuration for the Agent Service" name='service:agent', title="Configuration for the Agent Service"
)) )
OPTS = [ agent_opts = [
cfg.IntOpt('workers', cfg.IntOpt('workers',
help='Number of agent worker processes to spawn'), help='Number of agent worker processes to spawn'),
cfg.IntOpt('threads', default=1000, cfg.IntOpt('threads', default=1000,
@ -55,4 +62,15 @@ OPTS = [
'will pause and drop subsequent NOTIFYs for that zone'), 'will pause and drop subsequent NOTIFYs for that zone'),
] ]
cfg.CONF.register_opts(OPTS, group='service:agent') cfg.CONF.register_group(agent_group)
cfg.CONF.register_opts(agent_opts, group=agent_group)
def list_opts():
yield agent_group, agent_opts
yield impl_bind9.bind9_group, impl_bind9.bind9_opts
yield impl_denominator.denominator_group, impl_denominator.denominator_opts
yield impl_djbdns.djbdns_group, impl_djbdns.djbdns_opts
yield impl_gdnsd.gdnsd_group, impl_gdnsd.gdnsd_opts
yield impl_knot2.knot2_group, impl_knot2.knot2_opts
yield impl_msdns.msdns_group, impl_msdns.msdns_opts

View File

@ -16,18 +16,23 @@
from oslo_config import cfg from oslo_config import cfg
cfg.CONF.register_group(cfg.OptGroup( api_group = cfg.OptGroup(
name='service:api', title="Configuration for API Service" name='service:api', title="Configuration for API Service"
)) )
cfg.CONF.register_opts([ api_opts = [
cfg.IntOpt('workers', cfg.IntOpt('workers',
help='Number of api worker processes to spawn'), help='Number of api worker processes to spawn'),
cfg.IntOpt('threads', default=1000, cfg.IntOpt('threads', default=1000,
help='Number of api greenthreads to spawn'), help='Number of api greenthreads to spawn'),
cfg.BoolOpt('enable-host-header', default=False, cfg.BoolOpt('enable-host-header', default=False,
help='Enable host request headers'), help='Enable host request headers'),
cfg.StrOpt('api-base-uri', default='http://127.0.0.1:9001/'), cfg.StrOpt('api-base-uri', default='http://127.0.0.1:9001/',
help='the url used as the base for all API responses,'
'This should consist of the scheme (http/https),'
'the hostname, port, and any paths that are added'
'to the base of Designate is URLs,'
'For example http://dns.openstack.example.com/dns'),
cfg.IPOpt('api_host', cfg.IPOpt('api_host',
deprecated_for_removal=True, deprecated_for_removal=True,
deprecated_reason="Replaced by 'listen' option", deprecated_reason="Replaced by 'listen' option",
@ -46,13 +51,73 @@ cfg.CONF.register_opts([
'keystone'), 'keystone'),
cfg.BoolOpt('enable-api-v1', default=False, cfg.BoolOpt('enable-api-v1', default=False,
deprecated_for_removal=True, deprecated_for_removal=True,
deprecated_reason=("V1 API is being removed in a future" deprecated_reason="V1 API is being removed in a future"
"release")), "release",
cfg.BoolOpt('enable-api-v2', default=True), help='enable-api-v1 which removed in a future'),
cfg.BoolOpt('enable-api-admin', default=False), cfg.BoolOpt('enable-api-v2', default=True,
help='enable-api-v2 which enable in a future'),
cfg.BoolOpt('enable-api-admin', default=False,
help='enable-api-admin'),
cfg.IntOpt('max_header_line', default=16384, cfg.IntOpt('max_header_line', default=16384,
help="Maximum line size of message headers to be accepted. " help="Maximum line size of message headers to be accepted. "
"max_header_line may need to be increased when using " "max_header_line may need to be increased when using "
"large tokens (typically those generated by the " "large tokens (typically those generated by the "
"Keystone v3 API with big service catalogs)."), "Keystone v3 API with big service catalogs)."),
], group='service:api') ]
api_v1_opts = [
cfg.ListOpt('enabled-extensions-v1', default=[],
help='Enabled API Extensions'),
]
api_v2_opts = [
cfg.ListOpt('enabled-extensions-v2', default=[],
help='Enabled API Extensions for the V2 API'),
cfg.IntOpt('default-limit-v2', default=20,
help='Default per-page limit for the V2 API, a value of None '
'means show all results by default'),
cfg.IntOpt('max-limit-v2', default=1000,
help='Max per-page limit for the V2 API'),
]
api_admin_opts = [
cfg.ListOpt('enabled-extensions-admin', default=[],
help='Enabled Admin API Extensions'),
cfg.IntOpt('default-limit-admin', default=20,
help='Default per-page limit for the Admin API, a value of None'
' means show all results by default'),
cfg.IntOpt('max-limit-admin', default=1000,
help='Max per-page limit for the Admin API'),
]
api_middleware_opts = [
cfg.BoolOpt('maintenance-mode', default=False,
help='Enable API Maintenance Mode'),
cfg.StrOpt('maintenance-mode-role', default='admin',
help='Role allowed to bypass maintaince mode'),
cfg.StrOpt('secure-proxy-ssl-header',
default='X-Forwarded-Proto',
help="The HTTP Header that will be used to determine which "
"the original request protocol scheme was, even if it was "
"removed by an SSL terminating proxy."),
cfg.StrOpt('override-proto',
help="A scheme that will be used to override "
"the request protocol scheme, even if it was "
"set by an SSL terminating proxy.")
]
cfg.CONF.register_group(api_group)
cfg.CONF.register_opts(api_opts, group=api_group)
cfg.CONF.register_opts(api_v1_opts, group=api_group)
cfg.CONF.register_opts(api_v2_opts, group=api_group)
cfg.CONF.register_opts(api_admin_opts, group=api_group)
cfg.CONF.register_opts(api_middleware_opts, group=api_group)
def list_opts():
yield api_group, api_opts
yield api_group, api_v1_opts
yield api_group, api_v2_opts
yield api_group, api_admin_opts
yield api_group, api_middleware_opts

View File

@ -18,18 +18,6 @@ from oslo_log import log as logging
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
OPTS = [
cfg.ListOpt('enabled-extensions-admin', default=[],
help='Enabled Admin API Extensions'),
cfg.IntOpt('default-limit-admin', default=20,
help='Default per-page limit for the Admin API, a value of None'
' means show all results by default'),
cfg.IntOpt('max-limit-admin', default=1000,
help='Max per-page limit for the Admin API'),
]
cfg.CONF.register_opts(OPTS, group='service:api')
def factory(global_config, **local_conf): def factory(global_config, **local_conf):
if not cfg.CONF['service:api'].enable_api_admin: if not cfg.CONF['service:api'].enable_api_admin:

View File

@ -37,22 +37,6 @@ from designate.i18n import _LC
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
cfg.CONF.register_opts([
cfg.BoolOpt('maintenance-mode', default=False,
help='Enable API Maintenance Mode'),
cfg.StrOpt('maintenance-mode-role', default='admin',
help='Role allowed to bypass maintaince mode'),
cfg.StrOpt('secure-proxy-ssl-header',
default='X-Forwarded-Proto',
help="The HTTP Header that will be used to determine which "
"the original request protocol scheme was, even if it was "
"removed by an SSL terminating proxy."),
cfg.StrOpt('override-proto',
help="A scheme that will be used to override "
"the request protocol scheme, even if it was "
"set by an SSL terminating proxy.")
], group='service:api')
def auth_pipeline_factory(loader, global_conf, **local_conf): def auth_pipeline_factory(loader, global_conf, **local_conf):
""" """

View File

@ -31,11 +31,6 @@ from designate import utils
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
cfg.CONF.register_opts([
cfg.ListOpt('enabled-extensions-v1', default=[],
help='Enabled API Extensions'),
], group='service:api')
class DesignateRequest(flask.Request, wrappers.AcceptMixin, class DesignateRequest(flask.Request, wrappers.AcceptMixin,
wrappers.CommonRequestDescriptorsMixin): wrappers.CommonRequestDescriptorsMixin):

View File

@ -20,18 +20,6 @@ from oslo_log import log as logging
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
OPTS = [
cfg.ListOpt('enabled-extensions-v2', default=[],
help='Enabled API Extensions for the V2 API'),
cfg.IntOpt('default-limit-v2', default=20,
help='Default per-page limit for the V2 API, a value of None '
'means show all results by default'),
cfg.IntOpt('max-limit-v2', default=1000,
help='Max per-page limit for the V2 API'),
]
cfg.CONF.register_opts(OPTS, group='service:api')
def factory(global_config, **local_conf): def factory(global_config, **local_conf):
if not cfg.CONF['service:api'].enable_api_v2: if not cfg.CONF['service:api'].enable_api_v2:

View File

@ -26,22 +26,16 @@ from designate import exceptions
from designate import utils from designate import utils
from designate.i18n import _LI from designate.i18n import _LI
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
CFG_GROUP = 'backend:agent:bind9' CFG_GROUP = 'backend:agent:bind9'
"""GROUP = backend:agent:bind9"""
class Bind9Backend(base.AgentBackend): bind9_group = cfg.OptGroup(
__plugin_name__ = 'bind9'
__backend_status__ = 'untested'
@classmethod
def get_cfg_opts(cls):
group = cfg.OptGroup(
name='backend:agent:bind9', title="Configuration for bind9 backend" name='backend:agent:bind9', title="Configuration for bind9 backend"
) )
opts = [ bind9_opts = [
cfg.StrOpt('rndc-host', default='127.0.0.1', help='RNDC Host'), cfg.StrOpt('rndc-host', default='127.0.0.1', help='RNDC Host'),
cfg.IntOpt('rndc-port', default=953, help='RNDC Port'), cfg.IntOpt('rndc-port', default=953, help='RNDC Port'),
cfg.StrOpt('rndc-config-file', cfg.StrOpt('rndc-config-file',
@ -51,9 +45,21 @@ class Bind9Backend(base.AgentBackend):
help='Path where zone files are stored'), help='Path where zone files are stored'),
cfg.StrOpt('query-destination', default='127.0.0.1', cfg.StrOpt('query-destination', default='127.0.0.1',
help='Host to query when finding zones') help='Host to query when finding zones')
] ]
return [(group, opts)]
cfg.CONF.register_group(bind9_group)
cfg.CONF.register_opts(bind9_opts, group=bind9_group)
class Bind9Backend(base.AgentBackend):
__plugin_name__ = 'bind9'
__backend_status__ = 'untested'
@classmethod
def get_cfg_opts(cls):
return [(bind9_group, bind9_opts)]
def start(self): def start(self):
LOG.info(_LI("Started bind9 backend")) LOG.info(_LI("Started bind9 backend"))

View File

@ -31,6 +31,22 @@ from designate.i18n import _LI
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
CFG_GROUP = 'backend:agent:denominator' CFG_GROUP = 'backend:agent:denominator'
"""GROUP = backend:agent:denominator"""
denominator_group = cfg.OptGroup(
name='backend:agent:denominator',
title='Backend options for Denominator',
)
denominator_opts = [
cfg.StrOpt('name', default='fake',
help='Name of the affected provider'),
cfg.StrOpt('config_file', default='/etc/denominator.conf',
help='Path to Denominator configuration file')
]
cfg.CONF.register_group(denominator_group)
cfg.CONF.register_opts(denominator_opts, group=denominator_group)
class Denominator(object): class Denominator(object):
@ -98,19 +114,7 @@ class DenominatorBackend(base.AgentBackend):
@classmethod @classmethod
def get_cfg_opts(cls): def get_cfg_opts(cls):
group = cfg.OptGroup( return [(denominator_group, denominator_opts)]
name=CFG_GROUP,
title='Backend options for Denominator',
)
opts = [
cfg.StrOpt('name', default='fake',
help='Name of the affected provider'),
cfg.StrOpt('config_file', default='/etc/denominator.conf',
help='Path to Denominator configuration file')
]
return [(group, opts)]
def start(self): def start(self):
LOG.info(_LI("Started Denominator backend")) LOG.info(_LI("Started Denominator backend"))

View File

@ -57,6 +57,7 @@ from designate.i18n import _LI
from designate.i18n import _LE from designate.i18n import _LE
from designate.utils import execute from designate.utils import execute
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
CFG_GROUP = 'backend:agent:djbdns' CFG_GROUP = 'backend:agent:djbdns'
# rootwrap requires a command name instead of full path # rootwrap requires a command name instead of full path
@ -67,6 +68,39 @@ TINYDNS_DATA_DEFAULT_PATH = 'tinydns-data'
TINYDNS_DATADIR_DEFAULT_PATH = '/var/lib/djbdns' TINYDNS_DATADIR_DEFAULT_PATH = '/var/lib/djbdns'
SOA_QUERY_TIMEOUT = 1 SOA_QUERY_TIMEOUT = 1
"""GROUP = backend:agent:djbdns"""
djbdns_group = cfg.OptGroup(
name='backend:agent:djbdns',
title="Configuration for Djbdns backend"
)
djbdns_opts = [
cfg.StrOpt(
'tcpclient-cmd-name',
help='tcpclient executable path or rootwrap command name',
default='tcpclient'
),
cfg.StrOpt(
'axfr-get-cmd-name',
help='axfr-get executable path or rootwrap command name',
default='axfr-get'
),
cfg.StrOpt(
'tinydns-data-cmd-name',
help='tinydns-data executable path or rootwrap command name',
default='tinydns-data'
),
cfg.StrOpt(
'tinydns-datadir',
help='TinyDNS data directory',
default='/var/lib/djbdns'
),
cfg.StrOpt('query-destination', default='127.0.0.1',
help='Host to query when finding zones')
]
cfg.CONF.register_group(djbdns_group)
cfg.CONF.register_opts(djbdns_opts, group=djbdns_group)
# TODO(Federico) on zone creation and update, agent.handler unnecessarily # TODO(Federico) on zone creation and update, agent.handler unnecessarily
# perfors AXFR from MiniDNS to the Agent to populate the `zone` argument # perfors AXFR from MiniDNS to the Agent to populate the `zone` argument
@ -94,35 +128,7 @@ class DjbdnsBackend(base.AgentBackend):
@classmethod @classmethod
def get_cfg_opts(cls): def get_cfg_opts(cls):
group = cfg.OptGroup( return [(djbdns_group, djbdns_opts)]
name='backend:agent:djbdns',
title="Configuration for Djbdns backend"
)
opts = [
cfg.StrOpt(
'tcpclient-cmd-name',
help='tcpclient executable path or rootwrap command name',
default=TCPCLIENT_DEFAULT_PATH
),
cfg.StrOpt(
'axfr-get-cmd-name',
help='axfr-get executable path or rootwrap command name',
default=AXFR_GET_DEFAULT_PATH
),
cfg.StrOpt(
'tinydns-data-cmd-name',
help='tinydns-data executable path or rootwrap command name',
default=TINYDNS_DATA_DEFAULT_PATH
),
cfg.StrOpt(
'tinydns-datadir',
help='TinyDNS data directory',
default=TINYDNS_DATADIR_DEFAULT_PATH
),
cfg.StrOpt('query-destination', default='127.0.0.1',
help='Host to query when finding zones')
]
return [(group, opts)]
def __init__(self, *a, **kw): def __init__(self, *a, **kw):
"""Configure the backend""" """Configure the backend"""

View File

@ -54,6 +54,7 @@ from designate.backend.agent_backend import base
from designate.i18n import _LI from designate.i18n import _LI
from designate.i18n import _LE from designate.i18n import _LE
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
CFG_GROUP = 'backend:agent:gdnsd' CFG_GROUP = 'backend:agent:gdnsd'
# rootwrap requires a command name instead of full path # rootwrap requires a command name instead of full path
@ -63,6 +64,25 @@ SOA_QUERY_TIMEOUT = 1
ZONE_FILE_PERMISSIONS = 0o0644 ZONE_FILE_PERMISSIONS = 0o0644
"""GROUP = backend:agent:gdnsd"""
gdnsd_group = cfg.OptGroup(
name='backend:agent:gdnsd', title="Configuration for gdnsd backend"
)
gdnsd_opts = [
cfg.StrOpt('gdnsd-cmd-name',
help='gdnsd executable path or rootwrap command name',
default='gdnsd'),
cfg.StrOpt('confdir-path',
help='gdnsd configuration directory path',
default='/etc/gdnsd'),
cfg.StrOpt('query-destination', default='127.0.0.1',
help='Host to query when finding zones')
]
cfg.CONF.register_group(gdnsd_group)
cfg.CONF.register_opts(gdnsd_opts, group=gdnsd_group)
def filter_exceptions(fn): def filter_exceptions(fn):
# Let Backend() exceptions pass through, log out every other exception # Let Backend() exceptions pass through, log out every other exception
# and re-raise it as Backend() # and re-raise it as Backend()
@ -84,20 +104,7 @@ class GdnsdBackend(base.AgentBackend):
@classmethod @classmethod
def get_cfg_opts(cls): def get_cfg_opts(cls):
group = cfg.OptGroup( return [(gdnsd_group, gdnsd_opts)]
name=CFG_GROUP, title="Configuration for gdnsd backend"
)
opts = [
cfg.StrOpt('gdnsd-cmd-name',
help='gdnsd executable path or rootwrap command name',
default=GDNSD_DEFAULT_PATH),
cfg.StrOpt('confdir-path',
help='gdnsd configuration directory path',
default=CONFDIR_PATH),
cfg.StrOpt('query-destination', default='127.0.0.1',
help='Host to query when finding zones')
]
return [(group, opts)]
def __init__(self, *a, **kw): def __init__(self, *a, **kw):
"""Configure the backend""" """Configure the backend"""

View File

@ -49,6 +49,7 @@ from designate.i18n import _LI
from designate.i18n import _LE from designate.i18n import _LE
from designate.utils import execute from designate.utils import execute
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
CFG_GROUP = 'backend:agent:knot2' CFG_GROUP = 'backend:agent:knot2'
# rootwrap requires a command name instead of full path # rootwrap requires a command name instead of full path
@ -58,6 +59,30 @@ KNOTC_DEFAULT_PATH = 'knotc'
# perfors AXFR from MiniDNS to the Agent to populate the `zone` argument # perfors AXFR from MiniDNS to the Agent to populate the `zone` argument
# (needed by the Bind backend) # (needed by the Bind backend)
"""GROUP = backend:agent:knot2"""
knot2_group = cfg.OptGroup(
name='backend:agent:knot2', title="Configuration for Knot2 backend"
)
knot2_opts = [
cfg.StrOpt('knotc-cmd-name',
help='knotc executable path or rootwrap command name',
default='knotc'),
cfg.StrOpt('query-destination', default='127.0.0.1',
help='Host to query when finding zones')
]
"""GROUP = backend:agent:msdns"""
msdns_group = cfg.OptGroup(
name='backend:agent:msdns',
title="Configuration for Microsoft DNS Server"
)
msdns_opts = [
]
cfg.CONF.register_group(knot2_group)
cfg.CONF.register_opts(knot2_opts, group=knot2_group)
class Knot2Backend(base.AgentBackend): class Knot2Backend(base.AgentBackend):
__plugin_name__ = 'knot2' __plugin_name__ = 'knot2'
@ -66,17 +91,7 @@ class Knot2Backend(base.AgentBackend):
@classmethod @classmethod
def get_cfg_opts(cls): def get_cfg_opts(cls):
group = cfg.OptGroup( return [(knot2_group, knot2_opts)]
name='backend:agent:knot2', title="Configuration for Knot2 backend"
)
opts = [
cfg.StrOpt('knotc-cmd-name',
help='knotc executable path or rootwrap command name',
default=KNOTC_DEFAULT_PATH),
cfg.StrOpt('query-destination', default='127.0.0.1',
help='Host to query when finding zones')
]
return [(group, opts)]
def __init__(self, *a, **kw): def __init__(self, *a, **kw):
"""Configure the backend""" """Configure the backend"""

View File

@ -29,11 +29,17 @@ from designate.i18n import _LI
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
CFG_GROUP = 'backend:agent:msdns' CFG_GROUP = 'backend:agent:msdns'
GROUP = cfg.OptGroup( """GROUP = backend:agent:msdns"""
name=CFG_GROUP, msdns_group = cfg.OptGroup(
name='backend:agent:msdns',
title="Configuration for Microsoft DNS Server" title="Configuration for Microsoft DNS Server"
) )
OPTS = [] msdns_opts = [
]
cfg.CONF.register_group(msdns_group)
cfg.CONF.register_opts(msdns_opts, group=msdns_group)
class MSDNSBackend(base.AgentBackend): class MSDNSBackend(base.AgentBackend):
@ -57,7 +63,7 @@ class MSDNSBackend(base.AgentBackend):
@classmethod @classmethod
def get_cfg_opts(cls): def get_cfg_opts(cls):
return [(GROUP, OPTS)] return [(msdns_group, msdns_opts)]
def start(self): def start(self):
"""Start the backend""" """Start the backend"""

View File

@ -15,11 +15,11 @@
# under the License. # under the License.
from oslo_config import cfg from oslo_config import cfg
cfg.CONF.register_group(cfg.OptGroup( central_group = cfg.OptGroup(
name='service:central', title="Configuration for Central Service" name='service:central', title="Configuration for Central Service"
)) )
cfg.CONF.register_opts([ OPTS = [
cfg.IntOpt('workers', cfg.IntOpt('workers',
help='Number of central worker processes to spawn'), help='Number of central worker processes to spawn'),
cfg.IntOpt('threads', default=1000, cfg.IntOpt('threads', default=1000,
@ -46,4 +46,11 @@ cfg.CONF.register_opts([
cfg.StrOpt('central_topic', cfg.StrOpt('central_topic',
default='central', default='central',
help="RPC topic name of central service."), help="RPC topic name of central service."),
], group='service:central') ]
cfg.CONF.register_group(central_group)
cfg.CONF.register_opts(OPTS, group=central_group)
def list_opts():
yield central_group, OPTS

View File

@ -32,7 +32,11 @@ from designate.i18n import _LE
LOG = log.getLogger(__name__) LOG = log.getLogger(__name__)
OPTS = [ coordination_group = cfg.OptGroup(
name='coordination', title="Configuration for coordination"
)
coordination_opts = [
cfg.StrOpt('backend_url', cfg.StrOpt('backend_url',
help='The backend URL to use for distributed coordination. If ' help='The backend URL to use for distributed coordination. If '
'unset services that need coordination will function as ' 'unset services that need coordination will function as '
@ -47,7 +51,8 @@ OPTS = [
'membership has changed') 'membership has changed')
] ]
cfg.CONF.register_opts(OPTS, group='coordination') cfg.CONF.register_group(coordination_group)
cfg.CONF.register_opts(coordination_opts, group=coordination_group)
CONF = cfg.CONF CONF = cfg.CONF

View File

@ -41,6 +41,8 @@ util_opts = [
cfg.IntOpt('xfr_timeout', help="Timeout in seconds for XFR's.", default=10) cfg.IntOpt('xfr_timeout', help="Timeout in seconds for XFR's.", default=10)
] ]
cfg.CONF.register_opts(util_opts)
class DNSMiddleware(object): class DNSMiddleware(object):
"""Base DNS Middleware class with some utility methods""" """Base DNS Middleware class with some utility methods"""

View File

@ -20,9 +20,9 @@ from designate import dnsutils
from designate.utils import DEFAULT_MDNS_PORT from designate.utils import DEFAULT_MDNS_PORT
cfg.CONF.register_group(cfg.OptGroup( mdns_group = cfg.OptGroup(
name='service:mdns', title="Configuration for mDNS Service" name='service:mdns', title="Configuration for mDNS Service"
)) )
OPTS = [ OPTS = [
cfg.IntOpt('workers', cfg.IntOpt('workers',
@ -57,5 +57,11 @@ OPTS = [
help='RPC topic name for mini-DNS') help='RPC topic name for mini-DNS')
] ]
cfg.CONF.register_opts(OPTS, group='service:mdns')
cfg.CONF.register_opts(dnsutils.util_opts, group='service:mdns') cfg.CONF.register_group(mdns_group)
cfg.CONF.register_opts(OPTS, group=mdns_group)
cfg.CONF.register_opts(dnsutils.util_opts, group=mdns_group)
def list_opts():
yield mdns_group, OPTS

View File

@ -49,15 +49,18 @@ stats_client = importutils.import_any('monascastatsd',
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
CFG_GROUP = 'monasca:statsd' CFG_GROUP = 'monasca:statsd'
cfg.CONF.register_group(cfg.OptGroup( metrics_group = cfg.OptGroup(
name=CFG_GROUP, title="Configuration for Monasca Statsd" name=CFG_GROUP, title="Configuration for Monasca Statsd"
)) )
cfg.CONF.register_opts([ metrics_opts = [
cfg.BoolOpt('enabled', default=False, help='enable'), cfg.BoolOpt('enabled', default=False, help='enable'),
cfg.IntOpt('port', default=8125, help='UDP port'), cfg.IntOpt('port', default=8125, help='UDP port'),
cfg.StrOpt('hostname', default='127.0.0.1', help='hostname') cfg.StrOpt('hostname', default='127.0.0.1', help='hostname')
], group=CFG_GROUP) ]
cfg.CONF.register_group(metrics_group)
cfg.CONF.register_opts(metrics_opts, group=metrics_group)
# Global metrics client to be imported by other modules # Global metrics client to be imported by other modules

View File

@ -22,9 +22,11 @@ from designate.network_api import base
LOG = log.getLogger(__name__) LOG = log.getLogger(__name__)
cfg.CONF.register_opts([ neutron_opts = [
cfg.StrOpt('network_api', default='neutron', help='Which API to use.') cfg.StrOpt('network_api', default='neutron', help='Which API to use.')
]) ]
cfg.CONF.register_opts(neutron_opts)
def get_network_api(network_api_driver): def get_network_api(network_api_driver):

View File

@ -31,6 +31,10 @@ CONF = cfg.CONF
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
neutron_group = cfg.OptGroup(
name='network_api:neutron', title="Configuration network api"
)
neutron_opts = [ neutron_opts = [
cfg.ListOpt('endpoints', cfg.ListOpt('endpoints',
help='URL to use if None in the ServiceCatalog that is ' help='URL to use if None in the ServiceCatalog that is '
@ -61,7 +65,8 @@ neutron_opts = [
'neutron client requests.'), 'neutron client requests.'),
] ]
cfg.CONF.register_opts(neutron_opts, group='network_api:neutron') cfg.CONF.register_group(neutron_group)
cfg.CONF.register_opts(neutron_opts, group=neutron_group)
def get_client(context, endpoint): def get_client(context, endpoint):

View File

@ -21,21 +21,27 @@ from designate.notification_handler import base
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
cfg.CONF.register_group(cfg.OptGroup( # TODO(trungnv): update default format for v4 and v6 in these cfg.
neutron_group = cfg.OptGroup(
name='handler:neutron_floatingip', name='handler:neutron_floatingip',
title="Configuration for Neutron Notification Handler" title="Configuration for Neutron Notification Handler"
)) )
cfg.CONF.register_opts([ neutron_opts = [
cfg.ListOpt('notification-topics', default=['notifications']), cfg.ListOpt('notification-topics', default=['notifications'],
cfg.StrOpt('control-exchange', default='neutron'), help='notification any events from neutron'),
cfg.StrOpt('zone-id'), cfg.StrOpt('control-exchange', default='neutron',
cfg.MultiStrOpt('formatv4'), help='control-exchange for neutron notification'),
cfg.StrOpt('zone-id', help='Zone ID with each notification'),
cfg.MultiStrOpt('formatv4', help='IPv4 format'),
cfg.MultiStrOpt('format', deprecated_for_removal=True, cfg.MultiStrOpt('format', deprecated_for_removal=True,
deprecated_reason="Replaced by 'formatv4/formatv6'", deprecated_reason="Replaced by 'formatv4/formatv6'",
), help='format which replaced by formatv4/formatv6'),
cfg.MultiStrOpt('formatv6') cfg.MultiStrOpt('formatv6', help='IPv6 format')
], group='handler:neutron_floatingip') ]
cfg.CONF.register_group(neutron_group)
cfg.CONF.register_opts(neutron_opts, group=neutron_group)
class NeutronFloatingHandler(base.BaseAddressHandler): class NeutronFloatingHandler(base.BaseAddressHandler):

View File

@ -21,21 +21,27 @@ from designate.notification_handler.base import BaseAddressHandler
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
cfg.CONF.register_group(cfg.OptGroup( # TODO(trungnv): update default format for v4 and v6 in these cfg.
nova_group = cfg.OptGroup(
name='handler:nova_fixed', name='handler:nova_fixed',
title="Configuration for Nova Notification Handler" title="Configuration for Nova Notification Handler"
)) )
cfg.CONF.register_opts([ nova_opts = [
cfg.ListOpt('notification-topics', default=['notifications']), cfg.ListOpt('notification-topics', default=['notifications'],
cfg.StrOpt('control-exchange', default='nova'), help='notification any events from nova'),
cfg.StrOpt('zone-id'), cfg.StrOpt('control-exchange', default='nova',
cfg.MultiStrOpt('formatv4'), help='control-exchange for nova notification'),
cfg.StrOpt('zone-id', help='Zone ID with each notification'),
cfg.MultiStrOpt('formatv4', help='IPv4 format'),
cfg.MultiStrOpt('format', deprecated_for_removal=True, cfg.MultiStrOpt('format', deprecated_for_removal=True,
deprecated_reason="Replaced by 'formatv4/formatv6'", deprecated_reason="Replaced by 'formatv4/formatv6'",
), help='format which replaced by formatv4/formatv6'),
cfg.MultiStrOpt('formatv6') cfg.MultiStrOpt('formatv6', help='IPv6 format')
], group='handler:nova_fixed') ]
cfg.CONF.register_group(nova_group)
cfg.CONF.register_opts(nova_opts, group=nova_group)
class NovaFixedHandler(BaseAddressHandler): class NovaFixedHandler(BaseAddressHandler):

60
designate/opts.py Normal file
View File

@ -0,0 +1,60 @@
# Copyright 2017 Fujitsu Ltd.
#
# Author: Nguyen Van Trung <trungnv@vn.fujitsu.com>
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from oslo_db import options
from designate import central
import designate
import designate.network_api
from designate.network_api import neutron
from designate import metrics
from designate.notification_handler import neutron as neutrons
from designate import notifications
from designate.notification_handler import nova
from designate.pool_manager.cache import impl_memcache
from designate.pool_manager.cache import impl_sqlalchemy as impl_sql
from designate import quota
from designate import scheduler
from designate.storage import impl_sqlalchemy as ssql
from designate import dnsutils
from designate import coordination as co
from designate import utils
from designate import service
from designate import service_status as stt
# TODO(trungnv): create and genconfig for:
# Deleted domains purging; Delayed zones NOTIFY; Worker Periodic Recovery
# And Hook Points.
def list_opts():
yield None, designate.designate_opts
yield None, designate.network_api.neutron_opts
yield neutron.neutron_group, neutron.neutron_opts
yield metrics.metrics_group, metrics.metrics_opts
yield neutrons.neutron_group, neutrons.neutron_opts
yield nova.nova_group, nova.nova_opts
yield None, notifications.notify_opts
yield impl_memcache.memcache_group, impl_memcache.OPTS
yield impl_sql.sqlalchemy_group, impl_sql.options.database_opts
yield None, quota.quota_opts
yield central.central_group, scheduler.scheduler_opts
yield ssql.storage_group, options.database_opts
yield None, dnsutils.util_opts
yield co.coordination_group, co.coordination_opts
yield None, utils.helper_opts
yield utils.proxy_group, utils.proxy_opts
yield None, service.wsgi_socket_opts
yield stt.heartbeat_group, stt.heartbeat_opts

View File

@ -17,9 +17,9 @@ from oslo_config import cfg
CONF = cfg.CONF CONF = cfg.CONF
CONF.register_group(cfg.OptGroup( pool_manager_group = cfg.OptGroup(
name='service:pool_manager', title="Configuration for Pool Manager Service" name='service:pool_manager', title="Configuration for Pool Manager Service"
)) )
OPTS = [ OPTS = [
cfg.IntOpt('workers', cfg.IntOpt('workers',
@ -74,8 +74,6 @@ OPTS = [
help='RPC topic name for pool-manager') help='RPC topic name for pool-manager')
] ]
CONF.register_opts(OPTS, group='service:pool_manager')
def register_dynamic_pool_options(): def register_dynamic_pool_options():
# Pool Options Registration Pass One # Pool Options Registration Pass One
@ -128,3 +126,11 @@ def register_dynamic_pool_options():
CONF.register_group(pool_nameserver_group) CONF.register_group(pool_nameserver_group)
CONF.register_opts(pool_nameserver_opts, group=pool_nameserver_group) CONF.register_opts(pool_nameserver_opts, group=pool_nameserver_group)
cfg.CONF.register_group(pool_manager_group)
cfg.CONF.register_opts(OPTS, group=pool_manager_group)
def list_opts():
yield pool_manager_group, OPTS

View File

@ -29,10 +29,10 @@ from designate import objects
from designate.common import memorycache from designate.common import memorycache
from designate.pool_manager.cache import base as cache_base from designate.pool_manager.cache import base as cache_base
cfg.CONF.register_group(cfg.OptGroup( memcache_group = cfg.OptGroup(
name='pool_manager_cache:memcache', name='pool_manager_cache:memcache',
title="Configuration for memcache Pool Manager Cache" title="Configuration for memcache Pool Manager Cache"
)) )
OPTS = [ OPTS = [
@ -41,8 +41,6 @@ OPTS = [
] ]
OPTS.extend(memorycache.memcache_opts) OPTS.extend(memorycache.memcache_opts)
cfg.CONF.register_opts(OPTS,
group='pool_manager_cache:memcache')
DEFAULT_STATUS = 'NONE' DEFAULT_STATUS = 'NONE'
@ -127,3 +125,6 @@ class MemcachePoolManagerCache(cache_base.PoolManagerCache):
def _build_status_key(self, pool_manager_status): def _build_status_key(self, pool_manager_status):
return self._status_key(pool_manager_status, 'status') return self._status_key(pool_manager_status, 'status')
cfg.CONF.register_group(memcache_group)
cfg.CONF.register_opts(OPTS, group=memcache_group)

View File

@ -26,13 +26,10 @@ from designate.pool_manager.cache.impl_sqlalchemy import tables
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
cfg.CONF.register_group(cfg.OptGroup( sqlalchemy_group = cfg.OptGroup(
name='pool_manager_cache:sqlalchemy', name='pool_manager_cache:sqlalchemy',
title="Configuration for SQLAlchemy Pool Manager Cache" title="Configuration for SQLAlchemy Pool Manager Cache"
)) )
cfg.CONF.register_opts(options.database_opts,
group='pool_manager_cache:sqlalchemy')
class SQLAlchemyPoolManagerCache(sqlalchemy_base.SQLAlchemy, class SQLAlchemyPoolManagerCache(sqlalchemy_base.SQLAlchemy,
@ -76,3 +73,6 @@ class SQLAlchemyPoolManagerCache(sqlalchemy_base.SQLAlchemy,
context, tables.pool_manager_statuses, objects.PoolManagerStatus, context, tables.pool_manager_statuses, objects.PoolManagerStatus,
objects.PoolManagerStatusList, objects.PoolManagerStatusList,
exceptions.PoolManagerStatusNotFound, criterion, one=True) exceptions.PoolManagerStatusNotFound, criterion, one=True)
cfg.CONF.register_group(sqlalchemy_group)
cfg.CONF.register_opts(options.database_opts, group=sqlalchemy_group)

View File

@ -17,9 +17,9 @@ from oslo_config import cfg
CONF = cfg.CONF CONF = cfg.CONF
CONF.register_group(cfg.OptGroup( producer_group = cfg.OptGroup(
name='service:producer', title="Configuration for Producer Service" name='service:producer', title="Configuration for Producer Service"
)) )
OPTS = [ OPTS = [
cfg.IntOpt('workers', cfg.IntOpt('workers',
@ -36,12 +36,10 @@ OPTS = [
deprecated_reason='Migrated to designate-worker'), deprecated_reason='Migrated to designate-worker'),
] ]
CONF.register_opts(OPTS, group='service:producer')
# TODO(timsim): Remove these when zone-manager is removed # TODO(timsim): Remove these when zone-manager is removed
CONF.register_group(cfg.OptGroup( 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"
)) )
ZONEMGROPTS = [ ZONEMGROPTS = [
cfg.IntOpt('workers', cfg.IntOpt('workers',
@ -66,4 +64,14 @@ ZONEMGROPTS = [
deprecated_reason='Migrated to designate-worker'), deprecated_reason='Migrated to designate-worker'),
] ]
CONF.register_opts(ZONEMGROPTS, group='service:zone_manager')
cfg.CONF.register_group(producer_group)
cfg.CONF.register_opts(OPTS, group=producer_group)
cfg.CONF.register_group(zone_manager_group)
cfg.CONF.register_opts(ZONEMGROPTS, group=zone_manager_group)
def list_opts():
yield producer_group, OPTS
yield zone_manager_group, ZONEMGROPTS

View File

@ -21,7 +21,7 @@ from designate.quota import base
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
cfg.CONF.register_opts([ quota_opts = [
cfg.StrOpt('quota-driver', default='storage', help='Quota driver to use'), cfg.StrOpt('quota-driver', default='storage', help='Quota driver to use'),
cfg.IntOpt('quota-zones', default=10, cfg.IntOpt('quota-zones', default=10,
@ -34,7 +34,9 @@ cfg.CONF.register_opts([
help='Number of records allowed per recordset'), help='Number of records allowed per recordset'),
cfg.IntOpt('quota-api-export-size', default=1000, cfg.IntOpt('quota-api-export-size', default=1000,
help='Number of recordsets allowed in a zone export'), help='Number of recordsets allowed in a zone export'),
]) ]
cfg.CONF.register_opts(quota_opts)
def get_quota(): def get_quota():

View File

@ -16,17 +16,20 @@ from oslo_config import cfg
from oslo_log import log as logging from oslo_log import log as logging
from designate.scheduler import base from designate.scheduler import base
from designate import central
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
cfg.CONF.register_opts([ scheduler_opts = [
cfg.ListOpt( cfg.ListOpt(
'scheduler_filters', 'scheduler_filters',
default=['default_pool'], default=['default_pool'],
help='Enabled Pool Scheduling filters'), help='Enabled Pool Scheduling filters'),
], group='service:central') ]
cfg.CONF.register_group(central.central_group)
cfg.CONF.register_opts(scheduler_opts, group=central.central_group)
def get_scheduler(storage): def get_scheduler(storage):
return base.Scheduler(storage=storage) return base.Scheduler(storage=storage)

View File

@ -22,6 +22,11 @@ from designate import objects
from designate import plugin from designate import plugin
from designate.central import rpcapi as central_rpcapi from designate.central import rpcapi as central_rpcapi
heartbeat_group = cfg.OptGroup(
name='heartbeat_emitter',
title="Configuration for heartbeat_emitter"
)
heartbeat_opts = [ heartbeat_opts = [
cfg.FloatOpt('heartbeat_interval', cfg.FloatOpt('heartbeat_interval',
default=5.0, default=5.0,
@ -31,7 +36,8 @@ heartbeat_opts = [
] ]
CONF = cfg.CONF CONF = cfg.CONF
CONF.register_opts(heartbeat_opts, group="heartbeat_emitter") CONF.register_group(heartbeat_group)
CONF.register_opts(heartbeat_opts, group=heartbeat_group)
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)

View File

@ -15,15 +15,23 @@
# under the License. # under the License.
from oslo_config import cfg from oslo_config import cfg
cfg.CONF.register_group(cfg.OptGroup( sink_group = cfg.OptGroup(
name='service:sink', title="Configuration for Sink Service" name='service:sink', title="Configuration for Sink Service"
)) )
cfg.CONF.register_opts([ OPTS = [
cfg.IntOpt('workers', cfg.IntOpt('workers',
help='Number of sink worker processes to spawn'), help='Number of sink worker processes to spawn'),
cfg.IntOpt('threads', default=1000, cfg.IntOpt('threads', default=1000,
help='Number of sink greenthreads to spawn'), help='Number of sink greenthreads to spawn'),
cfg.ListOpt('enabled-notification-handlers', default=[], cfg.ListOpt('enabled-notification-handlers', default=[],
help='Enabled Notification Handlers'), help='Enabled Notification Handlers'),
], group='service:sink') ]
cfg.CONF.register_group(sink_group)
cfg.CONF.register_opts(OPTS, group=sink_group)
def list_opts():
yield sink_group, OPTS

View File

@ -34,11 +34,12 @@ LOG = logging.getLogger(__name__)
MAXIMUM_SUBZONE_DEPTH = 128 MAXIMUM_SUBZONE_DEPTH = 128
cfg.CONF.register_group(cfg.OptGroup( storage_group = cfg.OptGroup(
name='storage:sqlalchemy', title="Configuration for SQLAlchemy Storage" name='storage:sqlalchemy', title="Configuration for SQLAlchemy Storage"
)) )
cfg.CONF.register_opts(options.database_opts, group='storage:sqlalchemy') cfg.CONF.register_group(storage_group)
cfg.CONF.register_opts(options.database_opts, group=storage_group)
class SQLAlchemyStorage(sqlalchemy_base.SQLAlchemy, storage_base.Storage): class SQLAlchemyStorage(sqlalchemy_base.SQLAlchemy, storage_base.Storage):

View File

@ -39,17 +39,18 @@ from designate.i18n import _LI
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
cfg.CONF.register_opts([ helper_opts = [
cfg.StrOpt('root-helper', cfg.StrOpt('root-helper',
default='sudo designate-rootwrap /etc/designate/rootwrap.conf') default='sudo designate-rootwrap /etc/designate/rootwrap.conf',
]) help='designate-rootwrap configuration')
]
# Set some proxy options (Used for clients that need to communicate via a # Set some proxy options (Used for clients that need to communicate via a
# proxy) # proxy)
cfg.CONF.register_group(cfg.OptGroup( proxy_group = cfg.OptGroup(
name='proxy', title="Configuration for Client Proxy" name='proxy', title="Configuration for Client Proxy"
)) )
proxy_opts = [ proxy_opts = [
cfg.StrOpt('http_proxy', cfg.StrOpt('http_proxy',
@ -60,7 +61,10 @@ proxy_opts = [
help='These addresses should not be proxied') help='These addresses should not be proxied')
] ]
cfg.CONF.register_opts(proxy_opts, group='proxy')
cfg.CONF.register_opts(helper_opts)
cfg.CONF.register_group(proxy_group)
cfg.CONF.register_opts(proxy_opts, proxy_group)
# Default TCP/UDP ports # Default TCP/UDP ports

View File

@ -17,9 +17,9 @@ from oslo_config import cfg
CONF = cfg.CONF CONF = cfg.CONF
CONF.register_group(cfg.OptGroup( worker_group = cfg.OptGroup(
name='service:worker', title="Configuration for the Worker Service" name='service:worker', title="Configuration for the Worker Service"
)) )
OPTS = [ OPTS = [
cfg.BoolOpt('enabled', default=False, cfg.BoolOpt('enabled', default=False,
@ -59,4 +59,10 @@ OPTS = [
help='RPC topic for worker component') help='RPC topic for worker component')
] ]
CONF.register_opts(OPTS, group='service:worker')
cfg.CONF.register_group(worker_group)
cfg.CONF.register_opts(OPTS, group=worker_group)
def list_opts():
yield worker_group, OPTS

View File

@ -0,0 +1,4 @@
To generate the sample designate.conf file, run the following command from the top
level of the designate directory:
tox -e genconfig

View File

@ -0,0 +1,26 @@
[DEFAULT]
output_file = etc/designate/designate_full.conf.sample
wrap_width = 80
# NOTE(trungnv): generating a opts config location
namespace = designate.opts
namespace = designate.agent
namespace = designate.api
namespace = designate.central
namespace = designate.mdns
namespace = designate.pool_manager
namespace = designate.sink
namespace = designate.worker
namespace = designate.producer
namespace = oslo.log
namespace = oslo.messaging
namespace = oslo.policy
namespace = oslo.service.periodic_task
namespace = oslo.service.service
namespace = oslo.service.sslutils
namespace = oslo.db
namespace = oslo.middleware
namespace = oslo.concurrency
namespace = keystonemiddleware.auth_token

View File

@ -37,6 +37,20 @@ data_files =
etc/designate/rootwrap.d/bind9.filters etc/designate/rootwrap.d/bind9.filters
[entry_points] [entry_points]
oslo.config.opts =
designate.opts = designate.opts:list_opts
designate.agent = designate.agent:list_opts
designate.api = designate.api:list_opts
designate.central = designate.central:list_opts
designate.mdns = designate.mdns:list_opts
designate.pool_manager = designate.pool_manager:list_opts
designate.sink = designate.sink:list_opts
designate.worker = designate.worker:list_opts
designate.producer = designate.producer:list_opts
oslo.config.opts.defaults =
designate.api = designate.common.config:set_defaults
console_scripts = console_scripts =
designate-rootwrap = oslo_rootwrap.cmd:main designate-rootwrap = oslo_rootwrap.cmd:main
designate-api = designate.cmd.api:main designate-api = designate.cmd.api:main

View File

@ -68,6 +68,9 @@ basepython = python2.7
commands = sh tools/pretty_flake8.sh commands = sh tools/pretty_flake8.sh
{[testenv:bandit]commands} {[testenv:bandit]commands}
[testenv:genconfig]
commands = oslo-config-generator --config-file=etc/designate/designate-config-generator.conf
[testenv:bashate] [testenv:bashate]
deps = bashate deps = bashate
whitelist_externals = bash whitelist_externals = bash