Merge "Add endpoint_type option for openstack clients."
This commit is contained in:
@@ -80,7 +80,9 @@ class OpenStackClients(object):
|
|||||||
return self._nova
|
return self._nova
|
||||||
|
|
||||||
novaclient_version = self._get_client_option('nova', 'api_version')
|
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,
|
self._nova = nvclient.Client(novaclient_version,
|
||||||
|
endpoint_type=nova_endpoint_type,
|
||||||
session=self.session)
|
session=self.session)
|
||||||
return self._nova
|
return self._nova
|
||||||
|
|
||||||
@@ -90,7 +92,10 @@ class OpenStackClients(object):
|
|||||||
return self._glance
|
return self._glance
|
||||||
|
|
||||||
glanceclient_version = self._get_client_option('glance', 'api_version')
|
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,
|
self._glance = glclient.Client(glanceclient_version,
|
||||||
|
interface=glance_endpoint_type,
|
||||||
session=self.session)
|
session=self.session)
|
||||||
return self._glance
|
return self._glance
|
||||||
|
|
||||||
@@ -101,7 +106,10 @@ class OpenStackClients(object):
|
|||||||
|
|
||||||
gnocchiclient_version = self._get_client_option('gnocchi',
|
gnocchiclient_version = self._get_client_option('gnocchi',
|
||||||
'api_version')
|
'api_version')
|
||||||
|
gnocchiclient_interface = self._get_client_option('gnocchi',
|
||||||
|
'endpoint_type')
|
||||||
self._gnocchi = gnclient.Client(gnocchiclient_version,
|
self._gnocchi = gnclient.Client(gnocchiclient_version,
|
||||||
|
interface=gnocchiclient_interface,
|
||||||
session=self.session)
|
session=self.session)
|
||||||
return self._gnocchi
|
return self._gnocchi
|
||||||
|
|
||||||
@@ -111,7 +119,10 @@ class OpenStackClients(object):
|
|||||||
return self._cinder
|
return self._cinder
|
||||||
|
|
||||||
cinderclient_version = self._get_client_option('cinder', 'api_version')
|
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,
|
self._cinder = ciclient.Client(cinderclient_version,
|
||||||
|
endpoint_type=cinder_endpoint_type,
|
||||||
session=self.session)
|
session=self.session)
|
||||||
return self._cinder
|
return self._cinder
|
||||||
|
|
||||||
@@ -122,8 +133,12 @@ class OpenStackClients(object):
|
|||||||
|
|
||||||
ceilometerclient_version = self._get_client_option('ceilometer',
|
ceilometerclient_version = self._get_client_option('ceilometer',
|
||||||
'api_version')
|
'api_version')
|
||||||
self._ceilometer = ceclient.get_client(ceilometerclient_version,
|
ceilometer_endpoint_type = self._get_client_option('ceilometer',
|
||||||
session=self.session)
|
'endpoint_type')
|
||||||
|
self._ceilometer = ceclient.get_client(
|
||||||
|
ceilometerclient_version,
|
||||||
|
endpoint_type=ceilometer_endpoint_type,
|
||||||
|
session=self.session)
|
||||||
return self._ceilometer
|
return self._ceilometer
|
||||||
|
|
||||||
@exception.wrap_keystone_exception
|
@exception.wrap_keystone_exception
|
||||||
@@ -133,6 +148,8 @@ class OpenStackClients(object):
|
|||||||
|
|
||||||
monascaclient_version = self._get_client_option(
|
monascaclient_version = self._get_client_option(
|
||||||
'monasca', 'api_version')
|
'monasca', 'api_version')
|
||||||
|
monascaclient_interface = self._get_client_option(
|
||||||
|
'monasca', 'interface')
|
||||||
token = self.session.get_token()
|
token = self.session.get_token()
|
||||||
watcher_clients_auth_config = CONF.get(_CLIENTS_AUTH_GROUP)
|
watcher_clients_auth_config = CONF.get(_CLIENTS_AUTH_GROUP)
|
||||||
service_type = 'monitoring'
|
service_type = 'monitoring'
|
||||||
@@ -148,7 +165,8 @@ class OpenStackClients(object):
|
|||||||
'username': watcher_clients_auth_config.username,
|
'username': watcher_clients_auth_config.username,
|
||||||
'password': watcher_clients_auth_config.password,
|
'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(
|
self._monasca = monclient.Client(
|
||||||
monascaclient_version, endpoint, **monasca_kwargs)
|
monascaclient_version, endpoint, **monasca_kwargs)
|
||||||
@@ -162,7 +180,11 @@ class OpenStackClients(object):
|
|||||||
|
|
||||||
neutronclient_version = self._get_client_option('neutron',
|
neutronclient_version = self._get_client_option('neutron',
|
||||||
'api_version')
|
'api_version')
|
||||||
|
neutron_endpoint_type = self._get_client_option('neutron',
|
||||||
|
'endpoint_type')
|
||||||
|
|
||||||
self._neutron = netclient.Client(neutronclient_version,
|
self._neutron = netclient.Client(neutronclient_version,
|
||||||
|
endpoint_type=neutron_endpoint_type,
|
||||||
session=self.session)
|
session=self.session)
|
||||||
self._neutron.format = 'json'
|
self._neutron.format = 'json'
|
||||||
return self._neutron
|
return self._neutron
|
||||||
|
|||||||
@@ -25,7 +25,12 @@ CEILOMETER_CLIENT_OPTS = [
|
|||||||
cfg.StrOpt('api_version',
|
cfg.StrOpt('api_version',
|
||||||
default='2',
|
default='2',
|
||||||
help='Version of Ceilometer API to use in '
|
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):
|
def register_opts(conf):
|
||||||
|
|||||||
@@ -24,7 +24,12 @@ cinder_client = cfg.OptGroup(name='cinder_client',
|
|||||||
CINDER_CLIENT_OPTS = [
|
CINDER_CLIENT_OPTS = [
|
||||||
cfg.StrOpt('api_version',
|
cfg.StrOpt('api_version',
|
||||||
default='2',
|
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):
|
def register_opts(conf):
|
||||||
|
|||||||
@@ -24,7 +24,12 @@ glance_client = cfg.OptGroup(name='glance_client',
|
|||||||
GLANCE_CLIENT_OPTS = [
|
GLANCE_CLIENT_OPTS = [
|
||||||
cfg.StrOpt('api_version',
|
cfg.StrOpt('api_version',
|
||||||
default='2',
|
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):
|
def register_opts(conf):
|
||||||
|
|||||||
@@ -25,6 +25,11 @@ GNOCCHI_CLIENT_OPTS = [
|
|||||||
cfg.StrOpt('api_version',
|
cfg.StrOpt('api_version',
|
||||||
default='1',
|
default='1',
|
||||||
help='Version of Gnocchi API to use in gnocchiclient.'),
|
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',
|
cfg.IntOpt('query_max_retries',
|
||||||
default=10,
|
default=10,
|
||||||
help='How many times Watcher is trying to query again'),
|
help='How many times Watcher is trying to query again'),
|
||||||
|
|||||||
@@ -24,7 +24,12 @@ monasca_client = cfg.OptGroup(name='monasca_client',
|
|||||||
MONASCA_CLIENT_OPTS = [
|
MONASCA_CLIENT_OPTS = [
|
||||||
cfg.StrOpt('api_version',
|
cfg.StrOpt('api_version',
|
||||||
default='2_0',
|
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):
|
def register_opts(conf):
|
||||||
|
|||||||
@@ -24,7 +24,12 @@ neutron_client = cfg.OptGroup(name='neutron_client',
|
|||||||
NEUTRON_CLIENT_OPTS = [
|
NEUTRON_CLIENT_OPTS = [
|
||||||
cfg.StrOpt('api_version',
|
cfg.StrOpt('api_version',
|
||||||
default='2.0',
|
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):
|
def register_opts(conf):
|
||||||
|
|||||||
@@ -24,7 +24,12 @@ nova_client = cfg.OptGroup(name='nova_client',
|
|||||||
NOVA_CLIENT_OPTS = [
|
NOVA_CLIENT_OPTS = [
|
||||||
cfg.StrOpt('api_version',
|
cfg.StrOpt('api_version',
|
||||||
default='2',
|
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):
|
def register_opts(conf):
|
||||||
|
|||||||
@@ -115,8 +115,10 @@ class TestClients(base.TestCase):
|
|||||||
osc = clients.OpenStackClients()
|
osc = clients.OpenStackClients()
|
||||||
osc._nova = None
|
osc._nova = None
|
||||||
osc.nova()
|
osc.nova()
|
||||||
mock_call.assert_called_once_with(CONF.nova_client.api_version,
|
mock_call.assert_called_once_with(
|
||||||
session=mock_session)
|
CONF.nova_client.api_version,
|
||||||
|
endpoint_type=CONF.nova_client.endpoint_type,
|
||||||
|
session=mock_session)
|
||||||
|
|
||||||
@mock.patch.object(clients.OpenStackClients, 'session')
|
@mock.patch.object(clients.OpenStackClients, 'session')
|
||||||
def test_clients_nova_diff_vers(self, mock_session):
|
def test_clients_nova_diff_vers(self, mock_session):
|
||||||
@@ -126,6 +128,14 @@ class TestClients(base.TestCase):
|
|||||||
osc.nova()
|
osc.nova()
|
||||||
self.assertEqual('2.3', osc.nova().api_version.get_string())
|
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')
|
@mock.patch.object(clients.OpenStackClients, 'session')
|
||||||
def test_clients_nova_cached(self, mock_session):
|
def test_clients_nova_cached(self, mock_session):
|
||||||
osc = clients.OpenStackClients()
|
osc = clients.OpenStackClients()
|
||||||
@@ -140,8 +150,10 @@ class TestClients(base.TestCase):
|
|||||||
osc = clients.OpenStackClients()
|
osc = clients.OpenStackClients()
|
||||||
osc._glance = None
|
osc._glance = None
|
||||||
osc.glance()
|
osc.glance()
|
||||||
mock_call.assert_called_once_with(CONF.glance_client.api_version,
|
mock_call.assert_called_once_with(
|
||||||
session=mock_session)
|
CONF.glance_client.api_version,
|
||||||
|
interface=CONF.glance_client.endpoint_type,
|
||||||
|
session=mock_session)
|
||||||
|
|
||||||
@mock.patch.object(clients.OpenStackClients, 'session')
|
@mock.patch.object(clients.OpenStackClients, 'session')
|
||||||
def test_clients_glance_diff_vers(self, mock_session):
|
def test_clients_glance_diff_vers(self, mock_session):
|
||||||
@@ -151,6 +163,14 @@ class TestClients(base.TestCase):
|
|||||||
osc.glance()
|
osc.glance()
|
||||||
self.assertEqual(1.0, osc.glance().version)
|
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')
|
@mock.patch.object(clients.OpenStackClients, 'session')
|
||||||
def test_clients_glance_cached(self, mock_session):
|
def test_clients_glance_cached(self, mock_session):
|
||||||
osc = clients.OpenStackClients()
|
osc = clients.OpenStackClients()
|
||||||
@@ -165,8 +185,10 @@ class TestClients(base.TestCase):
|
|||||||
osc = clients.OpenStackClients()
|
osc = clients.OpenStackClients()
|
||||||
osc._gnocchi = None
|
osc._gnocchi = None
|
||||||
osc.gnocchi()
|
osc.gnocchi()
|
||||||
mock_call.assert_called_once_with(CONF.gnocchi_client.api_version,
|
mock_call.assert_called_once_with(
|
||||||
session=mock_session)
|
CONF.gnocchi_client.api_version,
|
||||||
|
interface=CONF.gnocchi_client.endpoint_type,
|
||||||
|
session=mock_session)
|
||||||
|
|
||||||
@mock.patch.object(clients.OpenStackClients, 'session')
|
@mock.patch.object(clients.OpenStackClients, 'session')
|
||||||
def test_clients_gnocchi_diff_vers(self, mock_session):
|
def test_clients_gnocchi_diff_vers(self, mock_session):
|
||||||
@@ -177,6 +199,15 @@ class TestClients(base.TestCase):
|
|||||||
osc.gnocchi()
|
osc.gnocchi()
|
||||||
self.assertEqual(gnclient_v1.Client, type(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')
|
@mock.patch.object(clients.OpenStackClients, 'session')
|
||||||
def test_clients_gnocchi_cached(self, mock_session):
|
def test_clients_gnocchi_cached(self, mock_session):
|
||||||
osc = clients.OpenStackClients()
|
osc = clients.OpenStackClients()
|
||||||
@@ -191,8 +222,10 @@ class TestClients(base.TestCase):
|
|||||||
osc = clients.OpenStackClients()
|
osc = clients.OpenStackClients()
|
||||||
osc._cinder = None
|
osc._cinder = None
|
||||||
osc.cinder()
|
osc.cinder()
|
||||||
mock_call.assert_called_once_with(CONF.cinder_client.api_version,
|
mock_call.assert_called_once_with(
|
||||||
session=mock_session)
|
CONF.cinder_client.api_version,
|
||||||
|
endpoint_type=CONF.cinder_client.endpoint_type,
|
||||||
|
session=mock_session)
|
||||||
|
|
||||||
@mock.patch.object(clients.OpenStackClients, 'session')
|
@mock.patch.object(clients.OpenStackClients, 'session')
|
||||||
def test_clients_cinder_diff_vers(self, mock_session):
|
def test_clients_cinder_diff_vers(self, mock_session):
|
||||||
@@ -202,6 +235,14 @@ class TestClients(base.TestCase):
|
|||||||
osc.cinder()
|
osc.cinder()
|
||||||
self.assertEqual(ciclient_v1.Client, type(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')
|
@mock.patch.object(clients.OpenStackClients, 'session')
|
||||||
def test_clients_cinder_cached(self, mock_session):
|
def test_clients_cinder_cached(self, mock_session):
|
||||||
osc = clients.OpenStackClients()
|
osc = clients.OpenStackClients()
|
||||||
@@ -219,6 +260,7 @@ class TestClients(base.TestCase):
|
|||||||
mock_call.assert_called_once_with(
|
mock_call.assert_called_once_with(
|
||||||
CONF.ceilometer_client.api_version,
|
CONF.ceilometer_client.api_version,
|
||||||
None,
|
None,
|
||||||
|
endpoint_type=CONF.ceilometer_client.endpoint_type,
|
||||||
session=mock_session)
|
session=mock_session)
|
||||||
|
|
||||||
@mock.patch.object(clients.OpenStackClients, 'session')
|
@mock.patch.object(clients.OpenStackClients, 'session')
|
||||||
@@ -235,6 +277,18 @@ class TestClients(base.TestCase):
|
|||||||
self.assertEqual(ceclient_v2.Client,
|
self.assertEqual(ceclient_v2.Client,
|
||||||
type(osc.ceilometer()))
|
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(clients.OpenStackClients, 'session')
|
||||||
@mock.patch.object(ceclient_v2.Client, '_get_redirect_client')
|
@mock.patch.object(ceclient_v2.Client, '_get_redirect_client')
|
||||||
def test_clients_ceilometer_cached(self, mock_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 = clients.OpenStackClients()
|
||||||
osc._neutron = None
|
osc._neutron = None
|
||||||
osc.neutron()
|
osc.neutron()
|
||||||
mock_call.assert_called_once_with(CONF.neutron_client.api_version,
|
mock_call.assert_called_once_with(
|
||||||
session=mock_session)
|
CONF.neutron_client.api_version,
|
||||||
|
endpoint_type=CONF.neutron_client.endpoint_type,
|
||||||
|
session=mock_session)
|
||||||
|
|
||||||
@mock.patch.object(clients.OpenStackClients, 'session')
|
@mock.patch.object(clients.OpenStackClients, 'session')
|
||||||
def test_clients_neutron_diff_vers(self, mock_session):
|
def test_clients_neutron_diff_vers(self, mock_session):
|
||||||
@@ -266,6 +322,16 @@ class TestClients(base.TestCase):
|
|||||||
self.assertEqual(netclient_v2.Client,
|
self.assertEqual(netclient_v2.Client,
|
||||||
type(osc.neutron()))
|
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')
|
@mock.patch.object(clients.OpenStackClients, 'session')
|
||||||
def test_clients_neutron_cached(self, mock_session):
|
def test_clients_neutron_cached(self, mock_session):
|
||||||
osc = clients.OpenStackClients()
|
osc = clients.OpenStackClients()
|
||||||
|
|||||||
Reference in New Issue
Block a user