Refactoring: Made complete codebase PEP8 compatible.
[osm/vim-emu.git] / src / emuvim / cli / rest / network.py
1 # 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).
26 from requests import put, delete
27 import argparse
28
29
30 class RestApiClient():
31
32 def __init__(self):
33 self.cmds = {}
34
35 def execute_command(self, args):
36 if getattr(self, args["command"]) is not None:
37 # call the local method with the same name as the command arg
38 getattr(self, args["command"])(args)
39 else:
40 print("Command not implemented.")
41
42 def add(self, args):
43 params = self._create_dict(
44 vnf_src_name=self._parse_vnf_name(args.get("source")),
45 vnf_dst_name=self._parse_vnf_name(args.get("destination")),
46 vnf_src_interface=self._parse_vnf_interface(args.get("source")),
47 vnf_dst_interface=self._parse_vnf_interface(
48 args.get("destination")),
49 weight=args.get("weight"),
50 match=args.get("match"),
51 bidirectional=args.get("bidirectional"),
52 cookie=args.get("cookie"),
53 priority=args.get("priority"))
54
55 response = put("{0}/restapi/network".format(args.get("endpoint")),
56 params=params)
57 print(self._nice_print(response.text))
58
59 def remove(self, args):
60 params = self._create_dict(
61 vnf_src_name=self._parse_vnf_name(args.get("source")),
62 vnf_dst_name=self._parse_vnf_name(args.get("destination")),
63 vnf_src_interface=self._parse_vnf_interface(args.get("source")),
64 vnf_dst_interface=self._parse_vnf_interface(
65 args.get("destination")),
66 weight=args.get("weight"),
67 match=args.get("match"),
68 bidirectional=args.get("bidirectional"),
69 cookie=args.get("cookie"),
70 priority=args.get("priority"))
71
72 response = delete("{0}/restapi/network".format(args.get("endpoint")),
73 params=params)
74 print(self._nice_print(response.text))
75
76 def _parse_vnf_name(self, vnf_name_str):
77 vnf_name = vnf_name_str.split(':')[0]
78 return vnf_name
79
80 def _parse_vnf_interface(self, vnf_name_str):
81 try:
82 vnf_interface = vnf_name_str.split(':')[1]
83 except BaseException:
84 vnf_interface = None
85
86 return vnf_interface
87
88 def _create_dict(self, **kwargs):
89 return kwargs
90
91 def _nice_print(self, text):
92 # some modules seem to return unicode strings where newlines, other
93 # special characters are escaped
94 text = str(text).replace('\\n', '\n')
95 text = str(text).replace('\\"', '"')
96 return text
97
98
99 parser = argparse.ArgumentParser(description='son-emu-cli network')
100 parser.add_argument(
101 "command",
102 choices=['add', 'remove'],
103 help="Action to be executed.")
104 parser.add_argument(
105 "--datacenter", "-d", dest="datacenter",
106 help="Data center to in which the network action should be initiated")
107 parser.add_argument(
108 "--source", "-src", dest="source",
109 help="vnf name of the source of the chain")
110 parser.add_argument(
111 "--destination", "-dst", dest="destination",
112 help="vnf name of the destination of the chain")
113 parser.add_argument(
114 "--weight", "-w", dest="weight",
115 help="weight edge attribute to calculate the path")
116 parser.add_argument(
117 "--priority", "-p", dest="priority", default="1000",
118 help="priority of flow rule")
119 parser.add_argument(
120 "--match", "-m", dest="match",
121 help="string holding extra matches for the flow entries")
122 parser.add_argument(
123 "--bidirectional", "-b", dest="bidirectional", action='store_true',
124 help="add/remove the flow entries from src to dst and back")
125 parser.add_argument(
126 "--cookie", "-c", dest="cookie", default="10",
127 help="cookie for this flow, as easy to use identifier (eg. per tenant/service)")
128 parser.add_argument(
129 "--endpoint", "-e", dest="endpoint",
130 default="http://127.0.0.1:5001",
131 help="REST API endpoint of son-emu (default:http://127.0.0.1:5001)")
132
133
134 def main(argv):
135 args = vars(parser.parse_args(argv))
136 c = RestApiClient()
137 c.execute_command(args)