Remove nova api extension checks
Entire api extension concept has been removed from nova. API bindings which have been deprecated since Train release are removed with https://review.opendev.org/#/c/686516/. Change-Id: Ifd318a54ef01eb500cebbc11e642b3ae62e5fc79
This commit is contained in:
parent
61048ef16b
commit
49a2a1e55a
@ -82,11 +82,9 @@ class NovaClientPlugin(microversion_mixin.MicroversionMixin,
|
|||||||
|
|
||||||
def _get_args(self, version):
|
def _get_args(self, version):
|
||||||
endpoint_type = self._get_client_option(CLIENT_NAME, 'endpoint_type')
|
endpoint_type = self._get_client_option(CLIENT_NAME, 'endpoint_type')
|
||||||
extensions = nc.discover_extensions(version)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'session': self.context.keystone_session,
|
'session': self.context.keystone_session,
|
||||||
'extensions': extensions,
|
|
||||||
'endpoint_type': endpoint_type,
|
'endpoint_type': endpoint_type,
|
||||||
'service_type': self.COMPUTE,
|
'service_type': self.COMPUTE,
|
||||||
'region_name': self._get_region_name(),
|
'region_name': self._get_region_name(),
|
||||||
@ -829,15 +827,6 @@ echo -e '%s\tALL=(ALL)\tNOPASSWD: ALL' >> /etc/sudoers
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@os_client.MEMOIZE_EXTENSIONS
|
|
||||||
def _list_extensions(self):
|
|
||||||
extensions = self.client().list_extensions.show_all()
|
|
||||||
return set(extension.alias for extension in extensions)
|
|
||||||
|
|
||||||
def has_extension(self, alias):
|
|
||||||
"""Check if specific extension is present."""
|
|
||||||
return alias in self._list_extensions()
|
|
||||||
|
|
||||||
|
|
||||||
class NovaBaseConstraint(constraints.BaseCustomConstraint):
|
class NovaBaseConstraint(constraints.BaseCustomConstraint):
|
||||||
|
|
||||||
|
@ -41,8 +41,6 @@ class NovaFlavor(resource.Resource):
|
|||||||
|
|
||||||
default_client_name = 'nova'
|
default_client_name = 'nova'
|
||||||
|
|
||||||
required_service_extension = 'os-flavor-manage'
|
|
||||||
|
|
||||||
entity = 'flavors'
|
entity = 'flavors'
|
||||||
|
|
||||||
PROPERTIES = (
|
PROPERTIES = (
|
||||||
|
@ -49,8 +49,6 @@ class NovaFloatingIp(resource.Resource):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
required_service_extension = 'os-floating-ips'
|
|
||||||
|
|
||||||
PROPERTIES = (POOL,) = ('pool',)
|
PROPERTIES = (POOL,) = ('pool',)
|
||||||
|
|
||||||
ATTRIBUTES = (
|
ATTRIBUTES = (
|
||||||
|
@ -38,8 +38,6 @@ class HostAggregate(resource.Resource):
|
|||||||
|
|
||||||
entity = 'aggregates'
|
entity = 'aggregates'
|
||||||
|
|
||||||
required_service_extension = 'os-aggregates'
|
|
||||||
|
|
||||||
PROPERTIES = (
|
PROPERTIES = (
|
||||||
NAME, AVAILABILITY_ZONE, HOSTS, METADATA
|
NAME, AVAILABILITY_ZONE, HOSTS, METADATA
|
||||||
) = (
|
) = (
|
||||||
|
@ -43,8 +43,6 @@ class KeyPair(resource.Resource):
|
|||||||
|
|
||||||
support_status = support.SupportStatus(version='2014.1')
|
support_status = support.SupportStatus(version='2014.1')
|
||||||
|
|
||||||
required_service_extension = 'os-keypairs'
|
|
||||||
|
|
||||||
PROPERTIES = (
|
PROPERTIES = (
|
||||||
NAME, SAVE_PRIVATE_KEY, PUBLIC_KEY, KEY_TYPE, USER,
|
NAME, SAVE_PRIVATE_KEY, PUBLIC_KEY, KEY_TYPE, USER,
|
||||||
) = (
|
) = (
|
||||||
|
@ -53,8 +53,6 @@ class NovaQuota(resource.Resource):
|
|||||||
|
|
||||||
entity = 'quotas'
|
entity = 'quotas'
|
||||||
|
|
||||||
required_service_extension = 'os-quota-sets'
|
|
||||||
|
|
||||||
PROPERTIES = (
|
PROPERTIES = (
|
||||||
PROJECT, CORES, FIXED_IPS, FLOATING_IPS, INSTANCES,
|
PROJECT, CORES, FIXED_IPS, FLOATING_IPS, INSTANCES,
|
||||||
INJECTED_FILES, INJECTED_FILE_CONTENT_BYTES, INJECTED_FILE_PATH_BYTES,
|
INJECTED_FILES, INJECTED_FILE_CONTENT_BYTES, INJECTED_FILE_PATH_BYTES,
|
||||||
|
@ -33,8 +33,6 @@ class ServerGroup(resource.Resource):
|
|||||||
|
|
||||||
entity = 'server_groups'
|
entity = 'server_groups'
|
||||||
|
|
||||||
required_service_extension = 'os-server-groups'
|
|
||||||
|
|
||||||
PROPERTIES = (
|
PROPERTIES = (
|
||||||
NAME, POLICIES
|
NAME, POLICIES
|
||||||
) = (
|
) = (
|
||||||
|
@ -190,12 +190,6 @@ class ServerNetworkMixin(object):
|
|||||||
creating. We need to store information about that ports, so store
|
creating. We need to store information about that ports, so store
|
||||||
their IDs to data with key `external_ports`.
|
their IDs to data with key `external_ports`.
|
||||||
"""
|
"""
|
||||||
# check if os-attach-interfaces extension is available on this cloud.
|
|
||||||
# If it's not, then novaclient's interface_list method cannot be used
|
|
||||||
# to get the list of interfaces.
|
|
||||||
if not self.client_plugin().has_extension('os-attach-interfaces'):
|
|
||||||
return
|
|
||||||
|
|
||||||
server = self.client().servers.get(self.resource_id)
|
server = self.client().servers.get(self.resource_id)
|
||||||
ifaces = server.interface_list()
|
ifaces = server.interface_list()
|
||||||
external_port_ids = set(iface.port_id for iface in ifaces)
|
external_port_ids = set(iface.port_id for iface in ifaces)
|
||||||
|
@ -45,27 +45,21 @@ class NovaClientPluginTest(NovaClientPluginTestCase):
|
|||||||
|
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
context = utils.dummy_context()
|
context = utils.dummy_context()
|
||||||
ext_mock = self.patchobject(nc, 'discover_extensions')
|
|
||||||
plugin = context.clients.client_plugin('nova')
|
plugin = context.clients.client_plugin('nova')
|
||||||
plugin.max_microversion = '2.53'
|
plugin.max_microversion = '2.53'
|
||||||
client = plugin.client()
|
client = plugin.client()
|
||||||
ext_mock.assert_called_once_with('2.53')
|
|
||||||
self.assertIsNotNone(client.servers)
|
self.assertIsNotNone(client.servers)
|
||||||
|
|
||||||
def test_v2_26_create(self):
|
def test_v2_26_create(self):
|
||||||
ctxt = utils.dummy_context()
|
ctxt = utils.dummy_context()
|
||||||
ext_mock = self.patchobject(nc, 'discover_extensions')
|
|
||||||
self.patchobject(nc, 'Client', return_value=mock.Mock())
|
self.patchobject(nc, 'Client', return_value=mock.Mock())
|
||||||
|
|
||||||
plugin = ctxt.clients.client_plugin('nova')
|
plugin = ctxt.clients.client_plugin('nova')
|
||||||
plugin.max_microversion = '2.53'
|
plugin.max_microversion = '2.53'
|
||||||
plugin.client(version='2.26')
|
plugin.client(version='2.26')
|
||||||
|
|
||||||
ext_mock.assert_called_once_with('2.26')
|
|
||||||
|
|
||||||
def test_v2_26_create_failed(self):
|
def test_v2_26_create_failed(self):
|
||||||
ctxt = utils.dummy_context()
|
ctxt = utils.dummy_context()
|
||||||
self.patchobject(nc, 'discover_extensions')
|
|
||||||
plugin = ctxt.clients.client_plugin('nova')
|
plugin = ctxt.clients.client_plugin('nova')
|
||||||
plugin.max_microversion = '2.23'
|
plugin.max_microversion = '2.23'
|
||||||
client_stub = mock.Mock()
|
client_stub = mock.Mock()
|
||||||
@ -654,30 +648,3 @@ class ConsoleUrlsTest(common.HeatTestCase):
|
|||||||
self.console_method.side_effect = exc("spam")
|
self.console_method.side_effect = exc("spam")
|
||||||
|
|
||||||
self._test_get_console_url_tolerate_exception('spam')
|
self._test_get_console_url_tolerate_exception('spam')
|
||||||
|
|
||||||
|
|
||||||
class NovaClientPluginExtensionsTest(NovaClientPluginTestCase):
|
|
||||||
"""Tests for extensions in novaclient."""
|
|
||||||
|
|
||||||
def test_has_no_extensions(self):
|
|
||||||
self.nova_client.list_extensions.show_all.return_value = []
|
|
||||||
self.assertFalse(self.nova_plugin.has_extension(
|
|
||||||
"os-virtual-interfaces"))
|
|
||||||
|
|
||||||
def test_has_no_interface_extensions(self):
|
|
||||||
mock_extension = mock.Mock()
|
|
||||||
p = mock.PropertyMock(return_value='os-xxxx')
|
|
||||||
type(mock_extension).alias = p
|
|
||||||
self.nova_client.list_extensions.show_all.return_value = [
|
|
||||||
mock_extension]
|
|
||||||
self.assertFalse(self.nova_plugin.has_extension(
|
|
||||||
"os-virtual-interfaces"))
|
|
||||||
|
|
||||||
def test_has_os_interface_extension(self):
|
|
||||||
mock_extension = mock.Mock()
|
|
||||||
p = mock.PropertyMock(return_value='os-virtual-interfaces')
|
|
||||||
type(mock_extension).alias = p
|
|
||||||
self.nova_client.list_extensions.show_all.return_value = [
|
|
||||||
mock_extension]
|
|
||||||
self.assertTrue(self.nova_plugin.has_extension(
|
|
||||||
"os-virtual-interfaces"))
|
|
||||||
|
@ -363,6 +363,19 @@ class FakeSessionClient(base_client.SessionClient):
|
|||||||
'id': 3, 'name': 'm1.large', 'ram': 512, 'disk': 20,
|
'id': 3, 'name': 'm1.large', 'ram': 512, 'disk': 20,
|
||||||
'OS-FLV-EXT-DATA:ephemeral': 30}})
|
'OS-FLV-EXT-DATA:ephemeral': 30}})
|
||||||
|
|
||||||
|
#
|
||||||
|
# Interfaces
|
||||||
|
#
|
||||||
|
|
||||||
|
def get_servers_5678_os_interface(self, **kw):
|
||||||
|
return (200, {'interfaceAttachments':
|
||||||
|
[{"fixed_ips":
|
||||||
|
[{"ip_address": "10.0.0.1",
|
||||||
|
"subnet_id": "f8a6e8f8-c2ec-497c-9f23-da9616de54ef"
|
||||||
|
}],
|
||||||
|
"port_id": "ce531f90-199f-48c0-816c-13e38010b442"
|
||||||
|
}]})
|
||||||
|
|
||||||
#
|
#
|
||||||
# Floating ips
|
# Floating ips
|
||||||
#
|
#
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
|
|
||||||
import mock
|
import mock
|
||||||
|
|
||||||
from heat.engine.clients.os import nova as novac
|
|
||||||
from heat.engine import stack
|
from heat.engine import stack
|
||||||
from heat.engine import template
|
from heat.engine import template
|
||||||
from heat.tests import common
|
from heat.tests import common
|
||||||
@ -42,8 +41,6 @@ flavor_template = {
|
|||||||
class NovaFlavorTest(common.HeatTestCase):
|
class NovaFlavorTest(common.HeatTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(NovaFlavorTest, self).setUp()
|
super(NovaFlavorTest, self).setUp()
|
||||||
self.patchobject(novac.NovaClientPlugin, 'has_extension',
|
|
||||||
return_value=True)
|
|
||||||
self.ctx = utils.dummy_context()
|
self.ctx = utils.dummy_context()
|
||||||
|
|
||||||
def create_flavor(self, with_name_id=False, is_public=True):
|
def create_flavor(self, with_name_id=False, is_public=True):
|
||||||
|
@ -39,9 +39,6 @@ AGGREGATE_TEMPLATE = {
|
|||||||
class NovaHostAggregateTest(common.HeatTestCase):
|
class NovaHostAggregateTest(common.HeatTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(NovaHostAggregateTest, self).setUp()
|
super(NovaHostAggregateTest, self).setUp()
|
||||||
self.patchobject(nova.NovaClientPlugin,
|
|
||||||
'has_extension',
|
|
||||||
return_value=True)
|
|
||||||
self.ctx = utils.dummy_context()
|
self.ctx = utils.dummy_context()
|
||||||
|
|
||||||
self.stack = stack.Stack(
|
self.stack = stack.Stack(
|
||||||
|
@ -46,8 +46,6 @@ class NovaKeyPairTest(common.HeatTestCase):
|
|||||||
self.fake_nova = mock.MagicMock()
|
self.fake_nova = mock.MagicMock()
|
||||||
self.fake_keypairs = mock.MagicMock()
|
self.fake_keypairs = mock.MagicMock()
|
||||||
self.fake_nova.keypairs = self.fake_keypairs
|
self.fake_nova.keypairs = self.fake_keypairs
|
||||||
self.patchobject(nova.NovaClientPlugin, 'has_extension',
|
|
||||||
return_value=True)
|
|
||||||
self.cp_mock = self.patchobject(nova.NovaClientPlugin, 'client',
|
self.cp_mock = self.patchobject(nova.NovaClientPlugin, 'client',
|
||||||
return_value=self.fake_nova)
|
return_value=self.fake_nova)
|
||||||
|
|
||||||
|
@ -16,7 +16,6 @@ import six
|
|||||||
from heat.common import exception
|
from heat.common import exception
|
||||||
from heat.common import template_format
|
from heat.common import template_format
|
||||||
from heat.engine.clients.os import keystone as k_plugin
|
from heat.engine.clients.os import keystone as k_plugin
|
||||||
from heat.engine.clients.os import nova as n_plugin
|
|
||||||
from heat.engine import rsrc_defn
|
from heat.engine import rsrc_defn
|
||||||
from heat.engine import stack as parser
|
from heat.engine import stack as parser
|
||||||
from heat.engine import template
|
from heat.engine import template
|
||||||
@ -62,8 +61,6 @@ class NovaQuotaTest(common.HeatTestCase):
|
|||||||
super(NovaQuotaTest, self).setUp()
|
super(NovaQuotaTest, self).setUp()
|
||||||
|
|
||||||
self.ctx = utils.dummy_context()
|
self.ctx = utils.dummy_context()
|
||||||
self.patchobject(n_plugin.NovaClientPlugin, 'has_extension',
|
|
||||||
return_value=True)
|
|
||||||
self.patchobject(k_plugin.KeystoneClientPlugin, 'get_project_id',
|
self.patchobject(k_plugin.KeystoneClientPlugin, 'get_project_id',
|
||||||
return_value='some_project_id')
|
return_value='some_project_id')
|
||||||
tpl = template_format.parse(quota_template)
|
tpl = template_format.parse(quota_template)
|
||||||
|
@ -1349,8 +1349,6 @@ class ServersTest(common.HeatTestCase):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
self.patchobject(nova.NovaClientPlugin, 'has_extension',
|
|
||||||
return_value=True)
|
|
||||||
t = template_format.parse(nova_keypair_template)
|
t = template_format.parse(nova_keypair_template)
|
||||||
templ = template.Template(t)
|
templ = template.Template(t)
|
||||||
self.patchobject(nova.NovaClientPlugin, 'client',
|
self.patchobject(nova.NovaClientPlugin, 'client',
|
||||||
@ -4947,7 +4945,6 @@ class ServerInternalPortTest(ServersTest):
|
|||||||
server.client = mock.Mock()
|
server.client = mock.Mock()
|
||||||
server.client().servers.get.return_value = Fake()
|
server.client().servers.get.return_value = Fake()
|
||||||
server.client_plugin = mock.Mock()
|
server.client_plugin = mock.Mock()
|
||||||
server.client_plugin().has_extension.return_value = True
|
|
||||||
server._data = {"internal_ports": '[{"id": "1122"}]',
|
server._data = {"internal_ports": '[{"id": "1122"}]',
|
||||||
"external_ports": '[{"id": "3344"},{"id": "5566"}]'}
|
"external_ports": '[{"id": "3344"},{"id": "5566"}]'}
|
||||||
|
|
||||||
@ -5220,28 +5217,3 @@ class ServerInternalPortTest(ServersTest):
|
|||||||
mock.call('prev_rsrc', 1122),
|
mock.call('prev_rsrc', 1122),
|
||||||
mock.call('prev_rsrc', 3344),
|
mock.call('prev_rsrc', 3344),
|
||||||
mock.call('prev_rsrc', 5566)])
|
mock.call('prev_rsrc', 5566)])
|
||||||
|
|
||||||
def test_store_external_ports_os_interface_not_installed(self):
|
|
||||||
t, stack, server = self._return_template_stack_and_rsrc_defn(
|
|
||||||
'test', tmpl_server_with_network_id)
|
|
||||||
|
|
||||||
class Fake(object):
|
|
||||||
def interface_list(self):
|
|
||||||
return [iface('1122'),
|
|
||||||
iface('1122'),
|
|
||||||
iface('2233'),
|
|
||||||
iface('3344')]
|
|
||||||
|
|
||||||
server.client = mock.Mock()
|
|
||||||
server.client().servers.get.return_value = Fake()
|
|
||||||
server.client_plugin = mock.Mock()
|
|
||||||
server.client_plugin().has_extension.return_value = False
|
|
||||||
|
|
||||||
server._data = {"internal_ports": '[{"id": "1122"}]',
|
|
||||||
"external_ports": '[{"id": "3344"},{"id": "5566"}]'}
|
|
||||||
|
|
||||||
iface = collections.namedtuple('iface', ['port_id'])
|
|
||||||
update_data = self.patchobject(server, '_data_update_ports')
|
|
||||||
|
|
||||||
server.store_external_ports()
|
|
||||||
self.assertEqual(0, update_data.call_count)
|
|
||||||
|
@ -16,7 +16,6 @@ import json
|
|||||||
import mock
|
import mock
|
||||||
|
|
||||||
from heat.common import template_format
|
from heat.common import template_format
|
||||||
from heat.engine.clients.os import nova
|
|
||||||
from heat.engine import scheduler
|
from heat.engine import scheduler
|
||||||
from heat.tests import common
|
from heat.tests import common
|
||||||
from heat.tests import utils
|
from heat.tests import utils
|
||||||
@ -44,8 +43,6 @@ class FakeGroup(object):
|
|||||||
class NovaServerGroupTest(common.HeatTestCase):
|
class NovaServerGroupTest(common.HeatTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(NovaServerGroupTest, self).setUp()
|
super(NovaServerGroupTest, self).setUp()
|
||||||
self.patchobject(nova.NovaClientPlugin, 'has_extension',
|
|
||||||
return_value=True)
|
|
||||||
|
|
||||||
def _init_template(self, sg_template):
|
def _init_template(self, sg_template):
|
||||||
template = template_format.parse(json.dumps(sg_template))
|
template = template_format.parse(json.dumps(sg_template))
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
upgrade:
|
||||||
|
- |
|
||||||
|
Nova has removed api extension support and its api bindings.
|
||||||
|
Heat has now removed support for extensions from nova client
|
||||||
|
plugin and the resource plugins using it.
|
Loading…
x
Reference in New Issue
Block a user