[1246251] MGMT, Storage nets have no gateway

Management and storage networks must have no gateway for both
Neutron and Nova-Network providers.
Floating network must have no gateway in case of Nova-Network.
Gateway field is set to 'None' for them.
'network_size' field is relevant for fixed network only.
Small refactoring of networking-related tests.

Closes-Bug: #1246251
Change-Id: Icfa425c094e3d0c45b0a9e979cdf3f0c719d106d
This commit is contained in:
Aleksey Kasatkin 2013-11-01 19:11:29 +02:00
parent 4c5a528cbf
commit ad7c91f8f0
8 changed files with 153 additions and 181 deletions

View File

@ -44,10 +44,10 @@
"name": "floating",
"cidr": "172.16.0.0/24",
"netmask": "255.255.255.0",
"gateway": "172.16.0.1",
"gateway": null,
"ip_range": ["172.16.0.128", "172.16.0.254"],
"vlan_start": null,
"network_size": 256,
"use_gateway": false,
"assign_vip": false
},
{
@ -57,24 +57,27 @@
"gateway": "172.16.0.1",
"ip_range": ["172.16.0.2", "172.16.0.127"],
"vlan_start": null,
"use_gateway": true,
"assign_vip": true
},
{
"name": "management",
"cidr": "192.168.0.0/24",
"netmask": "255.255.255.0",
"gateway": "192.168.0.1",
"ip_range": ["192.168.0.1", "192.168.0.254"],
"gateway": null,
"ip_range": ["192.168.0.2", "192.168.0.254"],
"vlan_start": 101,
"use_gateway": false,
"assign_vip": true
},
{
"name": "storage",
"cidr": "192.168.1.0/24",
"netmask": "255.255.255.0",
"gateway": "192.168.1.1",
"ip_range": ["192.168.1.1", "192.168.1.254"],
"gateway": null,
"ip_range": ["192.168.1.2", "192.168.1.254"],
"vlan_start": 102,
"use_gateway": false,
"assign_vip": false
},
{
@ -83,7 +86,9 @@
"netmask": "255.255.0.0",
"gateway": "10.0.0.1",
"ip_range": ["10.0.0.2", "10.0.255.254"],
"network_size": 256,
"vlan_start": 103,
"use_gateway": true,
"assign_vip": false
}
]
@ -95,16 +100,19 @@
"pool": ["172.16.0.0/24"],
"ip_range": ["172.16.0.2", "172.16.0.126"],
"vlan_start": null,
"use_gateway": true,
"assign_vip": true
},
{
"name": "management",
"pool": ["192.168.0.0/24"],
"use_gateway": false,
"assign_vip": true
},
{
"name": "storage",
"pool": ["192.168.1.0/24"],
"use_gateway": false,
"assign_vip": false
}
],
@ -606,10 +614,10 @@
"name": "floating",
"cidr": "172.16.0.0/24",
"netmask": "255.255.255.0",
"gateway": "172.16.0.1",
"gateway": null,
"ip_range": ["172.16.0.128", "172.16.0.254"],
"vlan_start": null,
"network_size": 256,
"use_gateway": false,
"assign_vip": false
},
{
@ -619,24 +627,27 @@
"gateway": "172.16.0.1",
"ip_range": ["172.16.0.2", "172.16.0.127"],
"vlan_start": null,
"use_gateway": true,
"assign_vip": true
},
{
"name": "management",
"cidr": "192.168.0.0/24",
"netmask": "255.255.255.0",
"gateway": "192.168.0.1",
"ip_range": ["192.168.0.1", "192.168.0.254"],
"gateway": null,
"ip_range": ["192.168.0.2", "192.168.0.254"],
"vlan_start": 101,
"use_gateway": false,
"assign_vip": true
},
{
"name": "storage",
"cidr": "192.168.1.0/24",
"netmask": "255.255.255.0",
"gateway": "192.168.1.1",
"ip_range": ["192.168.1.1", "192.168.1.254"],
"gateway": null,
"ip_range": ["192.168.1.2", "192.168.1.254"],
"vlan_start": 102,
"use_gateway": false,
"assign_vip": false
},
{
@ -645,7 +656,9 @@
"netmask": "255.255.0.0",
"gateway": "10.0.0.1",
"ip_range": ["10.0.0.2", "10.0.255.254"],
"network_size": 256,
"vlan_start": 103,
"use_gateway": true,
"assign_vip": false
}
]
@ -1012,10 +1025,10 @@
"name": "floating",
"cidr": "172.16.0.0/24",
"netmask": "255.255.255.0",
"gateway": "172.16.0.1",
"gateway": null,
"ip_range": ["172.16.0.128", "172.16.0.254"],
"vlan_start": null,
"network_size": 256,
"use_gateway": false,
"assign_vip": false
},
{
@ -1025,24 +1038,27 @@
"gateway": "172.16.0.1",
"ip_range": ["172.16.0.2", "172.16.0.127"],
"vlan_start": null,
"use_gateway": true,
"assign_vip": true
},
{
"name": "management",
"cidr": "192.168.0.0/24",
"netmask": "255.255.255.0",
"gateway": "192.168.0.1",
"ip_range": ["192.168.0.1", "192.168.0.254"],
"gateway": null,
"ip_range": ["192.168.0.2", "192.168.0.254"],
"vlan_start": 101,
"use_gateway": false,
"assign_vip": true
},
{
"name": "storage",
"cidr": "192.168.1.0/24",
"netmask": "255.255.255.0",
"gateway": "192.168.1.1",
"ip_range": ["192.168.1.1", "192.168.1.254"],
"gateway": null,
"ip_range": ["192.168.1.2", "192.168.1.254"],
"vlan_start": 102,
"use_gateway": false,
"assign_vip": false
},
{
@ -1051,7 +1067,9 @@
"netmask": "255.255.0.0",
"gateway": "10.0.0.1",
"ip_range": ["10.0.0.2", "10.0.255.254"],
"network_size": 256,
"vlan_start": 103,
"use_gateway": true,
"assign_vip": false
}
]
@ -1063,16 +1081,19 @@
"pool": ["172.16.0.0/24"],
"ip_range": ["172.16.0.2", "172.16.0.126"],
"vlan_start": null,
"use_gateway": true,
"assign_vip": true
},
{
"name": "management",
"pool": ["192.168.0.0/24"],
"use_gateway": false,
"assign_vip": true
},
{
"name": "storage",
"pool": ["192.168.1.0/24"],
"use_gateway": false,
"assign_vip": false
}
],

