summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/nova-manage6
-rw-r--r--nova/db/api.py7
-rw-r--r--nova/db/sqlalchemy/api.py7
3 files changed, 19 insertions, 1 deletions
diff --git a/bin/nova-manage b/bin/nova-manage
index 94b0d5946..8ddfea5c2 100755
--- a/bin/nova-manage
+++ b/bin/nova-manage
@@ -548,7 +548,11 @@ class NetworkCommands(object):
def delete(self, fixed_range):
"""Deletes a network"""
network = db.network_get_by_cidr(context.get_admin_context(), fixed_range)
-
+ if network.project_id is not None:
+ raise ValueError(_('Network must be disassociated from project %s'
+ ' before delete' %network.project_id))
+ db.network_delete_safe(context.get_admin_context(), network.id)
+
class ServiceCommands(object):
"""Enable and disable running services"""
diff --git a/nova/db/api.py b/nova/db/api.py
index 04f5fd72f..7ad99c1f4 100644
--- a/nova/db/api.py
+++ b/nova/db/api.py
@@ -488,6 +488,13 @@ def network_create_safe(context, values):
"""
return IMPL.network_create_safe(context, values)
+def network_delete_safe(context, network_id):
+ """Delete network with key network_id
+
+ This method assumes that the network is not associated with any project
+ """
+ return IMPL.network_delete_safe(context, network_id)
+
def network_create_fixed_ips(context, network_id, num_vpn_clients):
"""Create the ips for the network, reserving sepecified ips."""
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index c8f42425d..90730d325 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -1042,6 +1042,13 @@ def network_create_safe(context, values):
except IntegrityError:
return None
+@require_admin_context
+def network_delete_safe(context, network_id):
+ session = get_session()
+ with session.begin():
+ network_ref = network_get(context, network_id=network_id, session=session)
+ session.delete(network_ref)
+
@require_admin_context
def network_disassociate(context, network_id):