Statistics
| Branch: | Tag: | Revision:

root / api / actions.py @ b9a77976

History | View | Annotate | Download (4.7 kB)

1 b016b476 Giorgos Verigakis
#
2 b016b476 Giorgos Verigakis
# Copyright (c) 2010 Greek Research and Technology Network
3 b016b476 Giorgos Verigakis
#
4 b016b476 Giorgos Verigakis
5 b016b476 Giorgos Verigakis
from synnefo.api.errors import *
6 b016b476 Giorgos Verigakis
from synnefo.util.rapi import GanetiRapiClient
7 b016b476 Giorgos Verigakis
8 b016b476 Giorgos Verigakis
from django.conf import settings
9 b016b476 Giorgos Verigakis
from django.http import HttpResponse
10 b016b476 Giorgos Verigakis
11 b016b476 Giorgos Verigakis
server_actions = {}
12 b016b476 Giorgos Verigakis
13 b016b476 Giorgos Verigakis
rapi = GanetiRapiClient(*settings.GANETI_CLUSTER_INFO)
14 b016b476 Giorgos Verigakis
15 b016b476 Giorgos Verigakis
16 b016b476 Giorgos Verigakis
def server_action(name):
17 b016b476 Giorgos Verigakis
    def decorator(func):
18 b016b476 Giorgos Verigakis
        server_actions[name] = func
19 b016b476 Giorgos Verigakis
        return func
20 b016b476 Giorgos Verigakis
    return decorator
21 b016b476 Giorgos Verigakis
22 b016b476 Giorgos Verigakis
23 b016b476 Giorgos Verigakis
@server_action('changePassword')
24 b016b476 Giorgos Verigakis
def change_password(server, args):
25 b016b476 Giorgos Verigakis
    # Normal Response Code: 202
26 b016b476 Giorgos Verigakis
    # Error Response Codes: computeFault (400, 500),
27 b016b476 Giorgos Verigakis
    #                       serviceUnavailable (503),
28 b016b476 Giorgos Verigakis
    #                       unauthorized (401),
29 b016b476 Giorgos Verigakis
    #                       badRequest (400),
30 b016b476 Giorgos Verigakis
    #                       badMediaType(415),
31 b016b476 Giorgos Verigakis
    #                       itemNotFound (404),
32 b016b476 Giorgos Verigakis
    #                       buildInProgress (409),
33 b016b476 Giorgos Verigakis
    #                       overLimit (413)
34 b016b476 Giorgos Verigakis
    
35 b016b476 Giorgos Verigakis
    try:
36 b016b476 Giorgos Verigakis
        adminPass = args['adminPass']
37 b016b476 Giorgos Verigakis
    except KeyError:
38 b016b476 Giorgos Verigakis
        raise BadRequest()
39 b016b476 Giorgos Verigakis
40 b016b476 Giorgos Verigakis
    raise ServiceUnavailable()
41 b016b476 Giorgos Verigakis
42 b016b476 Giorgos Verigakis
@server_action('reboot')
43 b016b476 Giorgos Verigakis
def reboot(server, args):
44 b016b476 Giorgos Verigakis
    # Normal Response Code: 202
45 b016b476 Giorgos Verigakis
    # Error Response Codes: computeFault (400, 500),
46 b016b476 Giorgos Verigakis
    #                       serviceUnavailable (503),
47 b016b476 Giorgos Verigakis
    #                       unauthorized (401),
48 b016b476 Giorgos Verigakis
    #                       badRequest (400),
49 b016b476 Giorgos Verigakis
    #                       badMediaType(415),
50 b016b476 Giorgos Verigakis
    #                       itemNotFound (404),
51 b016b476 Giorgos Verigakis
    #                       buildInProgress (409),
52 b016b476 Giorgos Verigakis
    #                       overLimit (413)
53 b016b476 Giorgos Verigakis
    
54 b016b476 Giorgos Verigakis
    type = args.get('type', '')
55 b016b476 Giorgos Verigakis
    if type not in ('SOFT', 'HARD'):
56 b016b476 Giorgos Verigakis
        raise BadRequest()
57 b016b476 Giorgos Verigakis
    
58 b016b476 Giorgos Verigakis
    server.start_action('REBOOT')
59 b016b476 Giorgos Verigakis
    rapi.RebootInstance(server.backend_id, type.lower())
60 b016b476 Giorgos Verigakis
    return HttpResponse(status=202)
61 b016b476 Giorgos Verigakis
62 b016b476 Giorgos Verigakis
@server_action('start')
63 b016b476 Giorgos Verigakis
def start(server, args):
64 b016b476 Giorgos Verigakis
    # Normal Response Code: 202
65 b016b476 Giorgos Verigakis
    # Error Response Codes: serviceUnavailable (503), itemNotFound (404)
66 b016b476 Giorgos Verigakis
67 b016b476 Giorgos Verigakis
    server.start_action('START')
68 b016b476 Giorgos Verigakis
    rapi.StartupInstance(server.backend_id)
69 b016b476 Giorgos Verigakis
    return HttpResponse(status=202)
70 b016b476 Giorgos Verigakis
71 b016b476 Giorgos Verigakis
@server_action('shutdown')
72 b016b476 Giorgos Verigakis
def shutdown(server, args):
73 b016b476 Giorgos Verigakis
    # Normal Response Code: 202
