diff --git a/releasenotes/notes/support-keystoneclient-option-b30d1ff45f86a2e7.yaml b/releasenotes/notes/support-keystoneclient-option-b30d1ff45f86a2e7.yaml new file mode 100644 index 000000000..42afb51c1 --- /dev/null +++ b/releasenotes/notes/support-keystoneclient-option-b30d1ff45f86a2e7.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add keystone_client Group for user to configure 'interface' and 'region_name' + by watcher.conf. The default value of 'interface' is 'admin'. diff --git a/watcher/common/clients.py b/watcher/common/clients.py index bfe351ba8..4fbd73e73 100755 --- a/watcher/common/clients.py +++ b/watcher/common/clients.py @@ -76,8 +76,16 @@ class OpenStackClients(object): @exception.wrap_keystone_exception def keystone(self): - if not self._keystone: - self._keystone = keyclient.Client(session=self.session) + if self._keystone: + return self._keystone + keystone_interface = self._get_client_option('keystone', + 'interface') + keystone_region_name = self._get_client_option('keystone', + 'region_name') + self._keystone = keyclient.Client( + interface=keystone_interface, + region_name=keystone_region_name, + session=self.session) return self._keystone diff --git a/watcher/conf/__init__.py b/watcher/conf/__init__.py index 9ca08e798..dddee25c9 100755 --- a/watcher/conf/__init__.py +++ b/watcher/conf/__init__.py @@ -32,6 +32,7 @@ from watcher.conf import exception from watcher.conf import glance_client from watcher.conf import gnocchi_client from watcher.conf import ironic_client +from watcher.conf import keystone_client from watcher.conf import monasca_client from watcher.conf import neutron_client from watcher.conf import nova_client @@ -54,6 +55,7 @@ monasca_client.register_opts(CONF) nova_client.register_opts(CONF) glance_client.register_opts(CONF) gnocchi_client.register_opts(CONF) +keystone_client.register_opts(CONF) cinder_client.register_opts(CONF) ceilometer_client.register_opts(CONF) neutron_client.register_opts(CONF) diff --git a/watcher/conf/keystone_client.py b/watcher/conf/keystone_client.py new file mode 100644 index 000000000..e2ada3861 --- /dev/null +++ b/watcher/conf/keystone_client.py @@ -0,0 +1,38 @@ +# -*- encoding: utf-8 -*- +# Copyright (c) 2019 ZTE Corporation +# +# 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_config import cfg + +keystone_client = cfg.OptGroup(name='keystone_client', + title='Configuration Options for Keystone') + +KEYSTONE_CLIENT_OPTS = [ + cfg.StrOpt('interface', + default='admin', + choices=['internal', 'public', 'admin'], + help='Type of endpoint to use in keystoneclient.'), + cfg.StrOpt('region_name', + help='Region in Identity service catalog to use for ' + 'communication with the OpenStack service.')] + + +def register_opts(conf): + conf.register_group(keystone_client) + conf.register_opts(KEYSTONE_CLIENT_OPTS, group=keystone_client) + + +def list_opts(): + return [('keystone_client', KEYSTONE_CLIENT_OPTS)] diff --git a/watcher/tests/conf/test_list_opts.py b/watcher/tests/conf/test_list_opts.py index 026364745..4b36ea9d2 100755 --- a/watcher/tests/conf/test_list_opts.py +++ b/watcher/tests/conf/test_list_opts.py @@ -32,7 +32,8 @@ class TestListOpts(base.TestCase): 'watcher_applier', 'watcher_datasources', 'watcher_planner', 'nova_client', 'glance_client', 'gnocchi_client', 'cinder_client', 'ceilometer_client', 'monasca_client', 'ironic_client', - 'neutron_client', 'watcher_clients_auth', 'collector'] + 'keystone_client', 'neutron_client', 'watcher_clients_auth', + 'collector'] self.opt_sections = list(dict(opts.list_opts()).keys()) def test_run_list_opts(self):