From c85faa46e105c7710bd89032c47ccad43b95d5c6 Mon Sep 17 00:00:00 2001 From: Bartek Grzybowski Date: Mon, 11 May 2020 05:38:08 -0700 Subject: Move CLI options processing to module level Change-Id: Ie4c379480e2c641285507173387a770db63458f0 Issue-ID: INT-1577 Signed-off-by: Bartek Grzybowski --- test/mocks/mass-pnf-sim/MassPnfSim.py | 64 +++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'test/mocks/mass-pnf-sim/MassPnfSim.py') diff --git a/test/mocks/mass-pnf-sim/MassPnfSim.py b/test/mocks/mass-pnf-sim/MassPnfSim.py index 1901cb0aa..48b1d7416 100755 --- a/test/mocks/mass-pnf-sim/MassPnfSim.py +++ b/test/mocks/mass-pnf-sim/MassPnfSim.py @@ -2,7 +2,71 @@ import logging import subprocess import time +import argparse +import ipaddress from json import dumps +from requests import get +from requests.exceptions import MissingSchema, InvalidSchema, InvalidURL, ConnectionError, ConnectTimeout + +def validate_url(url): + '''Helper function to perform --urlves input param validation''' + logger = logging.getLogger("urllib3") + logger.setLevel(logging.WARNING) + try: + get(url, timeout=0.001) + except (MissingSchema, InvalidSchema, InvalidURL): + raise argparse.ArgumentTypeError(f'{url} is not a valid URL') + except (ConnectionError, ConnectTimeout): + pass + return url + +def validate_ip(ip): + '''Helper function to validate input param is a vaild IP address''' + try: + ip_valid = ipaddress.ip_address(ip) + except ValueError: + raise argparse.ArgumentTypeError(f'{ip} is not a valid IP address') + else: + return ip_valid + +def get_parser(): + '''Process input arguments''' + + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers(title='Subcommands', dest='subcommand') + # Bootstrap command parser + parser_bootstrap = subparsers.add_parser('bootstrap', help='Bootstrap the system') + parser_bootstrap.add_argument('--count', help='Instance count to bootstrap', type=int, metavar='INT', default=1) + parser_bootstrap.add_argument('--urlves', help='URL of the VES collector', type=validate_url, metavar='URL', required=True) + parser_bootstrap.add_argument('--ipfileserver', help='Visible IP of the file server (SFTP/FTPS) to be included in the VES event', + type=validate_ip, metavar='IP', required=True) + parser_bootstrap.add_argument('--typefileserver', help='Type of the file server (SFTP/FTPS) to be included in the VES event', + type=str, choices=['sftp', 'ftps'], required=True) + parser_bootstrap.add_argument('--ipstart', help='IP address range beginning', type=validate_ip, metavar='IP', required=True) + # Start command parser + parser_start = subparsers.add_parser('start', help='Start instances') + parser_start.add_argument('--count', help='Instance count to start', type=int, metavar='INT', default=1) + # Stop command parser + parser_stop = subparsers.add_parser('stop', help='Stop instances') + parser_stop.add_argument('--count', help='Instance count to stop', type=int, metavar='INT', default=1) + # Trigger command parser + parser_trigger = subparsers.add_parser('trigger', help='Trigger one single VES event from each simulator') + parser_trigger.add_argument('--count', help='Instance count to trigger', type=int, metavar='INT', default=1) + # Trigger-custom command parser + parser_triggerstart = subparsers.add_parser('trigger-custom', help='Trigger one single VES event from specific simulators') + parser_triggerstart.add_argument('--triggerstart', help='First simulator id to trigger', type=int, + metavar='INT', required=True) + parser_triggerstart.add_argument('--triggerend', help='Last simulator id to trigger', type=int, + metavar='INT', required=True) + # Status command parser + parser_status = subparsers.add_parser('status', help='Status') + parser_status.add_argument('--count', help='Instance count to show status for', type=int, metavar='INT', default=1) + # Clean command parser + subparsers.add_parser('clean', help='Clean work-dirs') + # General options parser + parser.add_argument('--verbose', help='Verbosity level', choices=['info', 'debug'], + type=str, default='debug') + return parser class MassPnfSim(): -- cgit 1.2.3-korg