diff options
Diffstat (limited to 'vicn/bin/vicn.py')
-rwxr-xr-x | vicn/bin/vicn.py | 104 |
1 files changed, 104 insertions, 0 deletions
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() |