def main(): cli_opts = [ cfg.StrOpt("config", short="c", default=None, help="Override default values with a config file", metavar="<config file>"), cfg.BoolOpt("storage", default=False, help="Running KloudBuster to test storage performance"), cfg.BoolOpt("multicast", default=False, help="Running KloudBuster to test multicast performance"), cfg.StrOpt("topology", short="t", default=None, help="Topology file for compute hosts", metavar="<topology file>"), cfg.StrOpt("tenants-list", short="l", default=None, help="Existing tenant and user lists for reusing", metavar="<tenants file>"), cfg.StrOpt("rc", default=None, help="Tested cloud openrc credentials file (same as --tested-rc)", metavar="<rc file>"), cfg.StrOpt("tested-rc", default=None, help="Tested cloud openrc credentials file", metavar="<rc file>"), cfg.StrOpt("testing-rc", default=None, help="Testing cloud openrc credentials file", metavar="<rc file>"), cfg.StrOpt("passwd", default=None, secret=True, help="Tested cloud password (same as --tested-pwd)", metavar="<password>"), cfg.StrOpt("tested-passwd", default=None, secret=True, help="Tested cloud password", metavar="<password>"), cfg.StrOpt("testing-passwd", default=None, secret=True, help="Testing cloud password", metavar="<password>"), cfg.StrOpt("html", default=None, help='store results in HTML file', metavar="<dest html file>"), cfg.StrOpt("label", default=None, help='label for the title in HTML file', metavar="<title>"), cfg.BoolOpt("headless", default=False, help="do not show chart in the browser (default=False, only used if --html)"), cfg.StrOpt("json", default=None, help='store results in JSON format file', metavar="<dest json file>"), cfg.StrOpt("csv", default=None, help='store results in CSV format, multicast only.', metavar="<csv file>"), cfg.BoolOpt("no-env", default=False, help="Do not read env variables"), cfg.BoolOpt("show-config", default=False, help="Show the default configuration"), cfg.StrOpt("charts-from-json", default=None, help='create charts from json results and exit (requires --html)', metavar="<source json file>"), ] CONF.register_cli_opts(cli_opts) CONF.set_default("verbose", True) full_version = __version__ + ', VM image: ' + kb_vm_agent.get_image_name() CONF(sys.argv[1:], project="kloudbuster", version=full_version) logging.setup("kloudbuster") if CONF.rc and not CONF.tested_rc: CONF.tested_rc = CONF.rc if CONF.passwd and not CONF.tested_passwd: CONF.tested_passwd = CONF.passwd if CONF.charts_from_json: if not CONF.html: LOG.error('Destination html filename must be specified using --html.') sys.exit(1) with open(CONF.charts_from_json, 'r') as jfp: json_results = json.load(jfp) generate_charts(json_results, CONF.html, None) sys.exit(0) if CONF.show_config: print resource_string(__name__, "cfg.scale.yaml") sys.exit(0) if CONF.multicast and CONF.storage: LOG.error('--multicast and --storage can not both be chosen.') sys.exit(1) try: kb_config = KBConfig() kb_config.init_with_cli() except TypeError: LOG.error('Error parsing the configuration file') sys.exit(1) # The KloudBuster class is just a wrapper class # levarages tenant and user class for resource creations and deletion kloudbuster = KloudBuster( kb_config.cred_tested, kb_config.cred_testing, kb_config.server_cfg, kb_config.client_cfg, kb_config.topo_cfg, kb_config.tenants_list, storage_mode=CONF.storage, multicast_mode=CONF.multicast) if kloudbuster.check_and_upload_images(): kloudbuster.run() if CONF.json: '''Save results in JSON format file.''' LOG.info('Saving results in json file: ' + CONF.json + "...") with open(CONF.json, 'w') as jfp: json.dump(kloudbuster.final_result, jfp, indent=4, sort_keys=True) if CONF.multicast and CONF.csv and 'kb_result' in kloudbuster.final_result: '''Save results in JSON format file.''' if len(kloudbuster.final_result['kb_result']) > 0: LOG.info('Saving results in csv file: ' + CONF.csv + "...") with open(CONF.csv, 'w') as jfp: jfp.write(KBRunner_Multicast.json_to_csv(kloudbuster.final_result['kb_result'][0])) if CONF.html: generate_charts(kloudbuster.final_result, CONF.html, kb_config.config_scale)
def running_config_POST(self, arg): try: # Expectation: # { # 'credentials': {'tested-rc': '<STRING>', 'tested-passwd': '<STRING>', # 'testing-rc': '<STRING>', 'testing-passwd': '<STRING>'}, # 'kb_cfg': {<USER_OVERRIDED_CONFIGS>}, # 'topo_cfg': {<TOPOLOGY_CONFIGS>} # 'tenants_cfg': {<TENANT_AND_USER_LISTS_FOR_REUSING>} # } user_config = json.loads(arg) # Parsing credentials from application input cred_config = user_config["credentials"] cred_tested = Credentials(openrc_contents=cred_config["tested-rc"], pwd=cred_config["tested-passwd"]) if "testing-rc" in cred_config and cred_config["testing-rc"] != cred_config["tested-rc"]: cred_testing = Credentials(openrc_contents=cred_config["testing-rc"], pwd=cred_config["testing-passwd"]) else: # Use the same openrc file for both cases cred_testing = cred_tested session_id = hashlib.md5(str(cred_config)).hexdigest() kb_config = KBConfig() if KBSessionManager.has(session_id): response.status = 403 response.text = u"Session is already existed." return response.text # Parsing server and client configs from application input # Save the public key into a temporary file if "public_key" in user_config["kb_cfg"]: pubkey_filename = "/tmp/kb_public_key.pub" f = open(pubkey_filename, "w") f.write(user_config["kb_cfg"]["public_key_file"]) f.close() kb_config.config_scale["public_key_file"] = pubkey_filename if "prompt_before_run" in user_config["kb_cfg"]: kb_config.config_scale["prompt_before_run"] = False if user_config["kb_cfg"]: alt_config = Configuration.from_string(user_config["kb_cfg"]).configure() kb_config.config_scale = kb_config.config_scale.merge(alt_config) # Parsing topology configs from application input if "topo_cfg" in user_config: topo_cfg = Configuration.from_string(user_config["topo_cfg"]).configure() else: topo_cfg = None # Parsing tenants configs from application input if "tenants_list" in user_config: tenants_list = Configuration.from_string(user_config["tenants_list"]).configure() else: tenants_list = None except Exception: response.status = 400 response.text = u"Error while parsing configurations: \n%s" % (traceback.format_exc) return response.text logging.setup("kloudbuster", logfile="/tmp/kb_log_%s" % session_id) kb_config.init_with_rest_api( cred_tested=cred_tested, cred_testing=cred_testing, topo_cfg=topo_cfg, tenants_list=tenants_list ) kb_session = KBSession() kb_session.kb_config = kb_config KBSessionManager.add(session_id, kb_session) return str(session_id)
def main(): cli_opts = [ cfg.StrOpt("config", short="c", default=None, help="Override default values with a config file"), cfg.StrOpt("topology", short="t", default=None, help="Topology files for compute hosts"), cfg.StrOpt("tenants-list", short="l", default=None, help="Existing tenant and user lists for reusing"), cfg.StrOpt("tested-rc", default=None, help="Tested cloud openrc credentials file"), cfg.StrOpt("testing-rc", default=None, help="Testing cloud openrc credentials file"), cfg.StrOpt("tested-passwd", default=None, secret=True, help="Tested cloud password"), cfg.StrOpt("testing-passwd", default=None, secret=True, help="Testing cloud password"), cfg.StrOpt("json", default=None, help='store results in JSON format file'), cfg.BoolOpt("no-env", default=False, help="Do not read env variables"), cfg.BoolOpt("show-config", default=False, help="Show the default configuration") ] CONF.register_cli_opts(cli_opts) CONF.set_default("verbose", True) full_version = __version__ + ', VM image: ' + kb_vm_agent.get_image_name() CONF(sys.argv[1:], project="kloudbuster", version=full_version) if CONF.show_config: print resource_string(__name__, "cfg.scale.yaml") sys.exit(0) logging.setup("kloudbuster") try: kb_config = KBConfig() kb_config.init_with_cli() except TypeError: LOG.error('Error parsing the configuration file') sys.exit(1) # The KloudBuster class is just a wrapper class # levarages tenant and user class for resource creations and deletion kloudbuster = KloudBuster( kb_config.cred_tested, kb_config.cred_testing, kb_config.server_cfg, kb_config.client_cfg, kb_config.topo_cfg, kb_config.tenants_list) if kloudbuster.check_and_upload_images(): kloudbuster.run() if CONF.json: '''Save results in JSON format file.''' LOG.info('Saving results in json file: ' + CONF.json + "...") with open(CONF.json, 'w') as jfp: json.dump(kloudbuster.final_result, jfp, indent=4, sort_keys=True)
def main(): cli_opts = [ cfg.StrOpt("config", short="c", default=None, help="Override default values with a config file", metavar="<config file>"), cfg.BoolOpt("storage", default=False, help="Running KloudBuster to test storage performance"), cfg.BoolOpt("multicast", default=False, help="Running KloudBuster to test multicast performance"), cfg.StrOpt("topology", short="t", default=None, help="Topology file for compute hosts", metavar="<topology file>"), cfg.StrOpt("tenants-list", short="l", default=None, help="Existing tenant and user lists for reusing", metavar="<tenants file>"), cfg.StrOpt( "rc", default=None, help="Tested cloud openrc credentials file (same as --tested-rc)", metavar="<rc file>"), cfg.StrOpt("tested-rc", default=None, help="Tested cloud openrc credentials file", metavar="<rc file>"), cfg.StrOpt("testing-rc", default=None, help="Testing cloud openrc credentials file", metavar="<rc file>"), cfg.StrOpt("passwd", default=None, secret=True, help="Tested cloud password (same as --tested-pwd)", metavar="<password>"), cfg.StrOpt("tested-passwd", default=None, secret=True, help="Tested cloud password", metavar="<password>"), cfg.StrOpt("testing-passwd", default=None, secret=True, help="Testing cloud password", metavar="<password>"), cfg.StrOpt("html", default=None, help='store results in HTML file', metavar="<dest html file>"), cfg.StrOpt("label", default=None, help='label for the title in HTML file', metavar="<title>"), cfg.BoolOpt( "headless", default=False, help= "do not show chart in the browser (default=False, only used if --html)" ), cfg.StrOpt("json", default=None, help='store results in JSON format file', metavar="<dest json file>"), cfg.StrOpt("csv", default=None, help='store results in CSV format, multicast only.', metavar="<csv file>"), cfg.BoolOpt("no-env", default=False, help="Do not read env variables"), cfg.BoolOpt("show-config", default=False, help="Show the default configuration"), cfg.StrOpt( "charts-from-json", default=None, help='create charts from json results and exit (requires --html)', metavar="<source json file>"), ] CONF.register_cli_opts(cli_opts) CONF(sys.argv[1:], project="kloudbuster", version=__version__) logging.setup("kloudbuster") if CONF.rc and not CONF.tested_rc: CONF.tested_rc = CONF.rc if CONF.passwd and not CONF.tested_passwd: CONF.tested_passwd = CONF.passwd if CONF.charts_from_json: if not CONF.html: LOG.error( 'Destination html filename must be specified using --html.') sys.exit(1) with open(CONF.charts_from_json, 'r') as jfp: json_results = json.load(jfp) generate_charts(json_results, CONF.html, None) sys.exit(0) if CONF.show_config: print resource_string(__name__, "cfg.scale.yaml") sys.exit(0) if CONF.multicast and CONF.storage: LOG.error('--multicast and --storage can not both be chosen.') sys.exit(1) try: kb_config = KBConfig() kb_config.init_with_cli() except TypeError: LOG.exception('Error parsing the configuration file') sys.exit(1) # The KloudBuster class is just a wrapper class # levarages tenant and user class for resource creations and deletion kloudbuster = KloudBuster(kb_config.cred_tested, kb_config.cred_testing, kb_config.server_cfg, kb_config.client_cfg, kb_config.topo_cfg, kb_config.tenants_list, storage_mode=CONF.storage, multicast_mode=CONF.multicast) if kloudbuster.check_and_upload_images(): kloudbuster.run() if CONF.json: '''Save results in JSON format file.''' LOG.info('Saving results in json file: ' + CONF.json + "...") with open(CONF.json, 'w') as jfp: json.dump(kloudbuster.final_result, jfp, indent=4, sort_keys=True) if CONF.multicast and CONF.csv and 'kb_result' in kloudbuster.final_result: '''Save results in JSON format file.''' if len(kloudbuster.final_result['kb_result']) > 0: LOG.info('Saving results in csv file: ' + CONF.csv + "...") with open(CONF.csv, 'w') as jfp: jfp.write( KBRunner_Multicast.json_to_csv( kloudbuster.final_result['kb_result'][0])) if CONF.html: generate_charts(kloudbuster.final_result, CONF.html, kb_config.config_scale)