Revision b4695420

b/snf-cyclades-app/synnefo/db/models.py
532 532
                BackendNetwork.objects.create(backend=backend, network=self)
533 533

  
534 534
    def get_pool(self, with_lock=True):
535
        if not self.pool_id:
536
            self.pool = IPPoolTable.objects.create(available_map='',
537
                                                   reserved_map='',
538
                                                   size=0)
539
            self.save()
535
        try:
536
            subnet = self.subnets.get(ipversion=4, deleted=False)
537
        except Subnet.DoesNotExist:
538
            raise pools.EmptyPool
539
        try:
540
            pool = subnet.ip_pools.all()[0]
541
        except IndexError:
542
            pool = IPPoolTable.objects.create(available_map='',
543
                                              reserved_map='',
544
                                              size=0,
545
                                              subnet=subnet)
540 546
        objects = IPPoolTable.objects
541 547
        if with_lock:
542 548
            objects = objects.select_for_update()
543
        return objects.get(id=self.pool_id).pool
549
        return objects.get(id=pool.id)
544 550

  
545 551
    def reserve_address(self, address):
546 552
        pool = self.get_pool()
b/snf-cyclades-app/synnefo/db/pools/__init__.py
248 248
class IPPool(PoolManager):
249 249
    def __init__(self, pool_table):
250 250
        do_init = False if pool_table.available_map else True
251
        network = pool_table.network
252
        self.net = ipaddr.IPNetwork(network.subnet)
251
        subnet = pool_table.subnet
252
        self.net = ipaddr.IPNetwork(subnet.cidr)
253 253
        if not pool_table.size:
254 254
            pool_table.size = self.net.numhosts
255 255
        super(IPPool, self).__init__(pool_table)
256
        gateway = network.gateway
256
        gateway = subnet.gateway
257 257
        self.gateway = gateway and ipaddr.IPAddress(gateway) or None
258 258
        if do_init:
259 259
            self._reserve(0, external=True)

Also available in: Unified diff