blob: f4f92c3bad32695c222ec8b35c1076ed060fb57a [file] [log] [blame]
peusterm72f09882018-05-15 17:10:27 +02001# Copyright (c) 2015 SONATA-NFV and Paderborn University
2# ALL RIGHTS RESERVED.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16# Neither the name of the SONATA-NFV, Paderborn University
17# nor the names of its contributors may be used to endorse or promote
18# products derived from this software without specific prior written
19# permission.
20#
21# This work has been performed in the framework of the SONATA project,
22# funded by the European Commission under Grant number 671517 through
23# the Horizon 2020 and 5G-PPP programmes. The authors would like to
24# acknowledge the contributions of their colleagues of the SONATA
25# partner consortium (www.sonata-nfv.eu).
hadik3r237d3f52016-06-27 17:57:49 +020026from requests import get
27from tabulate import tabulate
28import pprint
29import argparse
30
31pp = pprint.PrettyPrinter(indent=4)
32
peusterm72f09882018-05-15 17:10:27 +020033
hadik3r237d3f52016-06-27 17:57:49 +020034class RestApiClient():
35
36 def __init__(self):
37 self.cmds = {}
38
39 def execute_command(self, args):
40 if getattr(self, args["command"]) is not None:
41 # call the local method with the same name as the command arg
42 getattr(self, args["command"])(args)
43 else:
44 print("Command not implemented.")
45
peusterm72f09882018-05-15 17:10:27 +020046 def list(self, args):
hadik3r237d3f52016-06-27 17:57:49 +020047 list = get('%s/restapi/datacenter' % args.get('endpoint')).json()
48 table = []
49 for d in list:
50 # for each dc add a line to the output table
51 if len(d) > 0:
52 table.append([d.get("label"),
peusterm72f09882018-05-15 17:10:27 +020053 d.get("internalname"),
54 d.get("switch"),
55 d.get("n_running_containers"),
56 len(d.get("metadata"))])
hadik3r237d3f52016-06-27 17:57:49 +020057 headers = ["Label",
peusterm72f09882018-05-15 17:10:27 +020058 "Internal Name",
59 "Switch",
60 "# Containers",
61 "# Metadata Items"]
62 print(tabulate(table, headers=headers, tablefmt="grid"))
hadik3r237d3f52016-06-27 17:57:49 +020063
peusterm72f09882018-05-15 17:10:27 +020064 def status(self, args):
65 list = get('%s/restapi/datacenter/%s' %
66 (args.get("endpoint"), args.get("datacenter"))).json()
hadik3r237d3f52016-06-27 17:57:49 +020067 table = []
68 table.append([list.get('label'),
peusterm72f09882018-05-15 17:10:27 +020069 list.get('internalname'),
70 list.get('switch'),
71 list.get('n_running_containers'),
72 len(list.get('metadata'))])
hadik3r237d3f52016-06-27 17:57:49 +020073
74 headers = ["Label",
peusterm72f09882018-05-15 17:10:27 +020075 "Internal Name",
76 "Switch",
77 "# Containers",
78 "# Metadata Items"]
hadik3r237d3f52016-06-27 17:57:49 +020079
peusterm72f09882018-05-15 17:10:27 +020080 print(tabulate(table, headers=headers, tablefmt="grid"))
hadik3r237d3f52016-06-27 17:57:49 +020081
82
stevenvanrossemf693a3b2017-06-01 15:15:59 +020083parser = argparse.ArgumentParser(description='son-emu-cli datacenter')
hadik3r237d3f52016-06-27 17:57:49 +020084parser.add_argument(
85 "command",
86 choices=['list', 'status'],
87 help="Action to be executed.")
88parser.add_argument(
89 "--datacenter", "-d", dest="datacenter",
90 help="Data center to which the command should be applied.")
91parser.add_argument(
92 "--endpoint", "-e", dest="endpoint",
peusterm0a336cc2016-07-04 09:15:47 +020093 default="http://127.0.0.1:5001",
stevenvanrossemf693a3b2017-06-01 15:15:59 +020094 help="REST API endpoint of son-emu (default:http://127.0.0.1:5001)")
hadik3r237d3f52016-06-27 17:57:49 +020095
96
97def main(argv):
98 args = vars(parser.parse_args(argv))
99 c = RestApiClient()
100 c.execute_command(args)