Source code for saltfactories.plugins.sysinfo

"""
..
    PYTEST_DONT_REWRITE


System Information
==================
"""
import io
import pathlib
import tempfile

import pytest
import salt.config
import salt.loader
import salt.utils.yaml
import salt.version


[docs]def pytest_addoption(parser): """ register argparse-style options and ini-style config values. """ output_options_group = parser.getgroup("Output Options") output_options_group.addoption( "--sys-info", "--sysinfo", default=False, action="store_true", help="Print system information on test session startup", )
[docs]@pytest.hookimpl(hookwrapper=True, trylast=True) def pytest_sessionstart(session): """called after the ``Session`` object has been created and before performing collection and entering the run test loop. :param _pytest.main.Session session: the pytest session object """ # Let PyTest do its own thing yield if session.config.getoption("--sys-info") is True: # And now we add our reporting sections terminal_reporter = session.config.pluginmanager.getplugin("terminalreporter") terminal_reporter.ensure_newline() terminal_reporter.section("System Information", sep=">") terminal_reporter.section("Salt Versions Report", sep="-", bold=True) terminal_reporter.write( "\n".join( " {}".format(line.rstrip()) for line in salt.version.versions_report() ).rstrip() + "\n" ) terminal_reporter.ensure_newline() # System Grains root_dir = pathlib.Path(tempfile.mkdtemp()) conf_file = root_dir / "conf" / "minion" conf_file.parent.mkdir() minion_config_defaults = salt.config.DEFAULT_MINION_OPTS.copy() minion_config_defaults.update( { "id": "saltfactories-reports-minion", "root_dir": str(root_dir), "conf_file": str(conf_file), "cachedir": "cache", "pki_dir": "pki", "file_client": "local", "server_id_use_crc": "adler32", } ) minion_config = salt.config.minion_config(None, defaults=minion_config_defaults) grains = salt.loader.grains(minion_config) grains_output_file = io.StringIO() salt.utils.yaml.safe_dump(grains, grains_output_file, default_flow_style=False) grains_output_file.seek(0) terminal_reporter.section("System Grains Report", sep="-") terminal_reporter.write( "\n".join( " {}".format(line.rstrip()) for line in grains_output_file.read().splitlines() ).rstrip() + "\n" ) terminal_reporter.ensure_newline() terminal_reporter.section("System Information", sep="<") terminal_reporter.ensure_newline()