3 (c) 2016 by Manuel Peuster <manuel.peuster@upb.de>
8 from tabulate
import tabulate
12 pp
= pprint
.PrettyPrinter(indent
=4)
15 class ZeroRpcClient(object):
18 self
.c
= zerorpc
.Client()
19 self
.c
.connect("tcp://127.0.0.1:4242") # TODO hard coded for now. we'll change this later
22 def execute_command(self
, args
):
23 if getattr(self
, args
["command"]) is not None:
24 # call the local method with the same name as the command arg
25 getattr(self
, args
["command"])(args
)
27 print "Command not implemented."
29 def start(self
, args
):
31 if args
.get("network") is not None:
32 network
= {"ip": args
.get("network")}
33 r
= self
.c
.compute_action_start(
34 args
.get("datacenter"),
41 r
= self
.c
.compute_action_stop(
42 args
.get("datacenter"), args
.get("name"))
46 r
= self
.c
.compute_list(
47 args
.get("datacenter"))
50 # for each container add a line to the output table
56 if len(status
.get("network")) > 0:
57 eth0ip
= status
.get("network")[0][1]
58 eth0status
= "up" if status
.get(
59 "network")[0][3] else "down"
60 table
.append([status
.get("datacenter"),
65 status
.get("state").get("Status")])
66 headers
= ["Datacenter",
72 print tabulate(table
, headers
=headers
, tablefmt
="grid")
74 def status(self
, args
):
75 r
= self
.c
.compute_status(
76 args
.get("datacenter"), args
.get("name"))
80 parser
= argparse
.ArgumentParser(description
='son-emu compute')
83 choices
=['start', 'stop', 'list', 'status'],
84 help="Action to be executed.")
86 "--datacenter", "-d", dest
="datacenter",
87 help="Data center to in which the compute instance should be executed")
89 "--name", "-n", dest
="name",
90 help="Name of compute instance e.g. 'vnf1'")
92 "--image", dest
="image",
93 help="Name of container image to be used e.g. 'ubuntu'")
95 "--net", dest
="network",
96 help="Network properties of compute instance e.g. '10.0.0.123/8'")
100 args
= vars(parser
.parse_args(argv
))
102 c
.execute_command(args
)