in gcpdiag/runbook/command.py [0:0]
def run_and_get_report(argv=None, credentials: str = None) -> dict:
# Initialize argument parser
parser = _init_runbook_args_parser()
args = parser.parse_args(argv[1:])
if credentials:
apis.set_credentials(credentials)
# Allow to change defaults using a hook function.
hooks.set_runbook_args_hook(args)
# Initialize configuration
_init_config(args)
# Initialize Repository, and Tests.
dt_engine = runbook.DiagnosticEngine()
_load_runbook_rules(runbook.__name__)
# ^^^ If you add gcpdiag/runbook/[NEW-PRODUCT] directory, update also
# pyinstaller/hook-gcpdiag.runbook.py and bin/precommit-required-files
# Initialize proper output formatter
output_ = _initialize_output(args.interface)
dt_engine.interface.output = output_
# Logging setup.
logging_handler = output_.get_logging_handler()
setup_logging(logging_handler)
# Run the runbook or step connections.
if args.runbook:
runbook_name = args.runbook.lower()
if args.interface == runbook.constants.CLI:
output_.display_header()
output_.display_banner()
tree = dt_engine.load_tree(runbook_name)
if callable(tree):
dt_engine.add_task((tree(), args.parameter))
elif args.bundle_spec:
for bundle in args.bundle_spec:
bundle = dt_engine.load_steps(parameter=bundle['parameter'],
steps_to_run=bundle['steps'])
dt_engine.add_task((bundle, bundle.parameter))
dt_engine.run()
# Only collected for internal googler users
report = {}
report['version'] = config.VERSION
report['reports'] = dt_engine.interface.rm.generate_reports()
for r in dt_engine.interface.rm.reports.values():
metrics = dt_engine.interface.rm.generate_report_metrics(report=r)
hooks.post_runbook_hook(metrics)
if args.interface == runbook.constants.CLI:
output_.display_footer(dt_engine.interface.rm)
# Clean up the kubeconfig file generated for gcpdiag
kubectl.clean_up()
# return success if we get to this point and the report..
return report