From 7301bf21222b94c77f9ff31ebbd9d17b5b734c5a Mon Sep 17 00:00:00 2001 From: Mohammad Banikazemi Date: Mon, 14 Sep 2015 00:33:32 -0400 Subject: [PATCH] Adding configurations for Kuryr Partially Implements blueprint kuryr-config Change-Id: I66738833ce14275f4ca647724bd695a69c7c0380 --- etc/README-config.txt | 6 +++ etc/kuryr-config-generator.conf | 4 ++ kuryr/common/__init__.py | 0 kuryr/common/config.py | 65 +++++++++++++++++++++++++++++++++ kuryr/i18n.py | 30 +++++++++++++++ kuryr/opts.py | 48 ++++++++++++++++++++++++ kuryr/tests/test_config.py | 35 ++++++++++++++++++ setup.cfg | 4 ++ tox.ini | 3 ++ 9 files changed, 195 insertions(+) create mode 100644 etc/README-config.txt create mode 100644 etc/kuryr-config-generator.conf create mode 100644 kuryr/common/__init__.py create mode 100644 kuryr/common/config.py create mode 100644 kuryr/i18n.py create mode 100644 kuryr/opts.py create mode 100644 kuryr/tests/test_config.py diff --git a/etc/README-config.txt b/etc/README-config.txt new file mode 100644 index 00000000..430a8bf6 --- /dev/null +++ b/etc/README-config.txt @@ -0,0 +1,6 @@ +To generate the sample kuryr.conf file, run the following +command from the top level of the kuryr directory: + +tox -egenconfig + +The sample file will be generated at /etc/kuryr.conf.sample diff --git a/etc/kuryr-config-generator.conf b/etc/kuryr-config-generator.conf new file mode 100644 index 00000000..ddf05a9f --- /dev/null +++ b/etc/kuryr-config-generator.conf @@ -0,0 +1,4 @@ +[DEFAULT] +output_file = etc/kuryr.conf.sample +wrap_width = 79 +namespace = kuryr diff --git a/kuryr/common/__init__.py b/kuryr/common/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/kuryr/common/config.py b/kuryr/common/config.py new file mode 100644 index 00000000..4c30a206 --- /dev/null +++ b/kuryr/common/config.py @@ -0,0 +1,65 @@ +# 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 Kuryr +""" + +import os + +from oslo_config import cfg + +from kuryr import i18n + +_ = i18n._ + +core_opts = [ + cfg.StrOpt('pybasedir', + default=os.path.abspath(os.path.join(os.path.dirname(__file__), + '../../')), + help=_('Directory where kuryr python module is installed.')), + cfg.StrOpt('bindir', + default='$pybasedir/usr/libexec/kuryr', + help=_('Directory for kuryr vif binding executables.')), + cfg.StrOpt('kuryr_uri', + default='http://127.0.0.1:2377', + help=_('Kuryr URL for accessing Kuryr through json rpc.')), +] +neutron_opts = [ + cfg.StrOpt('neutron_uri', + default=os.environ.get('OS_URL', 'http://127.0.0.1:9696'), + help=_('Neutron URL for accessing the network service.')), +] +keystone_opts = [ + cfg.StrOpt('auth_uri', + default=os.environ.get('IDENTITY_URL', + 'http://127.0.0.1:35357'), + help=_('The URL for accessing the identity service.')), + cfg.StrOpt('admin_user', + default=os.environ.get('SERVICE_USER'), + help=_('The admin username.')), + cfg.StrOpt('admin_tenant_name', + default=os.environ.get('SERVICE_TENANT_NAME'), + help=_('The admin username.')), + cfg.StrOpt('admin_password', + default=os.environ.get('SERVICE_PASSWORD'), + help=_('The admin password.')), + cfg.StrOpt('admin_token', + default=os.environ.get('SERVICE_TOKEN'), + help=_('The admin token.')), +] + + +CONF = cfg.CONF +CONF.register_opts(core_opts) +CONF.register_opts(neutron_opts, group='neutron_client') +CONF.register_opts(keystone_opts, group='keystone_client') diff --git a/kuryr/i18n.py b/kuryr/i18n.py new file mode 100644 index 00000000..39047248 --- /dev/null +++ b/kuryr/i18n.py @@ -0,0 +1,30 @@ +# 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. + +import oslo_i18n + +_translators = oslo_i18n.TranslatorFactory(domain='neutron') + +# The primary translation function using the well-known name "_" +_ = _translators.primary + +# Translators for log levels. +# +# The abbreviated names are meant to reflect the usual use of a short +# name like '_'. The "L" is for "log" and the other letter comes from +# the level. +_LI = _translators.log_info +_LW = _translators.log_warning +_LE = _translators.log_error +_LC = _translators.log_critical diff --git a/kuryr/opts.py b/kuryr/opts.py new file mode 100644 index 00000000..a6e9f703 --- /dev/null +++ b/kuryr/opts.py @@ -0,0 +1,48 @@ +# 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. + +__all__ = [ + 'list_kuryr_opts', +] + +import copy +import itertools + +import kuryr.common.config + + +_kuryr_opts = [ + (None, list(itertools.chain( + kuryr.common.config.core_opts))), + ('neutron_client', kuryr.common.config.neutron_opts), + ('keystone_client', kuryr.common.config.keystone_opts), +] + + +def list_kuryr_opts(): + """Return a list of oslo_config options available in Kuryr service. + + Each element of the list is a tuple. The first element is the name of the + group under which the list of elements in the second element will be + registered. A group name of None corresponds to the [DEFAULT] group in + config files. + + This function is also discoverable via the 'kuryr' entry point under + the 'oslo_config.opts' namespace. + + The purpose of this is to allow tools like the Oslo sample config file + generator to discover the options exposed to users by Kuryr. + + :returns: a list of (group_name, opts) tuples + """ + + return [(k, copy.deepcopy(o)) for k, o in _kuryr_opts] diff --git a/kuryr/tests/test_config.py b/kuryr/tests/test_config.py new file mode 100644 index 00000000..7d998cfb --- /dev/null +++ b/kuryr/tests/test_config.py @@ -0,0 +1,35 @@ +# 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. + +import os + +from kuryr.common import config +from kuryr.tests import base + + +class ConfigurationTest(base.TestCase): + + def test_defaults(self): + basepath = os.path.abspath(os.path.join(os.path.dirname(__file__), + '../../')) + self.assertEqual(basepath, + config.CONF.pybasedir) + self.assertEqual(basepath + '/usr/libexec/kuryr', + config.CONF.bindir) + self.assertEqual('http://127.0.0.1:2377', + config.CONF.kuryr_uri) + + self.assertEqual('http://127.0.0.1:9696', + config.CONF.neutron_client.neutron_uri) + + self.assertEqual('http://127.0.0.1:35357', + config.CONF.keystone_client.auth_uri) diff --git a/setup.cfg b/setup.cfg index f6b5243f..b54055be 100644 --- a/setup.cfg +++ b/setup.cfg @@ -20,6 +20,10 @@ classifier = Programming Language :: Python :: 3.3 Programming Language :: Python :: 3.4 +[entry_points] +oslo.config.opts = + kuryr = kuryr.opts:list_kuryr_opts + [files] packages = kuryr diff --git a/tox.ini b/tox.ini index 94dfe49f..71557f55 100644 --- a/tox.ini +++ b/tox.ini @@ -56,3 +56,6 @@ commands = [hacking] import_exceptions = neutron.i18n local-check-factory = neutron.hacking.checks.factory + +[testenv:genconfig] +commands = oslo-config-generator --config-file=etc/kuryr-config-generator.conf