def run_and_get_report()

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