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