aboutsummaryrefslogtreecommitdiffstats
path: root/vicn/bin/vicn.py
diff options
context:
space:
mode:
Diffstat (limited to 'vicn/bin/vicn.py')
-rwxr-xr-xvicn/bin/vicn.py104
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()