View File

@ -145,13 +145,14 @@ class NetworkManager(object):
first=network["ip_range"][0],
last=network["ip_range"][1]
)
gw = network['gateway'] if network.get('use_gateway') else None
nw_group = NetworkGroup(
release=cluster_db.release.id,
name=network['name'],
cidr=network['cidr'],
netmask=network['netmask'],
gateway=network['gateway'],
gateway=gw,
cluster_id=cluster_id,
vlan_start=network['vlan_start'],
amount=1,

View File

@ -304,13 +304,14 @@ class NeutronManager(NetworkManager):
first=str(new_net[2]),
last=str(new_net[-2])
)
gw = str(new_net[1]) if network.get('use_gateway') else None
nw_group = NetworkGroup(
release=cluster_db.release.id,
name=network['name'],
cidr=str(new_net),
netmask=str(new_net.netmask),
gateway=str(new_net[1]),
gateway=gw,
cluster_id=cluster_id,
vlan_start=vlan_start,
amount=1

View File

@ -405,42 +405,6 @@ class Environment(object):
self.set_admin_ip_for_for_single_interface(meta['interfaces'])
return meta['interfaces']
def generate_ui_networks(self, cluster_id):
start_id = self.db.query(NetworkGroup.id).order_by(
NetworkGroup.id
).first()
start_id = 0 if not start_id else start_id[-1] + 1
net_names = (
"floating",
"public",
"management",
"storage",
"fixed"
)
net_cidrs = (
"172.16.0.0/24",
"172.16.1.0/24",
"192.168.0.0/24",
"192.168.1.0/24",
"10.0.0.0/24"
)
nets = {'networks': [{
"network_size": 256,
"name": nd[0],
"amount": 1,
"cluster_id": cluster_id,
"vlan_start": 100 + i,
"cidr": nd[1],
"id": start_id + i
} for i, nd in enumerate(zip(net_names, net_cidrs))]}
public = filter(
lambda net: net['name'] == 'public',
nets['networks'])[0]
public['netmask'] = '255.255.255.0'
return nets
def get_default_roles(self):
return ['controller', 'compute', 'cinder', 'ceph-osd']
@ -449,103 +413,8 @@ class Environment(object):
('openstack',))[0]['fields']['volumes_metadata']
def get_default_networks_metadata(self):
return {
"nova_network": {
"networks": [
{
"name": "floating",
"cidr": "172.16.0.0/24",
"netmask": "255.255.255.0",
"gateway": "172.16.0.1",
"ip_range": ["172.16.0.128", "172.16.0.254"],
"vlan_start": None,
"network_size": 256,
"assign_vip": False
},
{
"name": "public",
"cidr": "172.16.0.0/24",
"netmask": "255.255.255.0",
"gateway": "172.16.0.1",
"ip_range": ["172.16.0.2", "172.16.0.127"],
"vlan_start": None,
"assign_vip": True
},
{
"name": "management",
"cidr": "192.168.0.0/24",
"netmask": "255.255.255.0",
"gateway": "192.168.0.1",
"ip_range": ["192.168.0.1", "192.168.0.254"],
"vlan_start": 101,
"assign_vip": True
},
{
"name": "storage",
"cidr": "192.168.1.0/24",
"netmask": "255.255.255.0",
"gateway": "192.168.1.1",
"ip_range": ["192.168.1.1", "192.168.1.254"],
"vlan_start": 102,
"assign_vip": False
},
{
"name": "fixed",
"cidr": "10.0.0.0/16",
"netmask": "255.255.0.0",
"gateway": "10.0.0.1",
"ip_range": ["10.0.0.2", "10.0.255.254"],
"vlan_start": 103,
"assign_vip": False
}
]
},
"neutron": {
"networks": [
{
"name": "public",
"pool": ["172.16.0.0/24"],
"ip_range": ["172.16.0.2", "172.16.0.126"],
"vlan_start": None,
"assign_vip": True
},
{
"name": "management",
"pool": ["192.168.0.0/24"],
"assign_vip": True
},
{
"name": "storage",
"pool": ["192.168.1.0/24"],
"assign_vip": False
}
],
"config": {
"parameters": {
"amqp": {
"provider": "rabbitmq",
"username": None,
"passwd": "",
"hosts": "hostname1:5672, hostname2:5672"
},
"database": {
"provider": "mysql",
"port": "3306",
"database": None,
"username": None,
"passwd": ""
},
"keystone": {
"admin_user": None,
"admin_password": ""
},
"metadata": {
"metadata_proxy_shared_secret": ""
}
}
}
}
}
return self.read_fixtures(
('openstack',))[0]['fields']['networks_metadata']
def get_default_attributes_metadata(self):
return self.read_fixtures(

View File

@ -171,7 +171,7 @@ class TestHandlers(BaseIntegrationTest):
'name': u'floating',
'vlan_id': None,
'cidr': '172.16.0.0/24',
'gateway': '172.16.0.1'
'gateway': None
},
{
'release': release.id,
@ -192,14 +192,14 @@ class TestHandlers(BaseIntegrationTest):
'name': u'storage',
'vlan_id': 102,
'cidr': '192.168.1.0/24',
'gateway': '192.168.1.1'
'gateway': None
},
{
'release': release.id,
'name': u'management',
'vlan_id': 101,
'cidr': '192.168.0.0/24',
'gateway': '192.168.0.1'
'gateway': None
}
]
self.assertItemsEqual(expected, obtained)
@ -207,12 +207,9 @@ class TestHandlers(BaseIntegrationTest):
@patch('nailgun.rpc.cast')
def test_verify_networks(self, mocked_rpc):
cluster = self.env.create_cluster(api=True)
resp = self.app.put(
reverse('NovaNetworkConfigurationHandler',
kwargs={'cluster_id': cluster['id']}),
json.dumps(self.env.generate_ui_networks(cluster["id"])),
headers=self.default_headers
)
nets = json.loads(self.env.nova_networks_get(cluster['id']).body)
resp = self.env.nova_networks_put(cluster['id'], nets)
self.assertEquals(202, resp.status)
task = json.loads(resp.body)
self.assertEquals(task['status'], 'ready')

