Implement client API bindings for Neutron subnet allocation
Change-Id: I611ef5224ef8fe33e3042f22fca774b7fe68a8cd Implements: blueprint neutron-subnet-allocation
This commit is contained in:
parent
caaebf8a78
commit
d2f1592d0d
@ -107,6 +107,10 @@ class Subnet(NeutronAPIDictWrapper):
|
||||
super(Subnet, self).__init__(apiresource)
|
||||
|
||||
|
||||
class SubnetPool(NeutronAPIDictWrapper):
|
||||
"""Wrapper for neutron subnetpools."""
|
||||
|
||||
|
||||
class Port(NeutronAPIDictWrapper):
|
||||
"""Wrapper for neutron ports."""
|
||||
|
||||
@ -733,6 +737,73 @@ def subnet_delete(request, subnet_id):
|
||||
neutronclient(request).delete_subnet(subnet_id)
|
||||
|
||||
|
||||
def subnetpool_list(request, **params):
|
||||
LOG.debug("subnetpool_list(): params=%s" % (params))
|
||||
subnetpools = \
|
||||
neutronclient(request).list_subnetpools(**params).get('subnetpools')
|
||||
return [SubnetPool(s) for s in subnetpools]
|
||||
|
||||
|
||||
def subnetpool_get(request, subnetpool_id, **params):
|
||||
LOG.debug("subnetpool_get(): subnetpoolid=%s, params=%s" %
|
||||
(subnetpool_id, params))
|
||||
subnetpool = \
|
||||
neutronclient(request).show_subnetpool(subnetpool_id,
|
||||
**params).get('subnetpool')
|
||||
return SubnetPool(subnetpool)
|
||||
|
||||
|
||||
def subnetpool_create(request, name, prefixes, **kwargs):
|
||||
"""Create a subnetpool.
|
||||
|
||||
ip_version is auto-detected in back-end.
|
||||
|
||||
Parameters:
|
||||
request -- Request context
|
||||
name -- Name for subnetpool
|
||||
prefixes -- List of prefixes for pool
|
||||
|
||||
Keyword Arguments (optional):
|
||||
min_prefixlen -- Minimum prefix length for allocations from pool
|
||||
max_prefixlen -- Maximum prefix length for allocations from pool
|
||||
default_prefixlen -- Default prefix length for allocations from pool
|
||||
default_quota -- Default quota for allocations from pool
|
||||
shared -- Subnetpool should be shared (Admin-only)
|
||||
tenant_id -- Owner of subnetpool
|
||||
|
||||
Returns:
|
||||
SubnetPool object
|
||||
"""
|
||||
LOG.debug("subnetpool_create(): name=%s, prefixes=%s, kwargs=%s"
|
||||
% (name, prefixes, kwargs))
|
||||
body = {'subnetpool':
|
||||
{'name': name,
|
||||
'prefixes': prefixes,
|
||||
}
|
||||
}
|
||||
if 'tenant_id' not in kwargs:
|
||||
kwargs['tenant_id'] = request.user.project_id
|
||||
body['subnetpool'].update(kwargs)
|
||||
subnetpool = \
|
||||
neutronclient(request).create_subnetpool(body=body).get('subnetpool')
|
||||
return SubnetPool(subnetpool)
|
||||
|
||||
|
||||
def subnetpool_update(request, subnetpool_id, **kwargs):
|
||||
LOG.debug("subnetpool_update(): subnetpoolid=%s, kwargs=%s" %
|
||||
(subnetpool_id, kwargs))
|
||||
body = {'subnetpool': kwargs}
|
||||
subnetpool = \
|
||||
neutronclient(request).update_subnetpool(subnetpool_id,
|
||||
body=body).get('subnetpool')
|
||||
return SubnetPool(subnetpool)
|
||||
|
||||
|
||||
def subnetpool_delete(request, subnetpool_id):
|
||||
LOG.debug("subnetpool_delete(): subnetpoolid=%s" % subnetpool_id)
|
||||
return neutronclient(request).delete_subnetpool(subnetpool_id)
|
||||
|
||||
|
||||
def port_list(request, **params):
|
||||
LOG.debug("port_list(): params=%s" % (params))
|
||||
ports = neutronclient(request).list_ports(**params).get('ports')
|
||||
|
@ -149,6 +149,66 @@ class NeutronApiTests(test.APITestCase):
|
||||
|
||||
api.neutron.subnet_delete(self.request, subnet_id)
|
||||
|
||||
def test_subnetpool_list(self):
|
||||
subnetpools = {'subnetpools': self.api_subnetpools.list()}
|
||||
|
||||
neutronclient = self.stub_neutronclient()
|
||||
neutronclient.list_subnetpools().AndReturn(subnetpools)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
ret_val = api.neutron.subnetpool_list(self.request)
|
||||
for n in ret_val:
|
||||
self.assertIsInstance(n, api.neutron.SubnetPool)
|
||||
|
||||
def test_subnetpool_get(self):
|
||||
subnetpool = {'subnetpool': self.api_subnetpools.first()}
|
||||
subnetpool_id = self.api_subnetpools.first()['id']
|
||||
|
||||
neutronclient = self.stub_neutronclient()
|
||||
neutronclient.show_subnetpool(subnetpool_id).AndReturn(subnetpool)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
ret_val = api.neutron.subnetpool_get(self.request, subnetpool_id)
|
||||
self.assertIsInstance(ret_val, api.neutron.SubnetPool)
|
||||
|
||||
def test_subnetpool_create(self):
|
||||
subnetpool_data = self.api_subnetpools.first()
|
||||
params = {'name': subnetpool_data['name'],
|
||||
'prefixes': subnetpool_data['prefixes'],
|
||||
'tenant_id': subnetpool_data['tenant_id']}
|
||||
|
||||
neutronclient = self.stub_neutronclient()
|
||||
neutronclient.create_subnetpool(body={'subnetpool': params})\
|
||||
.AndReturn({'subnetpool': subnetpool_data})
|
||||
self.mox.ReplayAll()
|
||||
|
||||
ret_val = api.neutron.subnetpool_create(self.request, **params)
|
||||
self.assertIsInstance(ret_val, api.neutron.SubnetPool)
|
||||
|
||||
def test_subnetpool_update(self):
|
||||
subnetpool_data = self.api_subnetpools.first()
|
||||
subnetpool_id = subnetpool_data['id']
|
||||
params = {'name': subnetpool_data['name'],
|
||||
'prefixes': subnetpool_data['prefixes']}
|
||||
|
||||
neutronclient = self.stub_neutronclient()
|
||||
neutronclient.update_subnetpool(subnetpool_id, body={'subnetpool': params})\
|
||||
.AndReturn({'subnetpool': subnetpool_data})
|
||||
self.mox.ReplayAll()
|
||||
|
||||
ret_val = api.neutron.subnetpool_update(self.request, subnetpool_id,
|
||||
**params)
|
||||
self.assertIsInstance(ret_val, api.neutron.SubnetPool)
|
||||
|
||||
def test_subnetpool_delete(self):
|
||||
subnetpool_id = self.api_subnetpools.first()['id']
|
||||
|
||||
neutronclient = self.stub_neutronclient()
|
||||
neutronclient.delete_subnetpool(subnetpool_id)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
api.neutron.subnetpool_delete(self.request, subnetpool_id)
|
||||
|
||||
def test_port_list(self):
|
||||
ports = {'ports': self.api_ports.list()}
|
||||
|
||||
|
@ -28,6 +28,7 @@ def data(TEST):
|
||||
TEST.agents = utils.TestDataContainer()
|
||||
TEST.networks = utils.TestDataContainer()
|
||||
TEST.subnets = utils.TestDataContainer()
|
||||
TEST.subnetpools = utils.TestDataContainer()
|
||||
TEST.ports = utils.TestDataContainer()
|
||||
TEST.routers = utils.TestDataContainer()
|
||||
TEST.routers_with_rules = utils.TestDataContainer()
|
||||
@ -57,6 +58,7 @@ def data(TEST):
|
||||
TEST.api_agents = utils.TestDataContainer()
|
||||
TEST.api_networks = utils.TestDataContainer()
|
||||
TEST.api_subnets = utils.TestDataContainer()
|
||||
TEST.api_subnetpools = utils.TestDataContainer()
|
||||
TEST.api_ports = utils.TestDataContainer()
|
||||
TEST.api_routers = utils.TestDataContainer()
|
||||
TEST.api_routers_with_routes = utils.TestDataContainer()
|
||||
@ -534,6 +536,40 @@ def data(TEST):
|
||||
TEST.q_secgroup_rules.add(
|
||||
neutron.SecurityGroupRule(copy.copy(rule), sg_name_dict))
|
||||
|
||||
# Subnetpools
|
||||
|
||||
# 1st subnetpool
|
||||
subnetpool_dict = {'default_prefixlen': 24,
|
||||
'default_quota': None,
|
||||
'id': '419eb314-e244-4088-aed7-851af9d9500d',
|
||||
'ip_version': 4,
|
||||
'max_prefixlen': 32,
|
||||
'min_prefixlen': 12,
|
||||
'name': 'mysubnetpool1',
|
||||
'prefixes': ['172.16.0.0/12'],
|
||||
'shared': False,
|
||||
'tenant_id': '1'}
|
||||
|
||||
TEST.api_subnetpools.add(subnetpool_dict)
|
||||
subnetpool = neutron.SubnetPool(subnetpool_dict)
|
||||
TEST.subnetpools.add(subnetpool)
|
||||
|
||||
# 2nd subnetpool (v6)
|
||||
subnetpool_dict = {'default_prefixlen': 64,
|
||||
'default_quota': None,
|
||||
'id': 'dcdad289-46f3-4298-bec6-41d91c942efa',
|
||||
'ip_version': 6,
|
||||
'max_prefixlen': 64,
|
||||
'min_prefixlen': 60,
|
||||
'name': 'mysubnetpool2',
|
||||
'prefixes': ['2001:db8:42::/48'],
|
||||
'shared': False,
|
||||
'tenant_id': '1'}
|
||||
|
||||
TEST.api_subnetpools.add(subnetpool_dict)
|
||||
subnetpool = neutron.SubnetPool(subnetpool_dict)
|
||||
TEST.subnetpools.add(subnetpool)
|
||||
|
||||
# LBaaS.
|
||||
|
||||
# 1st pool.
|
||||
|
Loading…
x
Reference in New Issue
Block a user