diff --git a/designate/api/wsgi.py b/designate/api/wsgi.py new file mode 100644 index 000000000..b29fa7a1b --- /dev/null +++ b/designate/api/wsgi.py @@ -0,0 +1,60 @@ +# 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. +"""WSGI script for Designate API.""" + +import eventlet # noqa + +eventlet.monkey_patch(os=False) # noqa + +import os + +from oslo_config import cfg +from oslo_log import log as logging +from oslo_service import threadgroup +from paste import deploy + +from designate import conf +from designate import policy +from designate import rpc +from designate import service +from designate.common import config + +CONF = conf.CONF + +CONFIG_FILES = ['api-paste.ini', 'designate.conf'] + + +def _get_config_files(env=None): + if env is None: + env = os.environ + dirname = env.get('OS_DESIGNATE_CONFIG_DIR', '/etc/designate').strip() + return [os.path.join(dirname, config_file) for config_file in CONFIG_FILES] + + +def init_application(): + conf_files = _get_config_files() + logging.register_options(cfg.CONF) + cfg.CONF([], project='designate', default_config_files=conf_files) + config.set_defaults() + logging.setup(cfg.CONF, 'designate') + + policy.init() + + if not rpc.initialized(): + rpc.init(CONF) + + heartbeat = service.Heartbeat('api', threadgroup.ThreadGroup()) + heartbeat.start() + + conf = conf_files[0] + + return deploy.loadapp('config:%s' % conf, name='osapi_dns') diff --git a/releasenotes/notes/experimental-wsgi-support-8370a8d9b298d5ca.yaml b/releasenotes/notes/experimental-wsgi-support-8370a8d9b298d5ca.yaml new file mode 100644 index 000000000..6210a92e6 --- /dev/null +++ b/releasenotes/notes/experimental-wsgi-support-8370a8d9b298d5ca.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Added an experimental entrypoint for wsgi called ``designate-api-wsgi``. \ No newline at end of file diff --git a/setup.cfg b/setup.cfg index 5d0bc0824..54abe0a9f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -128,6 +128,9 @@ designate.notification.plugin = default = designate.notifications:Default audit = designate.notifications:Audit +wsgi_scripts = + designate-api-wsgi = designate.api.wsgi:init_application + [egg_info] tag_build = tag_date = 0