Fix default IP range for baremetal network

if IP ranges start with X.X.X.1 when gateway is not set explicitly
it results in IP intersection if multiple node groups are in use because
all networks must have gateways in this case and gateways are set to
default values X.X.X.1 if they are missing for some networks

Change-Id: Ia7c5a91526e706c5546f5cdc25ba2e945c5ae341
Closes-Bug: #1539503
This commit is contained in:
Aleksey Kasatkin 2016-04-04 23:16:11 +03:00
parent 8c535849e2
commit e03c35ef3d
2 changed files with 60 additions and 1 deletions

View File

@ -520,7 +520,7 @@
configurable: true
- name: "baremetal"
cidr: "192.168.3.0/24"
ip_range: ["192.168.3.1", "192.168.3.50"]
ip_range: ["192.168.3.2", "192.168.3.50"]
vlan_start: 104
use_gateway: false
notation: "ip_ranges"

View File

@ -904,3 +904,62 @@ class TestNetworkConfigurationVerifyHandler(TestNetworkChecking):
self.assertIn("uniqueItem", json['message'])
self.assertIn("vlan_range", json['message'])
self.assertIn("[1000, 1000]", json['message'])
class TestNeutronHandlers90(TestNetworkChecking):
def check_baremetal_gateway_vs_iprange(self, baremetal_parameters, result):
net_meta = self.env.get_default_networks_metadata()
bm = filter(lambda n: n['name'] == 'baremetal',
net_meta['neutron']['networks'])[0]
bm.update(baremetal_parameters)
self.env.create(
release_kwargs={
'networks_metadata': net_meta,
'version': 'mitaka-9.0',
'operating_system': consts.RELEASE_OS.ubuntu
},
cluster_kwargs={
'net_provider': 'neutron',
'net_segment_type': 'vlan',
}
)
cluster = self.env.clusters[0]
self.env._set_additional_component(cluster, 'ironic', True)
self.env.create_node_group(cluster_id=cluster.id)
resp = self.env.neutron_networks_get(cluster.id)
nets = resp.json_body
if result:
return self.update_neutron_networks_success(cluster.id, nets)
else:
return self.update_neutron_networks_w_error(cluster.id, nets)
@mock.patch('nailgun.task.task.rpc.cast')
def test_baremetal_ranges_with_default_gateway_ok(self, _):
self.check_baremetal_gateway_vs_iprange({
'cidr': '192.168.3.0/24',
'ip_range': ['192.168.3.2', '192.168.3.50'],
'use_gateway': False,
'notation': 'ip_ranges'
}, True)
@mock.patch('nailgun.task.task.rpc.cast')
def test_baremetal_ranges_with_default_gateway_fail(self, _):
# if IP ranges start with X.X.X.1 when gateway is not set explicitly
# it results in IP intersection if multiple node groups are in use
# because all networks must have gateways in this case and gateways are
# set to default values X.X.X.1 if they are missing for some networks
resp = self.check_baremetal_gateway_vs_iprange({
'cidr': '192.168.3.0/24',
'ip_range': ['192.168.3.1', '192.168.3.50'],
'use_gateway': False,
'notation': 'ip_ranges'
}, False)
self.assertIn(
u"Gateway address belongs to the network's IP range "
u"[192.168.3.1-192.168.3.50].",
resp['message']
)