Add endpoint_type option for openstack clients.

Interface type internalURL' is used as a default value.

Change-Id: Ia1acbfbfd2a1eecd85e5aa1d2e19665d411c4c58
Closes-Bug: #1671405
This commit is contained in:
Margarita Shakhova 2017-03-22 18:36:36 +03:00 committed by Margarita Shakhova
parent f106076d70
commit cde60d2ead
9 changed files with 142 additions and 19 deletions

View File

@ -80,7 +80,9 @@ class OpenStackClients(object):
return self._nova
novaclient_version = self._get_client_option('nova', 'api_version')
nova_endpoint_type = self._get_client_option('nova', 'endpoint_type')
self._nova = nvclient.Client(novaclient_version,
endpoint_type=nova_endpoint_type,
session=self.session)
return self._nova
@ -90,7 +92,10 @@ class OpenStackClients(object):
return self._glance
glanceclient_version = self._get_client_option('glance', 'api_version')
glance_endpoint_type = self._get_client_option('glance',
'endpoint_type')
self._glance = glclient.Client(glanceclient_version,
interface=glance_endpoint_type,
session=self.session)
return self._glance
@ -101,7 +106,10 @@ class OpenStackClients(object):
gnocchiclient_version = self._get_client_option('gnocchi',
'api_version')
gnocchiclient_interface = self._get_client_option('gnocchi',
'endpoint_type')
self._gnocchi = gnclient.Client(gnocchiclient_version,
interface=gnocchiclient_interface,
session=self.session)
return self._gnocchi
@ -111,7 +119,10 @@ class OpenStackClients(object):
return self._cinder
cinderclient_version = self._get_client_option('cinder', 'api_version')
cinder_endpoint_type = self._get_client_option('cinder',
'endpoint_type')
self._cinder = ciclient.Client(cinderclient_version,
endpoint_type=cinder_endpoint_type,
session=self.session)
return self._cinder
@ -122,8 +133,12 @@ class OpenStackClients(object):
ceilometerclient_version = self._get_client_option('ceilometer',
'api_version')
self._ceilometer = ceclient.get_client(ceilometerclient_version,
session=self.session)
ceilometer_endpoint_type = self._get_client_option('ceilometer',
'endpoint_type')
self._ceilometer = ceclient.get_client(
ceilometerclient_version,
endpoint_type=ceilometer_endpoint_type,
session=self.session)
return self._ceilometer
@exception.wrap_keystone_exception
@ -133,6 +148,8 @@ class OpenStackClients(object):
monascaclient_version = self._get_client_option(
'monasca', 'api_version')
monascaclient_interface = self._get_client_option(
'monasca', 'interface')
token = self.session.get_token()
watcher_clients_auth_config = CONF.get(_CLIENTS_AUTH_GROUP)
service_type = 'monitoring'
@ -148,7 +165,8 @@ class OpenStackClients(object):
'username': watcher_clients_auth_config.username,
'password': watcher_clients_auth_config.password,
}
endpoint = self.session.get_endpoint(service_type=service_type)
endpoint = self.session.get_endpoint(service_type=service_type,
interface=monascaclient_interface)
self._monasca = monclient.Client(
monascaclient_version, endpoint, **monasca_kwargs)
@ -162,7 +180,11 @@ class OpenStackClients(object):
neutronclient_version = self._get_client_option('neutron',
'api_version')
neutron_endpoint_type = self._get_client_option('neutron',
'endpoint_type')
self._neutron = netclient.Client(neutronclient_version,
endpoint_type=neutron_endpoint_type,
session=self.session)
self._neutron.format = 'json'
return self._neutron

View File

@ -25,7 +25,12 @@ CEILOMETER_CLIENT_OPTS = [
cfg.StrOpt('api_version',
default='2',
help='Version of Ceilometer API to use in '
'ceilometerclient.')]
'ceilometerclient.'),
cfg.StrOpt('endpoint_type',
default='internalURL',
help='Type of endpoint to use in ceilometerclient.'
'Supported values: internalURL, publicURL, adminURL'
'The default is internalURL.')]
def register_opts(conf):

View File

@ -24,7 +24,12 @@ cinder_client = cfg.OptGroup(name='cinder_client',
CINDER_CLIENT_OPTS = [
cfg.StrOpt('api_version',
default='2',
help='Version of Cinder API to use in cinderclient.')]
help='Version of Cinder API to use in cinderclient.'),
cfg.StrOpt('endpoint_type',
default='internalURL',
help='Type of endpoint to use in cinderclient.'
'Supported values: internalURL, publicURL, adminURL'
'The default is internalURL.')]
def register_opts(conf):

