diff options
| -rw-r--r-- | nova/db/api.py | 5 | ||||
| -rw-r--r-- | nova/db/sqlalchemy/api.py | 10 | ||||
| -rw-r--r-- | nova/network/manager.py | 9 |
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): |
