Revision 09471611 api/actions.py

b/api/actions.py
4 4

  
5 5
from django.conf import settings
6 6
from django.http import HttpResponse
7
from django.template.loader import render_to_string
8
from django.utils import simplejson as json
7 9

  
8 10
from synnefo.api.errors import *
11
from synnefo.api.util import random_password
9 12
from synnefo.util.rapi import GanetiRapiClient
13
from synnefo.util.vapclient import request_forwarding as request_vnc_forwarding
10 14
from synnefo.logic import backend, utils
11 15

  
12 16
server_actions = {}
......
20 24
        return func
21 25
    return decorator
22 26

  
27
@server_action('console')
28
def get_console(request, server, args):
29
    """Arrange for an OOB console of the specified type
30

  
31
    This method arranges for an OOB console of the specified type.
32
    Only "vnc" type consoles are supported for now.
33
    It uses a running instance of vncauthproxy to setup proper
34
    VNC forwarding with a random password, then returns the necessary
35
    VNC connection info to the caller.
36

  
37
    """
38
    # Normal Response Code: 200
39
    # Error Response Codes: computeFault (400, 500),
40
    #                       serviceUnavailable (503),
41
    #                       unauthorized (401),
42
    #                       badRequest (400),
43
    #                       badMediaType(415),
44
    #                       itemNotFound (404),
45
    #                       buildInProgress (409),
46
    #                       overLimit (413)
47
    try:
48
        console_type = args.get('type', '')
49
        if console_type != 'VNC':
50
            raise BadRequest(message="type can only be 'VNC'")
51
    except KeyError:
52
        raise BadRequest()
53

  
54
    # Use RAPI to get VNC console information for this instance
55
    if utils.get_rsapi_state(server) != 'ACTIVE':
56
        raise BadRequest(message="Server not in ACTIVE state")
57
    console_data = rapi.GetInstanceConsole(server.backend_id)
58
    if console_data['kind'] != 'vnc':
59
        raise ServiceUnavailable()
60

  
61
    # Let vncauthproxy decide on the source port.
62
    # FIXME
63
    # sport = 0
64
    sport = console_data['port'] - 1000
65
    daddr = console_data['host']
66
    dport = console_data['port']
67
    passwd = random_password()
68

  
69
    request_vnc_forwarding(sport, daddr, dport, passwd)
70
    vnc = { 'host': '62.217.120.67', 'port': sport, 'password': passwd }
71

  
72
    # Format to be reviewed by [verigak], FIXME
73
    if request.type == 'xml':
74
        mimetype = 'application/xml'
75
        data = render_to_string('vnc.xml', {'vnc': vnc})
76
    else:
77
        mimetype = 'application/json'
78
        data = json.dumps(vnc)
79

  
80
    return HttpResponse(data, mimetype=mimetype, status=200)
81

  
23 82

  
24 83
@server_action('changePassword')
25
def change_password(server, args):
84
def change_password(request, server, args):
26 85
    # Normal Response Code: 202
27 86
    # Error Response Codes: computeFault (400, 500),
28 87
    #                       serviceUnavailable (503),
......
41 100
    raise ServiceUnavailable()
42 101

  
43 102
@server_action('reboot')
44
def reboot(server, args):
103
def reboot(request, server, args):
45 104
    # Normal Response Code: 202
46 105
    # Error Response Codes: computeFault (400, 500),
47 106
    #                       serviceUnavailable (503),
......
61 120
    return HttpResponse(status=202)
62 121

  
63 122
@server_action('start')
64
def start(server, args):
123
def start(request, server, args):
65 124
    # Normal Response Code: 202
66 125
    # Error Response Codes: serviceUnavailable (503), itemNotFound (404)
67 126

  
......
70 129
    return HttpResponse(status=202)
71 130

  
72 131
@server_action('shutdown')
73
def shutdown(server, args):
132
def shutdown(request, server, args):
74 133
    # Normal Response Code: 202
75 134
    # Error Response Codes: serviceUnavailable (503), itemNotFound (404)
76 135
    
......
79 138
    return HttpResponse(status=202)
80 139

  
81 140
@server_action('rebuild')
82
def rebuild(server, args):
141
def rebuild(request, server, args):
83 142
    # Normal Response Code: 202
84 143
    # Error Response Codes: computeFault (400, 500),
85 144
    #                       serviceUnavailable (503),
......
94 153
    raise ServiceUnavailable()
95 154

  
96 155
@server_action('resize')
97
def resize(server, args):
156
def resize(request, server, args):
98 157
    # Normal Response Code: 202
99 158
    # Error Response Codes: computeFault (400, 500),
100 159
    #                       serviceUnavailable (503),
......
110 169
    raise ResizeNotAllowed()
111 170

  
112 171
@server_action('confirmResize')
113
def confirm_resize(server, args):
172
def confirm_resize(request, server, args):
114 173
    # Normal Response Code: 204
115 174
    # Error Response Codes: computeFault (400, 500),
116 175
    #                       serviceUnavailable (503),
......
126 185
    raise ResizeNotAllowed()
127 186

  
128 187
@server_action('revertResize')
129
def revert_resize(server, args):
188
def revert_resize(request, server, args):
130 189
    # Normal Response Code: 202
131 190
    # Error Response Codes: computeFault (400, 500),
132 191
    #                       serviceUnavailable (503),

Also available in: Unified diff