View File

@ -24,7 +24,12 @@ glance_client = cfg.OptGroup(name='glance_client',
GLANCE_CLIENT_OPTS = [
cfg.StrOpt('api_version',
default='2',
help='Version of Glance API to use in glanceclient.')]
help='Version of Glance API to use in glanceclient.'),
cfg.StrOpt('endpoint_type',
default='internalURL',
help='Type of endpoint to use in glanceclient.'
'Supported values: internalURL, publicURL, adminURL'
'The default is internalURL.')]
def register_opts(conf):

View File

@ -25,6 +25,11 @@ GNOCCHI_CLIENT_OPTS = [
cfg.StrOpt('api_version',
default='1',
help='Version of Gnocchi API to use in gnocchiclient.'),
cfg.StrOpt('endpoint_type',
default='internalURL',
help='Type of endpoint to use in gnocchi client.'
'Supported values: internalURL, publicURL, adminURL'
'The default is internalURL.'),
cfg.IntOpt('query_max_retries',
default=10,
help='How many times Watcher is trying to query again'),

View File

@ -24,7 +24,12 @@ monasca_client = cfg.OptGroup(name='monasca_client',
MONASCA_CLIENT_OPTS = [
cfg.StrOpt('api_version',
default='2_0',
help='Version of Monasca API to use in monascaclient.')]
help='Version of Monasca API to use in monascaclient.'),
cfg.StrOpt('interface',
default='internal',
help='Type of interface used for monasca endpoint.'
'Supported values: internal, public, admin'
'The default is internal.')]
def register_opts(conf):

View File

@ -24,7 +24,12 @@ neutron_client = cfg.OptGroup(name='neutron_client',
NEUTRON_CLIENT_OPTS = [
cfg.StrOpt('api_version',
default='2.0',
help='Version of Neutron API to use in neutronclient.')]
help='Version of Neutron API to use in neutronclient.'),
cfg.StrOpt('endpoint_type',
default='internalURL',
help='Type of endpoint to use in neutronclient.'
'Supported values: internalURL, publicURL, adminURL'
'The default is internalURL.')]
def register_opts(conf):

View File

@ -24,7 +24,12 @@ nova_client = cfg.OptGroup(name='nova_client',
NOVA_CLIENT_OPTS = [
cfg.StrOpt('api_version',
default='2',
help='Version of Nova API to use in novaclient.')]
help='Version of Nova API to use in novaclient.'),
cfg.StrOpt('endpoint_type',
default='internalURL',
help='Type of endpoint to use in novaclient.'
'Supported values: internalURL, publicURL, adminURL'
'The default is internalURL.')]
def register_opts(conf):

View File

