Revision b47f167a snf-cyclades-app/synnefo/logic/networks.py
b/snf-cyclades-app/synnefo/logic/networks.py | ||
---|---|---|
36 | 36 |
from snf_django.lib.api import faults |
37 | 37 |
from synnefo.api import util |
38 | 38 |
from synnefo import quotas |
39 |
from synnefo.db.models import Network |
|
39 |
from synnefo.db.models import Network, Backend
|
|
40 | 40 |
from synnefo.db.utils import validate_mac |
41 | 41 |
from synnefo.db.pools import EmptyPool |
42 |
from synnefo.logic import backend |
|
42 |
from synnefo.logic import backend as backend_mod
|
|
43 | 43 |
|
44 | 44 |
from logging import getLogger |
45 | 45 |
log = getLogger(__name__) |
... | ... | |
64 | 64 |
@transaction.commit_on_success |
65 | 65 |
def create(user_id, name, flavor, subnet=None, gateway=None, subnet6=None, |
66 | 66 |
gateway6=None, public=False, dhcp=True, link=None, mac_prefix=None, |
67 |
mode=None, floating_ip_pool=False, tags=None): |
|
67 |
mode=None, floating_ip_pool=False, tags=None, backend=None, |
|
68 |
lazy_create=True): |
|
68 | 69 |
if flavor is None: |
69 | 70 |
raise faults.BadRequest("Missing request parameter 'type'") |
70 | 71 |
elif flavor not in Network.FLAVORS.keys(): |
... | ... | |
124 | 125 |
# Note: the following call does a commit! |
125 | 126 |
if not public: |
126 | 127 |
quotas.issue_and_accept_commission(network) |
128 |
|
|
129 |
if not lazy_create: |
|
130 |
if floating_ip_pool: |
|
131 |
backends = Backend.objects.filter(offline=False) |
|
132 |
elif backend is not None: |
|
133 |
backends = [backend] |
|
134 |
else: |
|
135 |
backends = [] |
|
136 |
|
|
137 |
for bend in backends: |
|
138 |
network.create_backend_network(bend) |
|
139 |
backend_mod.create_network(network=network, backend=bend, |
|
140 |
connect=True) |
|
127 | 141 |
return network |
128 | 142 |
|
129 | 143 |
|
... | ... | |
147 | 161 |
network.save() |
148 | 162 |
|
149 | 163 |
# Delete network to all backends that exists |
150 |
backend_networks = network.backend_networks.exclude(operstate="DELETED") |
|
151 |
for bnet in backend_networks: |
|
152 |
backend.delete_network(network, bnet.backend) |
|
153 |
# If network does not exist in any backend, update the network state |
|
154 |
if not backend_networks: |
|
155 |
backend.update_network_state(network) |
|
164 |
for bnet in network.backend_networks.exclude(operstate="DELETED"): |
|
165 |
backend_mod.delete_network(network, bnet.backend) |
|
166 |
else: |
|
167 |
# If network does not exist in any backend, update the network state |
|
168 |
backend_mod.update_network_state(network) |
|
156 | 169 |
return network |
Also available in: Unified diff