Support provider networks in public network detection
The provider networks don't set router:external, but can also be determined to be a thing that is the public network. We also need to check that a thing with router:external=False doesn't have provider network parameters set on it. Change-Id: Ie8ee1329419bd1eee2c196f4a8624670aca1bc20
This commit is contained in:
parent
8f4717a255
commit
1853a54001
|
@ -1396,12 +1396,21 @@ class OpenStackCloud(object):
|
|||
|
||||
:returns: A list of network dicts if one is found
|
||||
"""
|
||||
self._external_networks = self._get_network(
|
||||
_all_networks = self._get_network(
|
||||
self._external_network_name_or_id,
|
||||
self.use_external_network,
|
||||
self._external_networks,
|
||||
self._external_network_stamp,
|
||||
filters={'router:external': True})
|
||||
filters=None)
|
||||
# Filter locally because we have an or condition
|
||||
_external_networks = []
|
||||
for network in _all_networks:
|
||||
if (('router:external' in network
|
||||
and network['router:external']) or
|
||||
'provider:network_type' in network):
|
||||
_external_networks.append(network)
|
||||
# TODO(mordred): This needs to be mutex protected
|
||||
self._external_networks = _external_networks
|
||||
self._external_network_stamp = True
|
||||
return self._external_networks
|
||||
|
||||
|
@ -1410,7 +1419,8 @@ class OpenStackCloud(object):
|
|||
|
||||
:returns: A list of network dicts if one is found
|
||||
"""
|
||||
self._internal_networks = self._get_network(
|
||||
# Just router:external False is not enough.
|
||||
_all_networks = self._get_network(
|
||||
self._internal_network_name_or_id,
|
||||
self.use_internal_network,
|
||||
self._internal_networks,
|
||||
|
@ -1418,6 +1428,12 @@ class OpenStackCloud(object):
|
|||
filters={
|
||||
'router:external': False,
|
||||
})
|
||||
_internal_networks = []
|
||||
for network in _all_networks:
|
||||
if 'provider:network_type' not in network:
|
||||
_internal_networks.append(network)
|
||||
# TODO(mordred): This needs to be mutex protected
|
||||
self._internal_networks = _internal_networks
|
||||
self._internal_network_stamp = True
|
||||
return self._internal_networks
|
||||
|
||||
|
|
|
@ -210,7 +210,8 @@ class TestMeta(base.TestCase):
|
|||
mock_has_service.return_value = True
|
||||
mock_search_networks.return_value = [{
|
||||
'id': 'test-net-id',
|
||||
'name': 'test-net'
|
||||
'name': 'test-net',
|
||||
'router:external': True,
|
||||
}]
|
||||
|
||||
srv = meta.obj_to_dict(fakes.FakeServer(
|
||||
|
@ -223,6 +224,52 @@ class TestMeta(base.TestCase):
|
|||
|
||||
self.assertEqual(PUBLIC_V4, ip)
|
||||
|
||||
@mock.patch.object(shade.OpenStackCloud, 'has_service')
|
||||
@mock.patch.object(shade.OpenStackCloud, 'search_networks')
|
||||
def test_get_server_external_provider_ipv4_neutron(
|
||||
self, mock_search_networks,
|
||||
mock_has_service):
|
||||
# Testing Clouds with Neutron
|
||||
mock_has_service.return_value = True
|
||||
mock_search_networks.return_value = [{
|
||||
'id': 'test-net-id',
|
||||
'name': 'test-net',
|
||||
'provider:network_type': 'vlan',
|
||||
}]
|
||||
|
||||
srv = meta.obj_to_dict(fakes.FakeServer(
|
||||
id='test-id', name='test-name', status='ACTIVE',
|
||||
addresses={'test-net': [{
|
||||
'addr': PUBLIC_V4,
|
||||
'version': 4}]},
|
||||
))
|
||||
ip = meta.get_server_external_ipv4(cloud=self.cloud, server=srv)
|
||||
|
||||
self.assertEqual(PUBLIC_V4, ip)
|
||||
|
||||
@mock.patch.object(shade.OpenStackCloud, 'has_service')
|
||||
@mock.patch.object(shade.OpenStackCloud, 'search_networks')
|
||||
def test_get_server_external_none_ipv4_neutron(
|
||||
self, mock_search_networks,
|
||||
mock_has_service):
|
||||
# Testing Clouds with Neutron
|
||||
mock_has_service.return_value = True
|
||||
mock_search_networks.return_value = [{
|
||||
'id': 'test-net-id',
|
||||
'name': 'test-net',
|
||||
'router:external': False,
|
||||
}]
|
||||
|
||||
srv = meta.obj_to_dict(fakes.FakeServer(
|
||||
id='test-id', name='test-name', status='ACTIVE',
|
||||
addresses={'test-net': [{
|
||||
'addr': PUBLIC_V4,
|
||||
'version': 4}]},
|
||||
))
|
||||
ip = meta.get_server_external_ipv4(cloud=self.cloud, server=srv)
|
||||
|
||||
self.assertEqual(None, ip)
|
||||
|
||||
def test_get_server_external_ipv4_neutron_accessIPv4(self):
|
||||
srv = meta.obj_to_dict(fakes.FakeServer(
|
||||
id='test-id', name='test-name', status='ACTIVE',
|
||||
|
|
Loading…
Reference in New Issue