Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
'''
CloudControl VM related commands
'''
from cccli.exception import *
from sjrpc.core.exceptions import *
from cccli.printer import Printer, color
from cccli.command.command import Command
from optparse import OptionParser
class VmCommand(Command):
'''Command for vm style'''
def _vm_action(self, argv, filters=None):
try:
oparser = OptionParser(prog=argv[0])
oparser.add_option("--raw", action="store_true", dest="raw",
help="Don't append filter on request")
oparser.add_option("--direct", action="store_true", dest="direct",
help="Directly send tql to server (don't list before)")
oparser.add_option("--force", action="store_true", dest="force",
help="Don't ask confirmation (Dangerous)")
(options, args) = oparser.parse_args(argv[1:])
except SystemExit:
return
if len(args) == 0:
raise cmdBadArgument()
tql = str.join("", args)
# append securty options by command name
if filters is not None and not options.raw:
tql += filters
if options.direct:
try:
objs = self.cli.rpc.call(argv[0], tql)
except RpcError as e:
raise cmdError("RPCError: %s"%str(e))
else:
# get objects id
try:
objs = self.cli.rpc.call("list", tql)
except RpcError as e:
raise cmdError("RPCError: %s"%str(e))
# no result, goodbye
if len(objs) == 0:
raise cmdWarning("tql: '%s': No result."%tql)
self.printer.out("You will %s:"%argv[0])
for obj in objs:
self.printer.out("%sid:%s%s%s"%(color["green"],color["yellow"],obj["id"],color["reset"]))
self.printer.out("%sCount: %s%s"%(color["green"],color["reset"], len(objs)))
# be sure boby want do that
if not options.force:
self.printer.out("%sProceed?%s"%(color["lred"], color["reset"]))
if self.printer.ask("Answer (yes/NO): ") != "yes":
raise cmdWarning("Aborted")
if len(objs) > 5:
self.printer.out("%sYou request is on more than 5 objets!%s"%(color["yellow"], color["reset"]))
self.printer.out("%sAre you really sure?%s"%(color["lred"], color["reset"]))
if self.printer.ask("Answer (Sir, yes Sir!): ") != "Sir, yes Sir!":
raise cmdWarning("Bad Answer. Aborted")
# execute action for each object
for obj in objs:
self.printer.out("%s%s%s %s%s%s"%(color["lblue"],
argv[0],
color["reset"],
color["yellow"],
obj["id"],
color["reset"]))
try:
self.cli.rpc.call(argv[0], "id:%s"%obj["id"])
except RpcError as e:
self.printer.error("RPCError: %s"%str(e))
class Command_start(VmCommand):
'''Start a stopped vm'''
def __call__(self, argv):
self._vm_action(argv, "&role=vm&status=stopped")
def usage(self):
return "usage: start [--raw] [--direct] [--force] [--help] <tql>"
class Command_stop(VmCommand):
'''Stop a running vm'''
def __call__(self, argv):
self._vm_action(argv, "&role=vm&status=running")
def usage(self):
return "usage: stop [--raw] [--direct] [--force] [--help] <tql>"
class Command_destroy(VmCommand):
'''Force a vm to stop'''
def __call__(self, argv):
self._vm_action(argv, "&role=vm&status!=stopped")
def usage(self):
return "usage: destroy [--raw] [--direct] [--force] [--help] <tql>"
class Command_pause(VmCommand):
'''Pause a running vm'''
def __call__(self, argv):
self._vm_action(argv, "&role=vm&status=running")
def usage(self):
return "usage: pause [--raw] [--direct] [--force] [--help] <tql>"
class Command_resume(VmCommand):
'''Resume a paused vm'''
def __call__(self, argv):
self._vm_action(argv, "&role=vm&status=stalled")
def usage(self):
return "usage: resume [--raw] [--direct] [--force] [--help] <tql>"