diff options
author | Jordan Augé <jordan.auge+fdio@email.com> | 2017-02-24 14:58:01 +0100 |
---|---|---|
committer | Jordan Augé <jordan.auge+fdio@cisco.com> | 2017-02-24 18:36:29 +0000 |
commit | 85a341d645b57b7cd88a26ed2ea0a314704240ea (patch) | |
tree | bdda2b35003aae20103a796f86daced160b8a730 /vicn/bin | |
parent | 9b30fc10fb1cbebe651e5a107e8ca5b24de54675 (diff) |
Initial commit: vICN
Change-Id: I7ce66c4e84a6a1921c63442f858b49e083adc7a7
Signed-off-by: Jordan Augé <jordan.auge+fdio@cisco.com>
Diffstat (limited to 'vicn/bin')
-rw-r--r-- | vicn/bin/__init__.py | 0 | ||||
-rwxr-xr-x | vicn/bin/vicn.py | 104 |
2 files changed, 104 insertions, 0 deletions
diff --git a/vicn/bin/__init__.py b/vicn/bin/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/vicn/bin/__init__.py diff --git a/vicn/bin/vicn.py b/vicn/bin/vicn.py new file mode 100755 index 00000000..9a43cf6d --- /dev/null +++ b/vicn/bin/vicn.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# Copyright (c) 2017 Cisco and/or its affiliates. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import os, sys, time, asyncio, argparse, shutil, threading, asyncio, logging +import traceback + +log = logging.getLogger(__name__) + +PATH=os.path.join(os.path.dirname(__file__), os.path.pardir, os.path.pardir) +sys.path.insert(0, os.path.abspath(PATH)) + +from netmodel.model.query import Query +from netmodel.util.daemon import Daemon +from netmodel.util.log import textcolor, initialize_logging +from vicn.clients.command_line import VICNCmd +from vicn.core.api import API +from vicn.core.resource_mgr import ResourceManager +from vicn.resource.node import Node + +class ArgumentParser(argparse.ArgumentParser): + def error(self, message): + self._print_message(textcolor('red', '{prog}: error: {message}\n'.format(prog=self.prog, message=message)), + sys.stderr) + + self.print_usage(sys.stdout) + sys.exit(-1) + +class VICNDaemon(Daemon): + def initialize(self): + # FIXME UGLY + n_times = 1 + background = False + setup = False + scenario = None + node_list, net, ndn, mob, cluster = None, None, None, None, None + + parser = ArgumentParser(description=textcolor('green', "Batch usage of VICN.")) + parser.add_argument('-s', metavar='configuration_file_path', + help="JSON file containing the topology") + parser.add_argument('-n', metavar='n_times', type=int, help='Execute the test multiple times') + parser.add_argument('-x', action='store_false', help='No automatic execution') + + arguments = parser.parse_args() + args = vars(arguments) + + + for option in args.keys(): + if args[option] is not None: + if option == "s": + print(" * Loading the configuration file at {0}".format(args[option])) + scenario = args[option] + elif option == "t" and args[option] is True: + background = True + elif option == "x" and args[option] is True: + setup = True + elif option == "n": + n_times = args[option] + + self._api = API() + self._api.configure(scenario, setup) + + if node_list is not None: + ResourceManager().set(node_list) + + def main(self): + """ + Main asyncio loop. + + Ctrl+C properly terminates the loop by terminating all running + instances. + """ + loop = asyncio.get_event_loop() + try: + loop.run_forever() + except KeyboardInterrupt: + pass + except Exception as e: + import traceback + traceback.print_exc() + finally: + loop.stop() + self._api.terminate() + +def main(): + initialize_logging() + VICNDaemon('vicn', no_daemon = True).start() + +if __name__ == "__main__": + main() |