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
'''
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>"