Adds validation for Ironic gateway

Currently, there is no backend validation for Ironic gateway.
Added intersection check.

Change-Id: I89dcf9414f11ccffd85e1b10b559bd8cae78a935
Closes-Bug: #1522386
Signed-off-by: Ruslan Aliev <raliev@mirantis.com>
This commit is contained in:
Ruslan Aliev 2016-02-02 19:19:37 +03:00
parent b756427d38
commit 4cfa3afcbd
2 changed files with 24 additions and 2 deletions

View File

@ -505,6 +505,22 @@ class NetworkCheck(object):
self.result.append({"ids": [],
"name": ["internal"],
"errors": ["gateway"]})
if objects.Cluster.is_component_enabled(self.cluster, 'ironic'):
bare_net = self.network_config['baremetal_range']
bare_net_range = netaddr.IPRange(bare_net[0], bare_net[1])
bare_gw = netaddr.IPAddress(
self.network_config['baremetal_gateway'])
if bare_gw in bare_net_range:
self.err_msgs.append(
u"Neutron L3 address intersection between Ironic gateway "
u"and Ironic IP range."
)
self.result.append({"ids": [],
"name": ["baremetal"],
"errors": ["gateway", "ip_ranges"]})
self.expose_error_messages()
def _get_net_range_for_ip(self, ip, net):

View File

@ -406,22 +406,28 @@ class TestNetworkCheck(BaseIntegrationTest):
self.assertNotRaises(errors.NetworkCheckError,
checker.check_networks_amount)
@patch('objects.Cluster.is_component_enabled')
@patch.object(helpers, 'db')
def test_neutron_check_l3_addresses_not_match_subnet_and_broadcast(
self, mocked_db):
self, mocked_db, is_component_enabled):
checker = NetworkCheck(self.task, {})
checker.network_config['floating_ranges'] = [('192.168.0.1',
'192.168.0.255')]
checker.network_config['internal_cidr'] = '192.168.0.0/24'
checker.network_config['internal_gateway'] = '192.168.0.0'
checker.network_config['baremetal_range'] = ['192.168.3.52',
'192.168.3.254']
checker.network_config['baremetal_gateway'] = '192.168.3.53'
checker.networks = [{'id': 1,
'cidr': '192.168.0.0/24',
'gateway': '192.168.0.1',
'name': 'public'}]
is_component_enabled.return_value = True
self.assertRaises(
errors.NetworkCheckError,
checker.neutron_check_l3_addresses_not_match_subnet_and_broadcast)
self.assertEqual(len(checker.err_msgs), 2)
self.assertEqual(len(checker.err_msgs), 3)
def test_check_network_classes_exclude_loopback(self):
checker = NetworkCheck(self.task, {})