Revision d0411c0a snf-cyclades-app/synnefo/db/migrations/0037_network_migration.py

b/snf-cyclades-app/synnefo/db/migrations/0037_network_migration.py
3 3
from south.db import db
4 4
from south.v2 import DataMigration
5 5
from django.db import models
6
from synnefo.db.models import BridgePool
6
from synnefo import settings
7

  
8
def get_available_bridge(orm):
9
    try:
10
        entry = orm.BridgePool.objects.filter(available=True)[0]
11
        entry.available = False
12
        entry.save()
13
        return entry
14
    except IndexError:
15
        try:
16
            last = orm.BridgePool.objects.order_by('-index')[0]
17
            index = last.index + 1
18
        except IndexError:
19
            index = 1
20

  
21
        if index <= settings.PRIVATE_PHYSICAL_VLAN_MAX_NUMBER:
22
            create_bridge = orm.BridgePool.objects.create
23
            return create_bridge(index=index,
24
                                 value=value_from_index(index),
25
                                 available=False)
26
        raise Exception('Pool of bridges exhausted. Can not'
27
                        ' allocate bridge')
28

  
29
def value_from_index(index):
30
    return settings.PRIVATE_PHYSICAL_VLAN_BRIDGE_PREFIX + str(index)
7 31

  
8 32
class Migration(DataMigration):
9 33
    
......
26 50
            else:
27 51
                network.dhcp = False
28 52
                network.type = 'PRIVATE_PHYSICAL_VLAN'
29
                bridge = BridgePool.get_available()
53
                entry = get_available_bridge(orm)
54
                bridge = entry
30 55
                network.netlink = bridge.value
31 56

  
32 57
            network.save()

Also available in: Unified diff