Tacker: ETSI MANO NFV Orchestrator / VNF Manager. See https://wiki.openstack.org/wiki/Tacker
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
4.7 KiB
140 lines
4.7 KiB
# Copyright 2011 VMware, Inc. |
|
# All Rights Reserved. |
|
# |
|
# 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. |
|
|
|
""" |
|
Routines for configuring Tacker |
|
""" |
|
|
|
import os |
|
|
|
from oslo_config import cfg |
|
from oslo_db import options as db_options |
|
from oslo_log import log as logging |
|
import oslo_messaging |
|
from paste import deploy |
|
|
|
from tacker._i18n import _ |
|
from tacker.common import utils |
|
from tacker import version |
|
|
|
|
|
LOG = logging.getLogger(__name__) |
|
|
|
core_opts = [ |
|
cfg.HostAddressOpt('bind_host', default='0.0.0.0', |
|
help=_("The host IP to bind to")), |
|
cfg.IntOpt('bind_port', default=9890, |
|
help=_("The port to bind to")), |
|
cfg.StrOpt('api_paste_config', default="api-paste.ini", |
|
help=_("The API paste config file to use")), |
|
cfg.StrOpt('api_extensions_path', default="", |
|
help=_("The path for API extensions")), |
|
cfg.ListOpt('service_plugins', default=['nfvo', 'vnfm'], |
|
help=_("The service plugins Tacker will use")), |
|
cfg.StrOpt('auth_strategy', default='keystone', |
|
help=_("The type of authentication to use")), |
|
cfg.BoolOpt('allow_bulk', default=True, |
|
help=_("Allow the usage of the bulk API")), |
|
cfg.BoolOpt('allow_pagination', default=False, |
|
help=_("Allow the usage of the pagination")), |
|
cfg.BoolOpt('allow_sorting', default=False, |
|
help=_("Allow the usage of the sorting")), |
|
cfg.StrOpt('pagination_max_limit', default="-1", |
|
help=_("The maximum number of items returned " |
|
"in a single response, value was 'infinite' " |
|
"or negative integer means no limit")), |
|
cfg.HostAddressOpt('host', default=utils.get_hostname(), |
|
help=_("The hostname Tacker is running on")), |
|
] |
|
|
|
core_cli_opts = [ |
|
cfg.StrOpt('state_path', |
|
default='/var/lib/tacker', |
|
help=_("Where to store Tacker state files. " |
|
"This directory must be writable by " |
|
"the agent.")), |
|
] |
|
|
|
logging.register_options(cfg.CONF) |
|
# Register the configuration options |
|
cfg.CONF.register_opts(core_opts) |
|
cfg.CONF.register_cli_opts(core_cli_opts) |
|
|
|
|
|
def config_opts(): |
|
return [(None, core_opts), (None, core_cli_opts)] |
|
|
|
# Ensure that the control exchange is set correctly |
|
oslo_messaging.set_transport_defaults(control_exchange='tacker') |
|
|
|
|
|
def set_db_defaults(): |
|
# Update the default QueuePool parameters. These can be tweaked by the |
|
# conf variables - max_pool_size, max_overflow and pool_timeout |
|
db_options.set_defaults( |
|
cfg.CONF, |
|
connection='sqlite://', |
|
max_pool_size=10, |
|
max_overflow=20, pool_timeout=10) |
|
|
|
set_db_defaults() |
|
|
|
|
|
def init(args, **kwargs): |
|
cfg.CONF(args=args, project='tacker', |
|
version='%%prog %s' % version.version_info.release_string(), |
|
**kwargs) |
|
|
|
# FIXME(ihrachys): if import is put in global, circular import |
|
# failure occurs |
|
from tacker.common import rpc as n_rpc |
|
n_rpc.init(cfg.CONF) |
|
|
|
|
|
def setup_logging(conf): |
|
"""Sets up the logging options for a log with supplied name. |
|
|
|
:param conf: a cfg.ConfOpts object |
|
""" |
|
product_name = "tacker" |
|
logging.setup(conf, product_name) |
|
LOG.info("Logging enabled!") |
|
|
|
|
|
def load_paste_app(app_name): |
|
"""Builds and returns a WSGI app from a paste config file. |
|
|
|
:param app_name: Name of the application to load |
|
:raises ConfigFilesNotFoundError: when config file cannot be located |
|
:raises RuntimeError: when application cannot be loaded from config file |
|
""" |
|
|
|
config_path = cfg.CONF.find_file(cfg.CONF.api_paste_config) |
|
if not config_path: |
|
raise cfg.ConfigFilesNotFoundError( |
|
config_files=[cfg.CONF.api_paste_config]) |
|
config_path = os.path.abspath(config_path) |
|
LOG.info("Config paste file: %s", config_path) |
|
|
|
try: |
|
app = deploy.loadapp("config:%s" % config_path, name=app_name) |
|
except (LookupError, ImportError): |
|
msg = (_("Unable to load %(app_name)s from " |
|
"configuration file %(config_path)s.") % |
|
{'app_name': app_name, |
|
'config_path': config_path}) |
|
LOG.exception(msg) |
|
raise RuntimeError(msg) |
|
return app
|
|
|