View File

@ -169,6 +169,61 @@ class TestNovaNetworkConfigurationHandlerMultinode(BaseIntegrationTest):
else:
self.assertIsNotNone(net['vlan_start'])
def test_mgmt_storage_networks_have_no_gateway(self):
resp = self.env.nova_networks_get(self.cluster.id)
self.assertEquals(200, resp.status)
data = json.loads(resp.body)
for net in data['networks']:
if net['name'] in ['management', 'storage']:
self.assertIsNone(net['gateway'])
def test_management_network_has_gw(self):
net_meta = self.env.get_default_networks_metadata().copy()
mgmt = filter(lambda n: n['name'] == 'management',
net_meta['nova_network']['networks'])[0]
mgmt['use_gateway'] = True
mgmt['gateway'] = '192.168.0.1'
def get_new_networks_metadata():
return net_meta
self.env.get_default_networks_metadata = get_new_networks_metadata
cluster = self.env.create(
cluster_kwargs={},
nodes_kwargs=[{"pending_addition": True}]
)
resp = self.env.nova_networks_get(cluster['id'])
data = json.loads(resp.body)
mgmt = filter(lambda n: n['name'] == 'management',
data['networks'])[0]
self.assertEquals(mgmt['gateway'], '192.168.0.1')
strg = filter(lambda n: n['name'] == 'storage',
data['networks'])[0]
self.assertIsNone(strg['gateway'])
def test_management_network_gw_set_but_not_in_use(self):
net_meta = self.env.get_default_networks_metadata().copy()
mgmt = filter(lambda n: n['name'] == 'management',
net_meta['nova_network']['networks'])[0]
mgmt['gateway'] = '192.168.0.1'
self.assertEquals(mgmt['use_gateway'], False)
def get_new_networks_metadata():
return net_meta
self.env.get_default_networks_metadata = get_new_networks_metadata
cluster = self.env.create(
cluster_kwargs={},
nodes_kwargs=[{"pending_addition": True}]
)
resp = self.env.nova_networks_get(cluster['id'])
data = json.loads(resp.body)
for n in data['networks']:
if n['name'] in ('management', 'storage'):
self.assertIsNone(n['gateway'])
class TestNeutronNetworkConfigurationHandlerMultinode(BaseIntegrationTest):
def setUp(self):
@ -368,6 +423,39 @@ class TestNeutronNetworkConfigurationHandlerMultinode(BaseIntegrationTest):
else:
self.assertIsNotNone(net['vlan_start'])
def test_mgmt_storage_networks_have_no_gateway(self):
resp = self.env.neutron_networks_get(self.cluster.id)
self.assertEquals(200, resp.status)
data = json.loads(resp.body)
for net in data['networks']:
if net['name'] in ['management', 'storage']:
self.assertIsNone(net['gateway'])
def test_management_network_has_gw(self):
net_meta = self.env.get_default_networks_metadata().copy()
mgmt = filter(lambda n: n['name'] == 'management',
net_meta['neutron']['networks'])[0]
mgmt['use_gateway'] = True
def get_new_networks_metadata():
return net_meta
self.env.get_default_networks_metadata = get_new_networks_metadata
cluster = self.env.create(
cluster_kwargs={'net_provider': 'neutron',
'net_segment_type': 'gre'},
nodes_kwargs=[{"pending_addition": True}]
)
resp = self.env.neutron_networks_get(cluster['id'])
data = json.loads(resp.body)
mgmt = filter(lambda n: n['name'] == 'management',
data['networks'])[0]
self.assertEquals(mgmt['gateway'], '192.168.0.1')
strg = filter(lambda n: n['name'] == 'storage',
data['networks'])[0]
self.assertIsNone(strg['gateway'])
class TestNovaNetworkConfigurationHandlerHA(BaseIntegrationTest):
def setUp(self):

