Replace depcrecated Nova networks with Nova interfaces

Nova network (os-networks) is depcrecated and thus its
usage should be replaced by Nova interface (os-interface).
Create corresponding test cases.

Added nova networks back in since RAX still needs it
Ref url: http://developer.openstack.org/api-ref-compute-v2.1.html#listAttachedInterfaces

Change-Id: Iccfd028055e1d3dc13a63d5e48a8c6e3275d42f2
This commit is contained in:
Bharath M 2016-01-28 12:12:51 -08:00 committed by German Eichberger
parent 6f786fdad7
commit 2d87bdbf17
3 changed files with 65 additions and 14 deletions

View File

@ -156,6 +156,10 @@ class ComputeStatusException(OctaviaException):
message = _LE('Failed to retrieve compute instance status.')
class ComputeGetInterfaceException(OctaviaException):
message = _LE('Failed to retrieve compute virtual interfaces.')
class IDAlreadyExists(OctaviaException):
message = _LE('Already an entity with that specified id.')
code = 409

View File

@ -137,18 +137,38 @@ class VirtualMachineManager(compute_base.ComputeBase):
:param nova_response: JSON response from nova
:returns: an amphora object
'''
# Extract information from nova response to populate desired amphora
# Extract interfaces of virtual machine to populate desired amphora
# fields
net_name = self._nova_client.networks.get(
CONF.controller_worker.amp_network).label
lb_network_ip = None
if net_name in nova_response.addresses:
lb_network_ip = nova_response.addresses[net_name][0]['addr']
try:
inf_list = nova_response.interface_list()
for interface in inf_list:
if (getattr(interface, 'net_id') ==
CONF.controller_worker.amp_network):
lb_network_ip = getattr(
interface, 'fixed_ips')[0]['ip_address']
break
except Exception:
LOG.debug('Extracting virtual interfaces through nova '
'os-interfaces extension failed.')
if not lb_network_ip:
# Try os-networks extension
# TODO(bharath) Remove when RAX doesn't need that any longer
try:
net_name = self._nova_client.networks.get(
CONF.controller_worker.amp_network).label
if net_name in nova_response.addresses:
lb_network_ip = nova_response.addresses[
net_name][0]['addr']
except Exception:
LOG.exception(_LE('Error retrieving nova virtual interfaces'))
response = models.Amphora(
compute_id=nova_response.id,
status=nova_response.status,
compute_id=getattr(nova_response, 'id'),
status=getattr(nova_response, 'status'),
lb_network_ip=lb_network_ip
)
return response

View File

@ -29,11 +29,12 @@ CONF = cfg.CONF
class TestNovaClient(base.TestCase):
def setUp(self):
net_name = "lb-mgmt-net"
CONF.set_override(group='networking', name='lb_network_name',
override=net_name, enforce_type=True)
CONF.set_override(group='keystone_authtoken', name='auth_version',
override='2', enforce_type=True)
self.net_name = "lb-mgmt-net"
CONF.set_override(group='networking', name='lb_network_name',
override=self.net_name, enforce_type=True)
self.amphora = models.Amphora(
compute_id=uuidutils.generate_uuid(),
status='ACTIVE',
@ -43,19 +44,25 @@ class TestNovaClient(base.TestCase):
self.nova_response = mock.Mock()
self.nova_response.id = self.amphora.compute_id
self.nova_response.status = 'ACTIVE'
self.nova_response.addresses = {net_name: [{'addr': '10.0.0.1'}]}
self.nova_network = mock.Mock()
self.nova_network.label = net_name
self.interface_list = mock.MagicMock()
self.interface_list.net_id = CONF.controller_worker.amp_network
self.interface_list.fixed_ips = [mock.MagicMock()]
self.interface_list.fixed_ips[0] = {'ip_address': '10.0.0.1'}
self.manager = nova_common.VirtualMachineManager()
self.manager.manager = mock.MagicMock()
self.manager._nova_client = mock.MagicMock()
self.manager._nova_client.networks.get.return_value = self.nova_network
self.nova_response.interface_list.side_effect = [[self.interface_list]]
self.manager.manager.get.return_value = self.nova_response
self.manager.manager.create.return_value = self.nova_response
self.nova_response.addresses = {self.net_name: [{'addr': '10.0.0.1'}]}
self.nova_network = mock.Mock()
self.nova_network.label = self.net_name
super(TestNovaClient, self).setUp()
def test_build(self):
@ -117,3 +124,23 @@ class TestNovaClient(base.TestCase):
self.manager.manager.get.side_effect = Exception
self.assertRaises(exceptions.ComputeGetException,
self.manager.get_amphora, self.amphora.id)
def test_translate_amphora(self):
amphora = self.manager._translate_amphora(self.nova_response)
self.assertEqual(self.amphora, amphora)
self.nova_response.interface_list.called_with()
def test_bad_translate_amphora(self):
self.nova_response.interface_list.side_effect = Exception
self.manager._nova_client.networks.get.side_effect = Exception
self.assertIsNone(
self.manager._translate_amphora(self.nova_response).lb_network_ip)
self.nova_response.interface_list.called_with()
def test_translate_amphora_nova_networks(self):
self.nova_response.interface_list.side_effect = Exception
self.manager._nova_client.networks.get.return_value = self.nova_network
amphora = self.manager._translate_amphora(self.nova_response)
self.assertEqual(self.amphora, amphora)
self.assertTrue(self.nova_response.interface_list.called)
self.manager._nova_client.networks.get.called_with(self.net_name)