Statistics
| Branch: | Tag: | Revision:

root / api / actions.py @ b016b476

History | View | Annotate | Download (4.7 kB)

1
#
2
# Copyright (c) 2010 Greek Research and Technology Network
3
#
4

    
5
from synnefo.api.errors import *
6
from synnefo.util.rapi import GanetiRapiClient
7

    
8
from django.conf import settings
9
from django.http import HttpResponse
10

    
11
server_actions = {}
12

    
13
rapi = GanetiRapiClient(*settings.GANETI_CLUSTER_INFO)
14

    
15

    
16
def server_action(name):
17
    def decorator(func):
18
        server_actions[name] = func
19
        return func
20
    return decorator
21

    
22

    
23
@server_action('changePassword')
24
def change_password(server, args):
25
    # Normal Response Code: 202
26
    # Error Response Codes: computeFault (400, 500),
27
    #                       serviceUnavailable (503),
28
    #                       unauthorized (401),
29
    #                       badRequest (400),
30
    #                       badMediaType(415),
31
    #                       itemNotFound (404),
32
    #                       buildInProgress (409),
33
    #                       overLimit (413)
34
    
35
    try:
36
        adminPass = args['adminPass']
37
    except KeyError:
38
        raise BadRequest()
39

    
40
    raise ServiceUnavailable()
41

    
42
@server_action('reboot')
43
def reboot(server, args):
44
    # Normal Response Code: 202
45
    # Error Response Codes: computeFault (400, 500),
46
    #                       serviceUnavailable (503),
47
    #                       unauthorized (401),
48
    #                       badRequest (400),
49
    #                       badMediaType(415),
50
    #                       itemNotFound (404),
51
    #                       buildInProgress (409),
52
    #                       overLimit (413)
53
    
54
    type = args.get('type', '')
55
    if type not in ('SOFT', 'HARD'):
56
        raise BadRequest()
57
    
58
    server.start_action('REBOOT')
59
    rapi.RebootInstance(server.backend_id, type.lower())
60
    return HttpResponse(status=202)
61

    
62
@server_action('start')
63
def start(server, args):
64
    # Normal Response Code: 202
65
    # Error Response Codes: serviceUnavailable (503), itemNotFound (404)
66

    
67
    server.start_action('START')
68
    rapi.StartupInstance(server.backend_id)
69
    return HttpResponse(status=202)
70

    
71
@server_action('shutdown')
72
def shutdown(server, args):
73
    # Normal Response Code: 202
74
    # Error Response Codes: serviceUnavailable (503), itemNotFound (404)
75
    
76
    server.start_action('STOP')
77
    rapi.ShutdownInstance(server.backend_id)
78
    return HttpResponse(status=202)
79

    
80
@server_action('rebuild')
81
def rebuild(server, args):
82
    # Normal Response Code: 202
83
    # Error Response Codes: computeFault (400, 500),
84
    #                       serviceUnavailable (503),
85
    #                       unauthorized (401),
86
    #                       badRequest (400),
87
    #                       badMediaType(415),
88
    #                       itemNotFound (404),
89
    #                       buildInProgress (409),
90
    #                       serverCapacityUnavailable (503),
91
    #                       overLimit (413)
92

    
93
    raise ServiceUnavailable()
94

    
95
@server_action('resize')
96
def resize(server, args):
97
    # Normal Response Code: 202
98
    # Error Response Codes: computeFault (400, 500),
99
    #                       serviceUnavailable (503),
100
    #                       unauthorized (401),
101
    #                       badRequest (400),
102
    #                       badMediaType(415),
103
    #                       itemNotFound (404),
104
    #                       buildInProgress (409),
105
    #                       serverCapacityUnavailable (503),
106
    #                       overLimit (413),
107
    #                       resizeNotAllowed (403)
108
    
109
    raise ResizeNotAllowed()
110

    
111
@server_action('confirmResize')
112
def confirm_resize(server, args):
113
    # Normal Response Code: 204
114
    # Error Response Codes: computeFault (400, 500),
115
    #                       serviceUnavailable (503),
116
    #                       unauthorized (401),
117
    #                       badRequest (400),
118
    #                       badMediaType(415),
119
    #                       itemNotFound (404),
120
    #                       buildInProgress (409),
121
    #                       serverCapacityUnavailable (503),
122
    #                       overLimit (413),
123
    #                       resizeNotAllowed (403)
124
    
125
    raise ResizeNotAllowed()
126

    
127
@server_action('revertResize')
128
def revert_resize(server, args):
129
    # Normal Response Code: 202
130
    # Error Response Codes: computeFault (400, 500),
131
    #                       serviceUnavailable (503),
132
    #                       unauthorized (401),
133
    #                       badRequest (400),
134
    #                       badMediaType(415),
135
    #                       itemNotFound (404),
136
    #                       buildInProgress (409),
137
    #                       serverCapacityUnavailable (503),
138
    #                       overLimit (413),
139
    #                       resizeNotAllowed (403)
140

    
141
    raise ResizeNotAllowed()