View File

@ -68,30 +68,25 @@ class TestNetworkModels(BaseIntegrationTest):
supertask = self.env.launch_deployment()
self.env.wait_ready(supertask, 60)
test_nets = self.env.generate_ui_networks(
test_nets = json.loads(self.env.nova_networks_get(
self.env.clusters[0].id
).body)
resp_nova_net = self.env.nova_networks_put(
self.env.clusters[0].id,
test_nets,
expect_errors=True
)
resp_nova_net = self.app.put(
reverse(
'NovaNetworkConfigurationHandler',
kwargs={'cluster_id': self.env.clusters[0].id}),
json.dumps(test_nets),
headers=self.default_headers,
expect_errors=True
)
resp_neutron_net = self.app.put(
reverse(
'NeutronNetworkConfigurationHandler',
kwargs={'cluster_id': self.env.clusters[0].id}),
json.dumps(test_nets),
headers=self.default_headers,
resp_neutron_net = self.env.neutron_networks_put(
self.env.clusters[0].id,
test_nets,
expect_errors=True
)
resp_cluster = self.app.put(
reverse(
'ClusterAttributesHandler',
kwargs={'cluster_id': self.env.clusters[0].id}),
reverse('ClusterAttributesHandler',
kwargs={'cluster_id': self.env.clusters[0].id}),
json.dumps({
'editable': {
"foo": "bar"

View File

@ -336,7 +336,7 @@ function(utils, models, commonViews, dialogViews, networkTabTemplate, networkTem
cidr: $.trim(this.$('.cidr input').val()),
vlan_start: fixedNetworkOnVlanManager || this.$('.use-vlan-tagging:checked').length ? Number(this.$('.vlan_start input').val()) : null,
netmask: $.trim(this.$('.netmask input').val()),
gateway: $.trim(this.$('.gateway input').val()),
gateway: $.trim(this.$('.gateway input').val()) || null,
amount: fixedNetworkOnVlanManager ? Number(this.$('input[name=fixed-amount]').val()) : 1,
network_size: fixedNetworkOnVlanManager ? Number(this.$('.network_size select').val()) : utils.calculateNetworkSize(this.$('.cidr input').val())
}, {