Statistics
| Branch: | Tag: | Revision:

root / api / actions.py @ 0971fa71

History | View | Annotate | Download (4.7 kB)

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

    
5
from django.conf import settings
6
from django.http import HttpResponse
7

    
8
from synnefo.api.errors import *
9
from synnefo.util.rapi import GanetiRapiClient
10
from synnefo.logic import backend, utils
11

    
12
server_actions = {}
13

    
14
rapi = GanetiRapiClient(*settings.GANETI_CLUSTER_INFO)
15

    
16

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

    
23

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

    
41
    raise ServiceUnavailable()
42

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

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

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

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

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

    
94
    raise ServiceUnavailable()
95

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

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

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

    
142
    raise ResizeNotAllowed()