Revision b3fd98ae snf-cyclades-app/synnefo/api/servers.py

b/snf-cyclades-app/synnefo/api/servers.py
1
# Copyright 2011-2012 GRNET S.A. All rights reserved.
1
# Copyright 2011-2013 GRNET S.A. All rights reserved.
2 2
#
3 3
# Redistribution and use in source and binary forms, with or
4 4
# without modification, are permitted provided that the following
......
31 31
# interpreted as representing official policies, either expressed
32 32
# or implied, of GRNET S.A.
33 33

  
34
from base64 import b64decode
35

  
36 34
from django import dispatch
37 35
from django.conf import settings
38 36
from django.conf.urls.defaults import patterns
......
41 39
from django.template.loader import render_to_string
42 40
from django.utils import simplejson as json
43 41

  
44
from snf_django.lib.api import faults
42
from snf_django.lib import api
43
from snf_django.lib.api import faults, utils
45 44
from synnefo.api import util
46 45
from synnefo.api.actions import server_actions
47
from synnefo.api.common import method_not_allowed
48 46
from synnefo.db.models import (VirtualMachine, VirtualMachineMetadata,
49 47
                               NetworkInterface)
50 48
from synnefo.logic.backend import create_instance, delete_instance
......
57 55
server_created = dispatch.Signal(providing_args=["created_vm_params"])
58 56

  
59 57
from logging import getLogger
60
log = getLogger('synnefo.api')
58
log = getLogger(__name__)
61 59

  
62 60
urlpatterns = patterns(
63 61
    'synnefo.api.servers',
......
80 78
    elif request.method == 'POST':
81 79
        return create_server(request)
82 80
    else:
83
        return method_not_allowed(request)
81
        return api.method_not_allowed(request)
84 82

  
85 83

  
86 84
def server_demux(request, server_id):
......
91 89
    elif request.method == 'DELETE':
92 90
        return delete_server(request, server_id)
93 91
    else:
94
        return method_not_allowed(request)
92
        return api.method_not_allowed(request)
95 93

  
96 94

  
97 95
def metadata_demux(request, server_id):
......
100 98
    elif request.method == 'POST':
101 99
        return update_metadata(request, server_id)
102 100
    else:
103
        return method_not_allowed(request)
101
        return api.method_not_allowed(request)
104 102

  
105 103

  
106 104
def metadata_item_demux(request, server_id, key):
......
111 109
    elif request.method == 'DELETE':
112 110
        return delete_metadata_item(request, server_id, key)
113 111
    else:
114
        return method_not_allowed(request)
112
        return api.method_not_allowed(request)
115 113

  
116 114

  
117 115
def nic_to_dict(nic):
......
133 131
        d['progress'] = 100 if get_rsapi_state(vm) == 'ACTIVE' \
134 132
            else vm.buildpercentage
135 133
        d['hostId'] = vm.hostid
136
        d['updated'] = util.isoformat(vm.updated)
137
        d['created'] = util.isoformat(vm.created)
134
        d['updated'] = utils.isoformat(vm.updated)
135
        d['created'] = utils.isoformat(vm.created)
138 136
        d['flavorRef'] = vm.flavor.id
139 137
        d['imageRef'] = vm.imageid
140 138
        d['suspended'] = vm.suspended
......
166 164
        # format source date if set
167 165
        formatted_source_date = None
168 166
        if diagnostic.source_date:
169
            formatted_source_date = util.isoformat(diagnostic.source_date)
167
            formatted_source_date = utils.isoformat(diagnostic.source_date)
170 168

  
171 169
        entry = {
172 170
            'source': diagnostic.source,
173
            'created': util.isoformat(diagnostic.created),
171
            'created': utils.isoformat(diagnostic.created),
174 172
            'message': diagnostic.message,
175 173
            'details': diagnostic.details,
176 174
            'level': diagnostic.level,
......
201 199
    return HttpResponse(json.dumps(diagnostics_dict), status=status)
202 200

  
203 201

  
204
@util.api_method('GET')
202
@api.api_method(http_method='GET', user_required=True, logger=log)
205 203
def get_server_diagnostics(request, server_id):
206 204
    """
207 205
    Virtual machine diagnostics api view.
......
212 210
    return render_diagnostics(request, diagnostics)
213 211

  
214 212

  
215
@util.api_method('GET')
213
@api.api_method(http_method='GET', user_required=True, logger=log)
216 214
def list_servers(request, detail=False):
217 215
    # Normal Response Codes: 200, 203
218 216
    # Error Response Codes: computeFault (400, 500),
......
224 222
    log.debug('list_servers detail=%s', detail)
225 223
    user_vms = VirtualMachine.objects.filter(userid=request.user_uniq)
226 224

  
227
    since = util.isoparse(request.GET.get('changes-since'))
225
    since = utils.isoparse(request.GET.get('changes-since'))
228 226

  
229 227
    if since:
230 228
        user_vms = user_vms.filter(updated__gte=since)
......
246 244
    return HttpResponse(data, status=200)
247 245

  
248 246

  
249
@util.api_method('POST')
247
@api.api_method(http_method='POST', user_required=True, logger=log)
250 248
# Use manual transactions. Backend and IP pool allocations need exclusive
251 249
# access (SELECT..FOR UPDATE). Running create_server with commit_on_success
252 250
# would result in backends and public networks to be locked until the job is
......
264 262
    #                       serverCapacityUnavailable (503),
265 263
    #                       overLimit (413)
266 264
    try:
267
        req = util.get_request_dict(request)
265
        req = utils.get_request_dict(request)
268 266
        log.info('create_server %s', req)
269 267
        user_id = request.user_uniq
270 268

  
......
398 396
    return respsone
399 397

  
400 398

  
401
@util.api_method('GET')
399
@api.api_method(http_method='GET', user_required=True, logger=log)
402 400
def get_server_details(request, server_id):
403 401
    # Normal Response Codes: 200, 203
404 402
    # Error Response Codes: computeFault (400, 500),
......
414 412
    return render_server(request, server)
415 413

  
416 414

  
417
@util.api_method('PUT')
415
@api.api_method(http_method='PUT', user_required=True, logger=log)
418 416
def update_server_name(request, server_id):
419 417
    # Normal Response Code: 204
420 418
    # Error Response Codes: computeFault (400, 500),
......
426 424
    #                       buildInProgress (409),
427 425
    #                       overLimit (413)
428 426

  
429
    req = util.get_request_dict(request)
427
    req = utils.get_request_dict(request)
430 428
    log.info('update_server_name %s %s', server_id, req)
431 429

  
432 430
    try:
......
442 440
    return HttpResponse(status=204)
443 441

  
444 442

  
445
@util.api_method('DELETE')
443
@api.api_method(http_method='DELETE', user_required=True, logger=log)
446 444
@transaction.commit_on_success
447 445
def delete_server(request, server_id):
448 446
    # Normal Response Codes: 204
......
466 464
ARBITRARY_ACTIONS = ['console', 'firewallProfile']
467 465

  
468 466

  
469
@util.api_method('POST')
467
@api.api_method(http_method='POST', user_required=True, logger=log)
470 468
def server_action(request, server_id):
471
    req = util.get_request_dict(request)
469
    req = utils.get_request_dict(request)
472 470
    log.debug('server_action %s %s', server_id, req)
473 471

  
474 472
    if len(req) != 1:
......
528 526
    vm.save()
529 527

  
530 528

  
531
@util.api_method('GET')
529
@api.api_method(http_method='GET', user_required=True, logger=log)
532 530
def list_addresses(request, server_id):
533 531
    # Normal Response Codes: 200, 203
534 532
    # Error Response Codes: computeFault (400, 500),
......
549 547
    return HttpResponse(data, status=200)
550 548

  
551 549

  
552
@util.api_method('GET')
550
@api.api_method(http_method='GET', user_required=True, logger=log)
553 551
def list_addresses_by_network(request, server_id, network_id):
554 552
    # Normal Response Codes: 200, 203
555 553
    # Error Response Codes: computeFault (400, 500),
......
573 571
    return HttpResponse(data, status=200)
574 572

  
575 573

  
576
@util.api_method('GET')
574
@api.api_method(http_method='GET', user_required=True, logger=log)
577 575
def list_metadata(request, server_id):
578 576
    # Normal Response Codes: 200, 203
579 577
    # Error Response Codes: computeFault (400, 500),
......
588 586
    return util.render_metadata(request, metadata, use_values=True, status=200)
589 587

  
590 588

  
591
@util.api_method('POST')
589
@api.api_method(http_method='POST', user_required=True, logger=log)
592 590
def update_metadata(request, server_id):
593 591
    # Normal Response Code: 201
594 592
    # Error Response Codes: computeFault (400, 500),
......
599 597
    #                       badMediaType(415),
600 598
    #                       overLimit (413)
601 599

  
602
    req = util.get_request_dict(request)
600
    req = utils.get_request_dict(request)
603 601
    log.info('update_server_metadata %s %s', server_id, req)
604 602
    vm = util.get_vm(server_id, request.user_uniq, non_suspended=True)
605 603
    try:
......
618 616
    return util.render_metadata(request, vm_meta, status=201)
619 617

  
620 618

  
621
@util.api_method('GET')
619
@api.api_method(http_method='GET', user_required=True, logger=log)
622 620
def get_metadata_item(request, server_id, key):
623 621
    # Normal Response Codes: 200, 203
624 622
    # Error Response Codes: computeFault (400, 500),
......
635 633
    return util.render_meta(request, d, status=200)
636 634

  
637 635

  
638
@util.api_method('PUT')
636
@api.api_method(http_method='PUT', user_required=True, logger=log)
639 637
@transaction.commit_on_success
640 638
def create_metadata_item(request, server_id, key):
641 639
    # Normal Response Code: 201
......
648 646
    #                       badMediaType(415),
649 647
    #                       overLimit (413)
650 648

  
651
    req = util.get_request_dict(request)
649
    req = utils.get_request_dict(request)
652 650
    log.info('create_server_metadata_item %s %s %s', server_id, key, req)
653 651
    vm = util.get_vm(server_id, request.user_uniq, non_suspended=True)
654 652
    try:
......
670 668
    return util.render_meta(request, d, status=201)
671 669

  
672 670

  
673
@util.api_method('DELETE')
671
@api.api_method(http_method='DELETE', user_required=True, logger=log)
674 672
@transaction.commit_on_success
675 673
def delete_metadata_item(request, server_id, key):
676 674
    # Normal Response Code: 204
......
691 689
    return HttpResponse(status=204)
692 690

  
693 691

  
694
@util.api_method('GET')
692
@api.api_method(http_method='GET', user_required=True, logger=log)
695 693
def server_stats(request, server_id):
696 694
    # Normal Response Codes: 200
697 695
    # Error Response Codes: computeFault (400, 500),

Also available in: Unified diff