46 |
46 |
class generic(object):
|
47 |
47 |
|
48 |
48 |
@classmethod
|
49 |
|
def all(this, foo):
|
|
49 |
def all(this, func):
|
50 |
50 |
def _raise(self, *args, **kwargs):
|
51 |
51 |
try:
|
52 |
|
return foo(self, *args, **kwargs)
|
|
52 |
return func(self, *args, **kwargs)
|
53 |
53 |
except Exception as e:
|
54 |
54 |
if _debug:
|
55 |
55 |
print_stack()
|
... | ... | |
60 |
60 |
return _raise
|
61 |
61 |
|
62 |
62 |
@classmethod
|
63 |
|
def _connection(this, foo):
|
|
63 |
def _connection(this, func):
|
64 |
64 |
def _raise(self, *args, **kwargs):
|
65 |
65 |
try:
|
66 |
|
foo(self, *args, **kwargs)
|
|
66 |
func(self, *args, **kwargs)
|
67 |
67 |
except ClientError as ce:
|
68 |
68 |
ce_msg = ('%s' % ce).lower()
|
69 |
69 |
if ce.status == 401:
|
... | ... | |
102 |
102 |
'* (temporary): re-run with <token> parameter'] + CLOUDNAME
|
103 |
103 |
|
104 |
104 |
@classmethod
|
105 |
|
def astakosclient(this, foo):
|
|
105 |
def astakosclient(this, func):
|
106 |
106 |
def _raise(self, *args, **kwargs):
|
107 |
107 |
try:
|
108 |
|
r = foo(self, *args, **kwargs)
|
|
108 |
r = func(self, *args, **kwargs)
|
109 |
109 |
except AstakosClientException as ace:
|
110 |
110 |
raiseCLIError(ace, 'Error in synnefo-AstakosClient')
|
111 |
111 |
return r
|
112 |
112 |
return _raise
|
113 |
113 |
|
114 |
114 |
@classmethod
|
115 |
|
def load(this, foo):
|
|
115 |
def load(this, func):
|
116 |
116 |
def _raise(self, *args, **kwargs):
|
117 |
|
r = foo(self, *args, **kwargs)
|
|
117 |
r = func(self, *args, **kwargs)
|
118 |
118 |
try:
|
119 |
119 |
client = getattr(self, 'client')
|
120 |
120 |
except AttributeError as ae:
|
... | ... | |
135 |
135 |
return _raise
|
136 |
136 |
|
137 |
137 |
@classmethod
|
138 |
|
def authenticate(this, foo):
|
|
138 |
def authenticate(this, func):
|
139 |
139 |
def _raise(self, *args, **kwargs):
|
140 |
140 |
try:
|
141 |
|
return foo(self, *args, **kwargs)
|
|
141 |
return func(self, *args, **kwargs)
|
142 |
142 |
except (ClientError, AstakosClientException) as ce:
|
143 |
143 |
if ce.status == 401:
|
144 |
144 |
token = kwargs.get('custom_token', 0) or self.client.token
|
... | ... | |
147 |
147 |
details = [] if token else this._token_details
|
148 |
148 |
raiseCLIError(ce, msg, details=details)
|
149 |
149 |
raise ce
|
150 |
|
self._raise = foo
|
|
150 |
self._raise = func
|
151 |
151 |
return _raise
|
152 |
152 |
|
153 |
153 |
|
154 |
154 |
class history(object):
|
155 |
155 |
@classmethod
|
156 |
|
def init(this, foo):
|
|
156 |
def init(this, func):
|
157 |
157 |
def _raise(self, *args, **kwargs):
|
158 |
|
r = foo(self, *args, **kwargs)
|
|
158 |
r = func(self, *args, **kwargs)
|
159 |
159 |
if not hasattr(self, 'history'):
|
160 |
160 |
raise CLIError('Failed to load history', importance=2)
|
161 |
161 |
return r
|
162 |
162 |
return _raise
|
163 |
163 |
|
164 |
164 |
@classmethod
|
165 |
|
def _get_cmd_ids(this, foo):
|
|
165 |
def _get_cmd_ids(this, func):
|
166 |
166 |
def _raise(self, cmd_ids, *args, **kwargs):
|
167 |
167 |
if not cmd_ids:
|
168 |
168 |
raise CLISyntaxError(
|
169 |
169 |
'Usage: <id1|id1-id2> [id3|id3-id4] ...',
|
170 |
170 |
details=self.__doc__.split('\n'))
|
171 |
|
return foo(self, cmd_ids, *args, **kwargs)
|
|
171 |
return func(self, cmd_ids, *args, **kwargs)
|
172 |
172 |
return _raise
|
173 |
173 |
|
174 |
174 |
|
... | ... | |
186 |
186 |
net_types = ('CUSTOM', 'MAC_FILTERED', 'IP_LESS_ROUTED', 'PHYSICAL_VLAN')
|
187 |
187 |
|
188 |
188 |
@classmethod
|
189 |
|
def connection(this, foo):
|
190 |
|
return generic._connection(foo)
|
|
189 |
def connection(this, func):
|
|
190 |
return generic._connection(func)
|
191 |
191 |
|
192 |
192 |
@classmethod
|
193 |
|
def date(this, foo):
|
|
193 |
def date(this, func):
|
194 |
194 |
def _raise(self, *args, **kwargs):
|
195 |
195 |
try:
|
196 |
|
return foo(self, *args, **kwargs)
|
|
196 |
return func(self, *args, **kwargs)
|
197 |
197 |
except ClientError as ce:
|
198 |
198 |
if ce.status == 400 and 'changes-since' in ('%s' % ce):
|
199 |
199 |
raise CLIError(
|
... | ... | |
203 |
203 |
return _raise
|
204 |
204 |
|
205 |
205 |
@classmethod
|
206 |
|
def cluster_size(this, foo):
|
|
206 |
def cluster_size(this, func):
|
207 |
207 |
def _raise(self, *args, **kwargs):
|
208 |
208 |
size = kwargs.get('size', None)
|
209 |
209 |
try:
|
210 |
210 |
size = int(size)
|
211 |
211 |
assert size > 0, 'Cluster size must be a positive integer'
|
212 |
|
return foo(self, *args, **kwargs)
|
|
212 |
return func(self, *args, **kwargs)
|
213 |
213 |
except ValueError as ve:
|
214 |
214 |
msg = 'Invalid cluster size value %s' % size
|
215 |
215 |
raiseCLIError(ve, msg, importance=1, details=[
|
... | ... | |
222 |
222 |
return _raise
|
223 |
223 |
|
224 |
224 |
@classmethod
|
225 |
|
def network_id(this, foo):
|
|
225 |
def network_id(this, func):
|
226 |
226 |
def _raise(self, *args, **kwargs):
|
227 |
227 |
network_id = kwargs.get('network_id', None)
|
228 |
228 |
try:
|
229 |
229 |
network_id = int(network_id)
|
230 |
|
return foo(self, *args, **kwargs)
|
|
230 |
return func(self, *args, **kwargs)
|
231 |
231 |
except ValueError as ve:
|
232 |
232 |
msg = 'Invalid network id %s ' % network_id
|
233 |
233 |
details = 'network id must be a positive integer'
|
... | ... | |
242 |
242 |
return _raise
|
243 |
243 |
|
244 |
244 |
@classmethod
|
245 |
|
def network_type(this, foo):
|
|
245 |
def network_type(this, func):
|
246 |
246 |
def _raise(self, *args, **kwargs):
|
247 |
247 |
network_type = kwargs.get('network_type', None)
|
248 |
248 |
msg = 'Invalid network type %s.\nValid types: %s' % (
|
249 |
249 |
network_type, ' '.join(this.net_types))
|
250 |
250 |
assert network_type in this.net_types, msg
|
251 |
|
return foo(self, *args, **kwargs)
|
|
251 |
return func(self, *args, **kwargs)
|
252 |
252 |
return _raise
|
253 |
253 |
|
254 |
254 |
@classmethod
|
255 |
|
def network_max(this, foo):
|
|
255 |
def network_max(this, func):
|
256 |
256 |
def _raise(self, *args, **kwargs):
|
257 |
257 |
try:
|
258 |
|
return foo(self, *args, **kwargs)
|
|
258 |
return func(self, *args, **kwargs)
|
259 |
259 |
except ClientError as ce:
|
260 |
260 |
if ce.status == 413:
|
261 |
261 |
msg = 'Cannot create another network',
|
... | ... | |
268 |
268 |
return _raise
|
269 |
269 |
|
270 |
270 |
@classmethod
|
271 |
|
def network_in_use(this, foo):
|
|
271 |
def network_in_use(this, func):
|
272 |
272 |
def _raise(self, *args, **kwargs):
|
273 |
273 |
network_id = kwargs.get('network_id', None)
|
274 |
274 |
try:
|
275 |
|
return foo(self, *args, **kwargs)
|
|
275 |
return func(self, *args, **kwargs)
|
276 |
276 |
except ClientError as ce:
|
277 |
277 |
if network_id and ce.status in (400, ):
|
278 |
278 |
msg = 'Network with id %s does not exist' % network_id,
|
... | ... | |
288 |
288 |
return _raise
|
289 |
289 |
|
290 |
290 |
@classmethod
|
291 |
|
def flavor_id(this, foo):
|
|
291 |
def flavor_id(this, func):
|
292 |
292 |
def _raise(self, *args, **kwargs):
|
293 |
293 |
flavor_id = kwargs.get('flavor_id', None)
|
294 |
294 |
try:
|
295 |
295 |
flavor_id = int(flavor_id)
|
296 |
|
return foo(self, *args, **kwargs)
|
|
296 |
return func(self, *args, **kwargs)
|
297 |
297 |
except ValueError as ve:
|
298 |
298 |
msg = 'Invalid flavor id %s ' % flavor_id,
|
299 |
299 |
details = 'Flavor id must be a positive integer'
|
... | ... | |
308 |
308 |
return _raise
|
309 |
309 |
|
310 |
310 |
@classmethod
|
311 |
|
def server_id(this, foo):
|
|
311 |
def server_id(this, func):
|
312 |
312 |
def _raise(self, *args, **kwargs):
|
313 |
313 |
server_id = kwargs.get('server_id', None)
|
314 |
314 |
try:
|
315 |
315 |
server_id = int(server_id)
|
316 |
|
return foo(self, *args, **kwargs)
|
|
316 |
return func(self, *args, **kwargs)
|
317 |
317 |
except ValueError as ve:
|
318 |
318 |
msg = 'Invalid virtual server id %s' % server_id,
|
319 |
319 |
details = 'Server id must be a positive integer'
|
... | ... | |
333 |
333 |
return _raise
|
334 |
334 |
|
335 |
335 |
@classmethod
|
336 |
|
def firewall(this, foo):
|
|
336 |
def firewall(this, func):
|
337 |
337 |
def _raise(self, *args, **kwargs):
|
338 |
338 |
profile = kwargs.get('profile', None)
|
339 |
339 |
try:
|
340 |
|
return foo(self, *args, **kwargs)
|
|
340 |
return func(self, *args, **kwargs)
|
341 |
341 |
except ClientError as ce:
|
342 |
342 |
if ce.status == 400 and profile and (
|
343 |
343 |
'firewall' in ('%s' % ce).lower()
|
... | ... | |
352 |
352 |
return _raise
|
353 |
353 |
|
354 |
354 |
@classmethod
|
355 |
|
def nic_id(this, foo):
|
|
355 |
def nic_id(this, func):
|
356 |
356 |
def _raise(self, *args, **kwargs):
|
357 |
357 |
try:
|
358 |
|
return foo(self, *args, **kwargs)
|
|
358 |
return func(self, *args, **kwargs)
|
359 |
359 |
except ClientError as ce:
|
360 |
360 |
nic_id = kwargs.get('nic_id', None)
|
361 |
361 |
if nic_id and ce.status == 404 and (
|
... | ... | |
375 |
375 |
return _raise
|
376 |
376 |
|
377 |
377 |
@classmethod
|
378 |
|
def nic_format(this, foo):
|
|
378 |
def nic_format(this, func):
|
379 |
379 |
def _raise(self, *args, **kwargs):
|
380 |
380 |
try:
|
381 |
|
return foo(self, *args, **kwargs)
|
|
381 |
return func(self, *args, **kwargs)
|
382 |
382 |
except IndexError as ie:
|
383 |
383 |
nic_id = kwargs.get('nic_id', None)
|
384 |
384 |
msg = 'Invalid format for network interface (nic) %s' % nic_id
|
... | ... | |
389 |
389 |
return _raise
|
390 |
390 |
|
391 |
391 |
@classmethod
|
392 |
|
def metadata(this, foo):
|
|
392 |
def metadata(this, func):
|
393 |
393 |
def _raise(self, *args, **kwargs):
|
394 |
394 |
key = kwargs.get('key', None)
|
395 |
395 |
try:
|
396 |
|
foo(self, *args, **kwargs)
|
|
396 |
func(self, *args, **kwargs)
|
397 |
397 |
except ClientError as ce:
|
398 |
398 |
if key and ce.status == 404 and (
|
399 |
399 |
'metadata' in ('%s' % ce).lower()
|
... | ... | |
412 |
412 |
'* details of image: /image meta <image id>']
|
413 |
413 |
|
414 |
414 |
@classmethod
|
415 |
|
def connection(this, foo):
|
416 |
|
return generic._connection(foo)
|
|
415 |
def connection(this, func):
|
|
416 |
return generic._connection(func)
|
417 |
417 |
|
418 |
418 |
@classmethod
|
419 |
|
def id(this, foo):
|
|
419 |
def id(this, func):
|
420 |
420 |
def _raise(self, *args, **kwargs):
|
421 |
421 |
image_id = kwargs.get('image_id', None)
|
422 |
422 |
try:
|
423 |
|
foo(self, *args, **kwargs)
|
|
423 |
func(self, *args, **kwargs)
|
424 |
424 |
except ClientError as ce:
|
425 |
425 |
if image_id and (
|
426 |
426 |
ce.status == 404
|
... | ... | |
435 |
435 |
return _raise
|
436 |
436 |
|
437 |
437 |
@classmethod
|
438 |
|
def metadata(this, foo):
|
|
438 |
def metadata(this, func):
|
439 |
439 |
def _raise(self, *args, **kwargs):
|
440 |
440 |
key = kwargs.get('key', None)
|
441 |
441 |
try:
|
442 |
|
return foo(self, *args, **kwargs)
|
|
442 |
return func(self, *args, **kwargs)
|
443 |
443 |
except ClientError as ce:
|
444 |
444 |
ce_msg = ('%s' % ce).lower()
|
445 |
445 |
if ce.status == 404 or (
|
... | ... | |
460 |
460 |
'For a list of containers: /file list']
|
461 |
461 |
|
462 |
462 |
@classmethod
|
463 |
|
def connection(this, foo):
|
464 |
|
return generic._connection(foo)
|
|
463 |
def connection(this, func):
|
|
464 |
return generic._connection(func)
|
465 |
465 |
|
466 |
466 |
@classmethod
|
467 |
|
def account(this, foo):
|
|
467 |
def account(this, func):
|
468 |
468 |
def _raise(self, *args, **kwargs):
|
469 |
469 |
try:
|
470 |
|
return foo(self, *args, **kwargs)
|
|
470 |
return func(self, *args, **kwargs)
|
471 |
471 |
except ClientError as ce:
|
472 |
472 |
if ce.status == 403:
|
473 |
473 |
raiseCLIError(
|
... | ... | |
478 |
478 |
return _raise
|
479 |
479 |
|
480 |
480 |
@classmethod
|
481 |
|
def quota(this, foo):
|
|
481 |
def quota(this, func):
|
482 |
482 |
def _raise(self, *args, **kwargs):
|
483 |
483 |
try:
|
484 |
|
return foo(self, *args, **kwargs)
|
|
484 |
return func(self, *args, **kwargs)
|
485 |
485 |
except ClientError as ce:
|
486 |
486 |
if ce.status == 413:
|
487 |
487 |
raiseCLIError(ce, 'User quota exceeded', details=[
|
... | ... | |
495 |
495 |
return _raise
|
496 |
496 |
|
497 |
497 |
@classmethod
|
498 |
|
def container(this, foo):
|
|
498 |
def container(this, func):
|
499 |
499 |
def _raise(self, *args, **kwargs):
|
500 |
500 |
dst_cont = kwargs.get('dst_cont', None)
|
501 |
501 |
try:
|
502 |
|
return foo(self, *args, **kwargs)
|
|
502 |
return func(self, *args, **kwargs)
|
503 |
503 |
except ClientError as ce:
|
504 |
504 |
if ce.status == 404 and 'container' in ('%s' % ce).lower():
|
505 |
505 |
cont = ('%s or %s' % (
|
... | ... | |
511 |
511 |
return _raise
|
512 |
512 |
|
513 |
513 |
@classmethod
|
514 |
|
def local_path_download(this, foo):
|
|
514 |
def local_path_download(this, func):
|
515 |
515 |
def _raise(self, *args, **kwargs):
|
516 |
516 |
try:
|
517 |
|
return foo(self, *args, **kwargs)
|
|
517 |
return func(self, *args, **kwargs)
|
518 |
518 |
except IOError as ioe:
|
519 |
519 |
msg = 'Failed to access a file',
|
520 |
520 |
raiseCLIError(ioe, msg, importance=2, details=[
|
... | ... | |
527 |
527 |
return _raise
|
528 |
528 |
|
529 |
529 |
@classmethod
|
530 |
|
def local_path(this, foo):
|
|
530 |
def local_path(this, func):
|
531 |
531 |
def _raise(self, *args, **kwargs):
|
532 |
532 |
local_path = kwargs.get('local_path', None)
|
533 |
533 |
try:
|
534 |
|
return foo(self, *args, **kwargs)
|
|
534 |
return func(self, *args, **kwargs)
|
535 |
535 |
except IOError as ioe:
|
536 |
536 |
msg = 'Failed to access file %s' % local_path,
|
537 |
537 |
raiseCLIError(ioe, msg, importance=2)
|
538 |
538 |
return _raise
|
539 |
539 |
|
540 |
540 |
@classmethod
|
541 |
|
def object_path(this, foo):
|
|
541 |
def object_path(this, func):
|
542 |
542 |
def _raise(self, *args, **kwargs):
|
543 |
543 |
try:
|
544 |
|
return foo(self, *args, **kwargs)
|
|
544 |
return func(self, *args, **kwargs)
|
545 |
545 |
except ClientError as ce:
|
546 |
546 |
err_msg = ('%s' % ce).lower()
|
547 |
547 |
if (
|
... | ... | |
555 |
555 |
return _raise
|
556 |
556 |
|
557 |
557 |
@classmethod
|
558 |
|
def object_size(this, foo):
|
|
558 |
def object_size(this, func):
|
559 |
559 |
def _raise(self, *args, **kwargs):
|
560 |
560 |
size = kwargs.get('size', None)
|
561 |
561 |
start = kwargs.get('start', 0)
|
... | ... | |
587 |
587 |
importance=1)
|
588 |
588 |
size = end - start
|
589 |
589 |
try:
|
590 |
|
return foo(self, *args, **kwargs)
|
|
590 |
return func(self, *args, **kwargs)
|
591 |
591 |
except ClientError as ce:
|
592 |
592 |
err_msg = ('%s' % ce).lower()
|
593 |
593 |
expected = 'object length is smaller than range length'
|