Revision 77f0fa63 snf-cyclades-app/synnefo/api/actions.py
b/snf-cyclades-app/synnefo/api/actions.py | ||
---|---|---|
34 | 34 |
from socket import getfqdn |
35 | 35 |
from vncauthproxy.client import request_forwarding as request_vnc_forwarding |
36 | 36 |
|
37 |
from django.db import transaction |
|
37 | 38 |
from django.conf import settings |
38 | 39 |
from django.http import HttpResponse |
39 | 40 |
from django.template.loader import render_to_string |
... | ... | |
42 | 43 |
from synnefo.api.faults import (BadRequest, ServiceUnavailable, |
43 | 44 |
ItemNotFound, BuildInProgress) |
44 | 45 |
from synnefo.api.util import random_password, get_vm, get_nic_from_index |
45 |
from synnefo.db.models import NetworkInterface |
|
46 |
from synnefo.logic import backend |
|
46 |
from synnefo.db.models import NetworkInterface, Network
|
|
47 |
from synnefo.logic import backend, ippool
|
|
47 | 48 |
from synnefo.logic.utils import get_rsapi_state |
48 | 49 |
|
49 | 50 |
|
... | ... | |
289 | 290 |
|
290 | 291 |
|
291 | 292 |
@network_action('add') |
293 |
@transaction.commit_on_success |
|
292 | 294 |
def add(request, net, args): |
293 | 295 |
# Normal Response Code: 202 |
294 | 296 |
# Error Response Codes: computeFault (400, 500), |
... | ... | |
303 | 305 |
if not server_id: |
304 | 306 |
raise BadRequest('Malformed Request.') |
305 | 307 |
vm = get_vm(server_id, request.user_uniq) |
306 |
backend.connect_to_network(vm, net) |
|
308 |
|
|
309 |
#Dummy write to enforce isolation |
|
310 |
Network.objects.filter(id=net.id).update(id=net.id) |
|
311 |
net = Network.objects.get(id=net.id) |
|
312 |
# Get a free IP from the address pool. |
|
313 |
pool = ippool.IPPool(net) |
|
314 |
try: |
|
315 |
address = pool.get_free_address() |
|
316 |
except ippool.IPPool.IPPoolExhausted: |
|
317 |
raise ServiceUnavailable('Network is full') |
|
318 |
pool.save() |
|
319 |
|
|
320 |
backend.connect_to_network(vm, net, address) |
|
307 | 321 |
return HttpResponse(status=202) |
308 | 322 |
|
323 |
|
|
309 | 324 |
@network_action('remove') |
310 | 325 |
def remove(request, net, args): |
311 | 326 |
# Normal Response Code: 202 |
Also available in: Unified diff