Merge "Make nova resources available based on os-api ext"

This commit is contained in:
Jenkins
2015-11-11 07:50:59 +00:00
committed by Gerrit Code Review
12 changed files with 37 additions and 26 deletions

View File

@@ -58,12 +58,6 @@ class NovaClientPlugin(client_plugin.ClientPlugin):
service_types = [COMPUTE] = ['compute']
EXTENSIONS = (
OS_INTERFACE_EXTENSION
) = (
"OSInterface"
)
def _create(self):
endpoint_type = self._get_client_option('nova', 'endpoint_type')
management_url = self.url_for(service_type=self.COMPUTE,
@@ -662,10 +656,10 @@ echo -e '%s\tALL=(ALL)\tNOPASSWD: ALL' >> /etc/sudoers
else:
return False
def _has_extension(self, extension_name):
def has_extension(self, alias):
"""Check if extension is present."""
extensions = self.client().list_extensions.show_all()
return extension_name in [extension.name for extension in extensions]
return alias in [extension.alias for extension in extensions]
class ServerConstraint(constraints.BaseCustomConstraint):

View File

@@ -49,6 +49,8 @@ class NovaFlavor(resource.Resource):
default_client_name = 'nova'
required_service_extension = 'os-flavor-manage'
entity = 'flavors'
PROPERTIES = (

View File

@@ -29,6 +29,8 @@ LOG = logging.getLogger(__name__)
class NovaFloatingIp(resource.Resource):
support_status = support.SupportStatus(version='2014.1')
required_service_extension = 'os-floating-ips'
PROPERTIES = (POOL,) = ('pool',)
ATTRIBUTES = (

View File

@@ -35,6 +35,8 @@ class KeyPair(resource.Resource):
support_status = support.SupportStatus(version='2014.1')
required_service_extension = 'os-keypairs'
PROPERTIES = (
NAME, SAVE_PRIVATE_KEY, PUBLIC_KEY,
) = (

View File

@@ -26,6 +26,8 @@ class ServerGroup(resource.Resource):
entity = 'server_groups'
required_service_extension = 'os-server-groups'
PROPERTIES = (
NAME, POLICIES
) = (

View File

@@ -182,11 +182,10 @@ class ServerNetworkMixin(object):
if not self.is_using_neutron():
return
# check if OSInterface extension is installed 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(
self.client_plugin().OS_INTERFACE_EXTENSION):
# 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)

View File

@@ -581,26 +581,25 @@ class ConsoleUrlsTest(common.HeatTestCase):
class NovaClientPluginExtensionsTests(NovaClientPluginTestCase):
"""Tests for extensions in novaclient."""
def test_defines_required_extension_names(self):
self.assertEqual(self.nova_plugin.OS_INTERFACE_EXTENSION,
"OSInterface")
def test_has_no_extensions(self):
self.nova_client.list_extensions.show_all.return_value = []
self.assertFalse(self.nova_plugin._has_extension("OSInterface"))
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='notOSInterface')
type(mock_extension).name = p
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("OSInterface"))
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='OSInterface')
type(mock_extension).name = p
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("OSInterface"))
self.assertTrue(self.nova_plugin.has_extension(
"os-virtual-interfaces"))

View File

@@ -13,6 +13,7 @@
import mock
from heat.engine.clients.os import nova as novac
from heat.engine.resources.openstack.nova import nova_flavor
from heat.engine import stack
from heat.engine import template
@@ -41,7 +42,8 @@ flavor_template = {
class NovaFlavorTest(common.HeatTestCase):
def setUp(self):
super(NovaFlavorTest, self).setUp()
self.patchobject(novac.NovaClientPlugin, 'has_extension',
return_value=True)
self.ctx = utils.dummy_context()
self.stack = stack.Stack(

View File

@@ -72,6 +72,8 @@ class NovaFloatingIPTest(common.HeatTestCase):
self.m.StubOutWithMock(self.novaclient.servers, 'remove_floating_ip')
self.patchobject(nova.NovaClientPlugin, 'get_server',
return_value=mock.MagicMock())
self.patchobject(nova.NovaClientPlugin, 'has_extension',
return_value=True)
def _make_obj(self, **kwargs):
mock = self.m.CreateMockAnything()

View File

@@ -44,6 +44,8 @@ class NovaKeyPairTest(common.HeatTestCase):
self.fake_nova = self.m.CreateMockAnything()
self.fake_keypairs = self.m.CreateMockAnything()
self.fake_nova.keypairs = self.fake_keypairs
self.patchobject(nova.NovaClientPlugin, 'has_extension',
return_value=True)
def _mock_key(self, name, pub=None, priv=None):
mkey = self.m.CreateMockAnything()

View File

@@ -16,6 +16,7 @@ import json
import mock
from heat.common import template_format
from heat.engine.clients.os import nova
from heat.engine import scheduler
from heat.tests import common
from heat.tests import utils
@@ -43,6 +44,8 @@ class FakeGroup(object):
class NovaServerGroupTest(common.HeatTestCase):
def setUp(self):
super(NovaServerGroupTest, self).setUp()
self.patchobject(nova.NovaClientPlugin, 'has_extension',
return_value=True)
def _init_template(self, sg_template):
template = template_format.parse(json.dumps(sg_template))

View File

@@ -1224,6 +1224,8 @@ class ServersTest(common.HeatTestCase):
}
}
'''
self.patchobject(nova.NovaClientPlugin, 'has_extension',
return_value=True)
t = template_format.parse(nova_keypair_template)
templ = template.Template(t)
stack = parser.Stack(utils.dummy_context(), stack_name, templ,
@@ -4376,7 +4378,7 @@ class ServerInternalPortTest(common.HeatTestCase):
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.client_plugin().has_extension.return_value = False
server._data = {"internal_ports": '[{"id": "1122"}]',
"external_ports": '[{"id": "3344"},{"id": "5566"}]'}