74 b016b476 Giorgos Verigakis
    # Error Response Codes: serviceUnavailable (503), itemNotFound (404)
75 b016b476 Giorgos Verigakis
    
76 b016b476 Giorgos Verigakis
    server.start_action('STOP')
77 b016b476 Giorgos Verigakis
    rapi.ShutdownInstance(server.backend_id)
78 b016b476 Giorgos Verigakis
    return HttpResponse(status=202)
79 b016b476 Giorgos Verigakis
80 b016b476 Giorgos Verigakis
@server_action('rebuild')
81 b016b476 Giorgos Verigakis
def rebuild(server, args):
82 b016b476 Giorgos Verigakis
    # Normal Response Code: 202
83 b016b476 Giorgos Verigakis
    # Error Response Codes: computeFault (400, 500),
84 b016b476 Giorgos Verigakis
    #                       serviceUnavailable (503),
85 b016b476 Giorgos Verigakis
    #                       unauthorized (401),
86 b016b476 Giorgos Verigakis
    #                       badRequest (400),
87 b016b476 Giorgos Verigakis
    #                       badMediaType(415),
88 b016b476 Giorgos Verigakis
    #                       itemNotFound (404),
89 b016b476 Giorgos Verigakis
    #                       buildInProgress (409),
90 b016b476 Giorgos Verigakis
    #                       serverCapacityUnavailable (503),
91 b016b476 Giorgos Verigakis
    #                       overLimit (413)
92 b016b476 Giorgos Verigakis
93 b016b476 Giorgos Verigakis
    raise ServiceUnavailable()
94 b016b476 Giorgos Verigakis
95 b016b476 Giorgos Verigakis
@server_action('resize')
96 b016b476 Giorgos Verigakis
def resize(server, args):
97 b016b476 Giorgos Verigakis
    # Normal Response Code: 202
98 b016b476 Giorgos Verigakis
    # Error Response Codes: computeFault (400, 500),
99 b016b476 Giorgos Verigakis
    #                       serviceUnavailable (503),
100 b016b476 Giorgos Verigakis
    #                       unauthorized (401),
101 b016b476 Giorgos Verigakis
    #                       badRequest (400),
102 b016b476 Giorgos Verigakis
    #                       badMediaType(415),
103 b016b476 Giorgos Verigakis
    #                       itemNotFound (404),
104 b016b476 Giorgos Verigakis
    #                       buildInProgress (409),
105 b016b476 Giorgos Verigakis
    #                       serverCapacityUnavailable (503),
106 b016b476 Giorgos Verigakis
    #                       overLimit (413),
107 b016b476 Giorgos Verigakis
    #                       resizeNotAllowed (403)
108 b016b476 Giorgos Verigakis
    
109 b016b476 Giorgos Verigakis
    raise ResizeNotAllowed()
110 b016b476 Giorgos Verigakis
111 b016b476 Giorgos Verigakis
@server_action('confirmResize')
112 b016b476 Giorgos Verigakis
def confirm_resize(server, args):
113 b016b476 Giorgos Verigakis
    # Normal Response Code: 204
114 b016b476 Giorgos Verigakis
    # Error Response Codes: computeFault (400, 500),
115 b016b476 Giorgos Verigakis
    #                       serviceUnavailable (503),
116 b016b476 Giorgos Verigakis
    #                       unauthorized (401),
117 b016b476 Giorgos Verigakis
    #                       badRequest (400),
118 b016b476 Giorgos Verigakis
    #                       badMediaType(415),
119 b016b476 Giorgos Verigakis
    #                       itemNotFound (404),
120 b016b476 Giorgos Verigakis
    #                       buildInProgress (409),
121 b016b476 Giorgos Verigakis
    #                       serverCapacityUnavailable (503),
122 b016b476 Giorgos Verigakis
    #                       overLimit (413),
123 b016b476 Giorgos Verigakis
    #                       resizeNotAllowed (403)
124 b016b476 Giorgos Verigakis
    
125 b016b476 Giorgos Verigakis
    raise ResizeNotAllowed()
126 b016b476 Giorgos Verigakis
127 b016b476 Giorgos Verigakis
@server_action('revertResize')
128 b016b476 Giorgos Verigakis
def revert_resize(server, args):
129 b016b476 Giorgos Verigakis
    # Normal Response Code: 202
130 b016b476 Giorgos Verigakis
    # Error Response Codes: computeFault (400, 500),
131 b016b476 Giorgos Verigakis
    #                       serviceUnavailable (503),
132 b016b476 Giorgos Verigakis
    #                       unauthorized (401),
133 b016b476 Giorgos Verigakis
    #                       badRequest (400),
134 b016b476 Giorgos Verigakis
    #                       badMediaType(415),
135 b016b476 Giorgos Verigakis
    #                       itemNotFound (404),
136 b016b476 Giorgos Verigakis
    #                       buildInProgress (409),
137 b016b476 Giorgos Verigakis
    #                       serverCapacityUnavailable (503),
138 b016b476 Giorgos Verigakis
    #                       overLimit (413),
139 b016b476 Giorgos Verigakis
    #                       resizeNotAllowed (403)
140 b016b476 Giorgos Verigakis
141 b016b476 Giorgos Verigakis
    raise ResizeNotAllowed()