Revision 92d2d1ce snf-cyclades-app/synnefo/db/models.py
b/snf-cyclades-app/synnefo/db/models.py | ||
---|---|---|
531 | 531 |
if not backend_exists: |
532 | 532 |
BackendNetwork.objects.create(backend=backend, network=self) |
533 | 533 |
|
534 |
def get_pool(self, with_lock=True):
|
|
534 |
def get_pool(self, locked=True):
|
|
535 | 535 |
try: |
536 | 536 |
subnet = self.subnets.get(ipversion=4, deleted=False) |
537 | 537 |
except Subnet.DoesNotExist: |
538 | 538 |
raise pools.EmptyPool |
539 |
return subnet.get_pool(locked=locked) |
|
540 |
|
|
541 |
def allocate_address(self, userid): |
|
539 | 542 |
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) |
|
546 |
objects = IPPoolTable.objects |
|
547 |
if with_lock: |
|
548 |
objects = objects.select_for_update() |
|
549 |
return objects.get(id=pool.id) |
|
543 |
subnet = self.subnets.get(ipversion=4, deleted=False) |
|
544 |
except Subnet.DoesNotExist: |
|
545 |
raise pools.EmptyPool |
|
546 |
return subnet.allocate_address(userid) |
|
550 | 547 |
|
551 | 548 |
def reserve_address(self, address): |
552 | 549 |
pool = self.get_pool() |
... | ... | |
601 | 598 |
def __unicode__(self): |
602 | 599 |
return "<Subnet %s, Network: %s>" % (self.id, self.network_id) |
603 | 600 |
|
601 |
def get_pool(self, locked=True): |
|
602 |
if self.ipversion == 6: |
|
603 |
raise Exception("IPv6 Subnets have no IP Pool.") |
|
604 |
ip_pools = self.ip_pools |
|
605 |
if locked: |
|
606 |
ip_pools = ip_pools.select_for_update() |
|
607 |
return ip_pools.all()[0].pool |
|
608 |
|
|
609 |
def allocate_address(self, userid): |
|
610 |
pool = self.get_pool(locked=True) |
|
611 |
address = pool.get() |
|
612 |
pool.save() |
|
613 |
return IPAddress.objects.create(network=self.network, subnet=self, |
|
614 |
address=address, userid=userid) |
|
615 |
|
|
604 | 616 |
|
605 | 617 |
class BackendNetwork(models.Model): |
606 | 618 |
OPER_STATES = ( |
... | ... | |
755 | 767 |
"""Return the backend id by prepending backend-prefix.""" |
756 | 768 |
return "%snic-%s" % (settings.BACKEND_PREFIX_ID, str(self.id)) |
757 | 769 |
|
770 |
@property |
|
771 |
def ipv4_address(self): |
|
772 |
try: |
|
773 |
return self.ips.get(subnet__ipversion=4).address |
|
774 |
except IPAddress.DoesNotExist: |
|
775 |
return None |
|
776 |
|
|
758 | 777 |
|
759 | 778 |
class SecurityGroup(models.Model): |
760 | 779 |
SECURITY_GROUP_NAME_LENGTH = 128 |
Also available in: Unified diff