@ -115,8 +115,10 @@ class TestClients(base.TestCase):
osc = clients.OpenStackClients()
osc._nova = None
osc.nova()
mock_call.assert_called_once_with(CONF.nova_client.api_version,
session=mock_session)
mock_call.assert_called_once_with(
CONF.nova_client.api_version,
endpoint_type=CONF.nova_client.endpoint_type,
session=mock_session)
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_nova_diff_vers(self, mock_session):
@ -126,6 +128,14 @@ class TestClients(base.TestCase):
osc.nova()
self.assertEqual('2.3', osc.nova().api_version.get_string())
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_nova_diff_endpoint(self, mock_session):
CONF.set_override('endpoint_type', 'publicURL', group='nova_client')
osc = clients.OpenStackClients()
osc._nova = None
osc.nova()
self.assertEqual('publicURL', osc.nova().client.interface)
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_nova_cached(self, mock_session):
osc = clients.OpenStackClients()
@ -140,8 +150,10 @@ class TestClients(base.TestCase):
osc = clients.OpenStackClients()
osc._glance = None
osc.glance()
mock_call.assert_called_once_with(CONF.glance_client.api_version,
session=mock_session)
mock_call.assert_called_once_with(
CONF.glance_client.api_version,
interface=CONF.glance_client.endpoint_type,
session=mock_session)
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_glance_diff_vers(self, mock_session):
@ -151,6 +163,14 @@ class TestClients(base.TestCase):
osc.glance()
self.assertEqual(1.0, osc.glance().version)
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_glance_diff_endpoint(self, mock_session):
CONF.set_override('endpoint_type', 'publicURL', group='glance_client')
osc = clients.OpenStackClients()
osc._glance = None
osc.glance()
self.assertEqual('publicURL', osc.glance().http_client.interface)
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_glance_cached(self, mock_session):
osc = clients.OpenStackClients()
@ -165,8 +185,10 @@ class TestClients(base.TestCase):
osc = clients.OpenStackClients()
osc._gnocchi = None
osc.gnocchi()
mock_call.assert_called_once_with(CONF.gnocchi_client.api_version,
session=mock_session)
mock_call.assert_called_once_with(
CONF.gnocchi_client.api_version,
interface=CONF.gnocchi_client.endpoint_type,
session=mock_session)
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_gnocchi_diff_vers(self, mock_session):
@ -177,6 +199,15 @@ class TestClients(base.TestCase):
osc.gnocchi()
self.assertEqual(gnclient_v1.Client, type(osc.gnocchi()))
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_gnocchi_diff_endpoint(self, mock_session):
# gnocchiclient currently only has one version (v1)
CONF.set_override('endpoint_type', 'publicURL', group='gnocchi_client')
osc = clients.OpenStackClients()
osc._gnocchi = None
osc.gnocchi()
self.assertEqual('publicURL', osc.gnocchi().api.interface)
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_gnocchi_cached(self, mock_session):
osc = clients.OpenStackClients()
@ -191,8 +222,10 @@ class TestClients(base.TestCase):
osc = clients.OpenStackClients()
osc._cinder = None
osc.cinder()
mock_call.assert_called_once_with(CONF.cinder_client.api_version,
session=mock_session)
mock_call.assert_called_once_with(
CONF.cinder_client.api_version,
endpoint_type=CONF.cinder_client.endpoint_type,
session=mock_session)
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_cinder_diff_vers(self, mock_session):
@ -202,6 +235,14 @@ class TestClients(base.TestCase):
osc.cinder()
self.assertEqual(ciclient_v1.Client, type(osc.cinder()))
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_cinder_diff_endpoint(self, mock_session):
CONF.set_override('endpoint_type', 'publicURL', group='cinder_client')
osc = clients.OpenStackClients()
osc._cinder = None
osc.cinder()
self.assertEqual('publicURL', osc.cinder().client.interface)
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_cinder_cached(self, mock_session):
osc = clients.OpenStackClients()
@ -219,6 +260,7 @@ class TestClients(base.TestCase):
mock_call.assert_called_once_with(
CONF.ceilometer_client.api_version,
None,
endpoint_type=CONF.ceilometer_client.endpoint_type,
session=mock_session)
@mock.patch.object(clients.OpenStackClients, 'session')
@ -235,6 +277,18 @@ class TestClients(base.TestCase):
self.assertEqual(ceclient_v2.Client,
type(osc.ceilometer()))
@mock.patch.object(clients.OpenStackClients, 'session')
@mock.patch.object(ceclient_v2.Client, '_get_redirect_client')
def test_clients_ceilometer_diff_endpoint(self, mock_get_redirect_client,
mock_session):
mock_get_redirect_client.return_value = [mock.Mock(), mock.Mock()]
CONF.set_override('endpoint_type', 'publicURL',
group='ceilometer_client')
osc = clients.OpenStackClients()
osc._ceilometer = None
osc.ceilometer()
self.assertEqual('publicURL', osc.ceilometer().http_client.interface)
@mock.patch.object(clients.OpenStackClients, 'session')
@mock.patch.object(ceclient_v2.Client, '_get_redirect_client')
def test_clients_ceilometer_cached(self, mock_get_redirect_client,
@ -252,8 +306,10 @@ class TestClients(base.TestCase):
osc = clients.OpenStackClients()
osc._neutron = None
osc.neutron()
mock_call.assert_called_once_with(CONF.neutron_client.api_version,
session=mock_session)
mock_call.assert_called_once_with(
CONF.neutron_client.api_version,
endpoint_type=CONF.neutron_client.endpoint_type,
session=mock_session)
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_neutron_diff_vers(self, mock_session):
@ -266,6 +322,16 @@ class TestClients(base.TestCase):
self.assertEqual(netclient_v2.Client,
type(osc.neutron()))
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_neutron_diff_endpoint(self, mock_session):
'''neutronclient currently only has one version (v2)'''
CONF.set_override('endpoint_type', 'publicURL',
group='neutron_client')
osc = clients.OpenStackClients()
osc._neutron = None
osc.neutron()
self.assertEqual('publicURL', osc.neutron().httpclient.interface)
@mock.patch.object(clients.OpenStackClients, 'session')
def test_clients_neutron_cached(self, mock_session):
osc = clients.OpenStackClients()