Re-implemented IP policies with offset and length

* Implemented CRUD ip_policies plugin methods
* Implemented plugin ip_policy unit tests
* Added IP Policy logic to ipam.allocate_ip_address
* Implemented ip_policy ipam unit tests
* Implemented ip_policies extension
* Added ip_policies db models
* Implemented db_api ip_policy methods
* Implemented _make_ip_policy_dict view
* Fixed existing tests

An IP Policy is defined on a subnet or network definining what IPs to
exclude from allocation. From a user perspective an IP Policy looks
like the following:

{
  "id": <id>,
  "tenant_id": <tenant_id>,
  "name": "foobar",
  "subnet_ids": [] (list of uuids),
  "network_ids": [] (list of uuids),
  "exclude": list of dictionaries (e.g. [{"offset": -1, "length": 3}])
}

"exclude" is always required. One of "subnet_ids" or "network_ids"
is required. Only one policy is allowed per network.

A default policy is enabled on all subnets if no ip policies are
specified on that subnet or its network. This default policy is
established via JSON configuration as "default_ip_policy". The
default for "default_ip_policy" is no policy.
This commit is contained in:
Amir Sadoughi
2013-07-24 20:57:52 -05:00
parent 7f4c1c7cdc
commit c6ca88568d
12 changed files with 404 additions and 147 deletions

View File

@@ -42,6 +42,11 @@ class IPPoliciesController(wsgi.Controller):
return {RESOURCE_NAME:
self._plugin.create_ip_policy(request.context, body)}
def update(self, request, id, body=None):
body = self._deserialize(request.body, request.get_content_type())
return {RESOURCE_NAME:
self._plugin.update_ip_policy(request.context, id, body)}
def index(self, request):
context = request.context
return {RESOURCE_COLLECTION: