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