Do not use inner class of novaclient
Currently in Magnum, novaclient is initiated by directly call inner class of novaclient: novaclient.v2.client.Client. But it's not designed to be initialized directly. We should use 'novaclient.client.Client'. Reference links: [1] http://docs.openstack.org/developer/python-novaclient/api.html#usage [2] https://launchpad.net/bugs/1493576 Change-Id: I85c37e7934962c9f01a4be1131808222c315ba45 Closes-Bug: #1533510
This commit is contained in:
parent
8c07e2c5c2
commit
a4fd1a9689
|
@ -931,6 +931,9 @@
|
||||||
# communication with the OpenStack service. (string value)
|
# communication with the OpenStack service. (string value)
|
||||||
#endpoint_type = publicURL
|
#endpoint_type = publicURL
|
||||||
|
|
||||||
|
# Version of Nova API to use in novaclient. (string value)
|
||||||
|
#api_version = 2
|
||||||
|
|
||||||
|
|
||||||
[oslo_concurrency]
|
[oslo_concurrency]
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ from barbicanclient import client as barbicanclient
|
||||||
from glanceclient.v2 import client as glanceclient
|
from glanceclient.v2 import client as glanceclient
|
||||||
from heatclient.v1 import client as heatclient
|
from heatclient.v1 import client as heatclient
|
||||||
from neutronclient.v2_0 import client as neutronclient
|
from neutronclient.v2_0 import client as neutronclient
|
||||||
from novaclient.v2 import client as novaclient
|
from novaclient import client as novaclient
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
|
|
||||||
from magnum.common import exception
|
from magnum.common import exception
|
||||||
|
@ -83,7 +83,10 @@ nova_client_opts = [
|
||||||
default='publicURL',
|
default='publicURL',
|
||||||
help=_(
|
help=_(
|
||||||
'Type of endpoint in Identity service catalog to use '
|
'Type of endpoint in Identity service catalog to use '
|
||||||
'for communication with the OpenStack service.'))]
|
'for communication with the OpenStack service.')),
|
||||||
|
cfg.StrOpt('api_version',
|
||||||
|
default='2',
|
||||||
|
help=_('Version of Nova API to use in novaclient.'))]
|
||||||
|
|
||||||
neutron_client_opts = [
|
neutron_client_opts = [
|
||||||
cfg.StrOpt('region_name',
|
cfg.StrOpt('region_name',
|
||||||
|
@ -212,10 +215,12 @@ class OpenStackClients(object):
|
||||||
return self._nova
|
return self._nova
|
||||||
endpoint_type = self._get_client_option('nova', 'endpoint_type')
|
endpoint_type = self._get_client_option('nova', 'endpoint_type')
|
||||||
region_name = self._get_client_option('nova', 'region_name')
|
region_name = self._get_client_option('nova', 'region_name')
|
||||||
|
novaclient_version = self._get_client_option('nova', 'api_version')
|
||||||
endpoint = self.url_for(service_type='compute',
|
endpoint = self.url_for(service_type='compute',
|
||||||
endpoint_type=endpoint_type,
|
endpoint_type=endpoint_type,
|
||||||
region_name=region_name)
|
region_name=region_name)
|
||||||
self._nova = novaclient.Client(auth_token=self.auth_token)
|
self._nova = novaclient.Client(novaclient_version,
|
||||||
|
auth_token=self.auth_token)
|
||||||
self._nova.client.management_url = endpoint
|
self._nova.client.management_url = endpoint
|
||||||
return self._nova
|
return self._nova
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ from glanceclient.v2 import client as glanceclient
|
||||||
from heatclient.v1 import client as heatclient
|
from heatclient.v1 import client as heatclient
|
||||||
import mock
|
import mock
|
||||||
from neutronclient.v2_0 import client as neutronclient
|
from neutronclient.v2_0 import client as neutronclient
|
||||||
from novaclient.v2 import client as novaclient
|
from novaclient import client as novaclient
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
|
|
||||||
from magnum.common import clients
|
from magnum.common import clients
|
||||||
|
@ -30,6 +30,8 @@ class ClientsTest(base.BaseTestCase):
|
||||||
|
|
||||||
cfg.CONF.set_override('auth_uri', 'http://server.test:5000/v2.0',
|
cfg.CONF.set_override('auth_uri', 'http://server.test:5000/v2.0',
|
||||||
group='keystone_authtoken')
|
group='keystone_authtoken')
|
||||||
|
cfg.CONF.import_opt('api_version', 'magnum.common.clients',
|
||||||
|
group='nova_client')
|
||||||
|
|
||||||
@mock.patch.object(clients.OpenStackClients, 'keystone')
|
@mock.patch.object(clients.OpenStackClients, 'keystone')
|
||||||
def test_url_for(self, mock_keystone):
|
def test_url_for(self, mock_keystone):
|
||||||
|
@ -240,8 +242,8 @@ class ClientsTest(base.BaseTestCase):
|
||||||
obj = clients.OpenStackClients(con)
|
obj = clients.OpenStackClients(con)
|
||||||
obj._nova = None
|
obj._nova = None
|
||||||
obj.nova()
|
obj.nova()
|
||||||
mock_call.assert_called_once_with(
|
mock_call.assert_called_once_with(cfg.CONF.nova_client.api_version,
|
||||||
auth_token='3bcc3d3a03f44e3d8377f9247b0ad155')
|
auth_token=con.auth_token)
|
||||||
mock_url.assert_called_once_with(service_type='compute',
|
mock_url.assert_called_once_with(service_type='compute',
|
||||||
endpoint_type='publicURL',
|
endpoint_type='publicURL',
|
||||||
region_name=expected_region_name)
|
region_name=expected_region_name)
|
||||||
|
|
Loading…
Reference in New Issue