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() |