summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/db/api.py5
-rw-r--r--nova/db/sqlalchemy/api.py10
-rw-r--r--nova/network/manager.py9
3 files changed, 21 insertions, 3 deletions
diff --git a/nova/db/api.py b/nova/db/api.py
index 601bdcee0..915589fb3 100644
--- a/nova/db/api.py
+++ b/nova/db/api.py
@@ -357,6 +357,11 @@ def fixed_ip_create(context, values):
return IMPL.fixed_ip_create(context, values)
+def fixed_ip_bulk_create(context, ips):
+ """Create a lot of fixed ips from the values dictionary."""
+ return IMPL.fixed_ip_bulk_create(context, ips)
+
+
def fixed_ip_disassociate(context, address):
"""Disassociate a fixed ip from an instance by address."""
return IMPL.fixed_ip_disassociate(context, address)
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index 983c48145..47efb9019 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -768,6 +768,16 @@ def fixed_ip_create(_context, values):
@require_context
+def fixed_ip_bulk_create(_context, ips):
+ session = get_session()
+ with session.begin():
+ for ip in ips:
+ model = models.FixedIp()
+ model.update(ip)
+ session.add(model)
+
+
+@require_context
def fixed_ip_disassociate(context, address):
session = get_session()
with session.begin():
diff --git a/nova/network/manager.py b/nova/network/manager.py
index ea6bdb5d4..79bb0eda1 100644
--- a/nova/network/manager.py
+++ b/nova/network/manager.py
@@ -1015,15 +1015,18 @@ class NetworkManager(manager.SchedulerDependentManager):
top_reserved = self._top_reserved_ips
project_net = netaddr.IPNetwork(network['cidr'])
num_ips = len(project_net)
+ ips = []
for index in range(num_ips):
address = str(project_net[index])
if index < bottom_reserved or num_ips - index < top_reserved:
reserved = True
else:
reserved = False
- self.db.fixed_ip_create(context, {'network_id': network_id,
- 'address': address,
- 'reserved': reserved})
+
+ ips.append({'network_id': network_id,
+ 'address': address,
+ 'reserved': reserved})
+ self.db.fixed_ip_bulk_create(context, ips)
def _allocate_fixed_ips(self, context, instance_id, host, networks,
**kwargs):