Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 19 additions & 2 deletions .mypy.ini
Original file line number Diff line number Diff line change
@@ -1,6 +1,23 @@
[mypy]
# Global mypy configuration
mypy_path = test/unit
explicit_package_bases = True

[mypy-pydantic]
ignore_missing_imports = True

[mypy-pydantic.*]
ignore_missing_imports = True

[mypy-pytest]
ignore_missing_imports = True

[mypy-serviceability_dummy_data]
ignore_missing_imports = True

[mypy-instinct_shaped_engine]
ignore_missing_imports = True

[mypy-nodescraper.connection.redfish.redfish_params]
ignore_errors = True

[mypy-nodescraper.base.regexanalyzer]
ignore_errors = True
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ options:
Comma-separated built-in names and/or plugin config
JSON paths (e.g. --plugin-
configs=NodeStatus,/path/c.json). Built-ins:
AllPlugins, NodeStatus (default: None)
AllIbPlugins, NodeStatus (default: None)
--system-config STRING
Path to system config json (default: None)
--connection-config STRING
Expand Down Expand Up @@ -573,8 +573,8 @@ Below is an example that skips sudo requiring plugins and disables analysis.

#### Plugin config: **'--plugin-configs' command**
A plugin config can be used to compare the system data against the config specifications.
Built-in configs include **NodeStatus** (a subset of plugins) and **AllPlugins** (runs every
registered plugin with default arguments—useful for generating a reference config from the full system).
Built-in configs include **NodeStatus** (a subset of plugins) and **AllIbPlugins** (runs every
registered in-band plugin with default arguments—useful for generating a reference config from the full system).

**NodeStatus plus additional plugins** — built-in configs merge with plugins named after `run-plugins`.
Values are comma-separated; pass as **`--plugin-configs=…`** or **`--plugin-configs` …** (same as other
Expand Down Expand Up @@ -650,9 +650,9 @@ This command can be used to generate a reference config that is populated with c
configurations. Plugins that use analyzer args (where applicable) will be populated with system
data.

**Run all registered plugins (AllPlugins config):**
**Run all registered in-band plugins (AllIbPlugins config):**
```sh
node-scraper --plugin-configs=AllPlugins
node-scraper --plugin-configs=AllIbPlugins

```

Expand Down
4 changes: 2 additions & 2 deletions nodescraper/pluginrecipe/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
###############################################################################
from nodescraper.models import PluginConfig

from .all_plugins import AllPlugins
from .all_ib_plugins import AllIbPlugins
from .node_status import NodeStatus
from .pluginrecipe import (
ANALYZE_ONLY,
Expand All @@ -24,7 +24,7 @@
"ANALYZE_ONLY",
"COLLECT_AND_ANALYZE",
"COLLECT_ONLY",
"AllPlugins",
"AllIbPlugins",
"AnalyzerOnlyPluginRecipe",
"CollectorOnlyPluginRecipe",
"NodeStatus",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
from .pluginrecipe import PluginRecipe


class AllPlugins(PluginRecipe):
"""Run all registered plugins with default arguments."""
class AllIbPlugins(PluginRecipe):
"""Run all registered in-band plugins with default arguments."""

@classmethod
def plugin_names(cls) -> tuple[str, ...]:
"""Return every plugin registered at runtime.
"""Return every in-band plugin registered at runtime.

Returns:
tuple[str, ...]: Sorted names of all plugins in the plugin registry.
tuple[str, ...]: Sorted names of all in-band plugins in the plugin registry.
"""
return PluginDiscovery().registered_plugin_names()
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ node-scraper = "nodescraper.cli:cli_entry"

[project.entry-points."nodescraper.plugin_configs"]
NodeStatus = "nodescraper.pluginrecipe.node_status:NodeStatus"
AllPlugins = "nodescraper.pluginrecipe.all_plugins:AllPlugins"
AllIbPlugins = "nodescraper.pluginrecipe.all_ib_plugins:AllIbPlugins"

[tool.black]
line-length = 100
Expand Down
12 changes: 6 additions & 6 deletions test/unit/cli/test_plugin_configs_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,24 @@

from nodescraper.cli.cli import build_parser
from nodescraper.configregistry import ConfigRegistry
from nodescraper.pluginrecipe.all_plugins import AllPlugins
from nodescraper.pluginrecipe.all_ib_plugins import AllIbPlugins
from nodescraper.pluginrecipe.node_status import NodeStatus
from nodescraper.pluginregistry import PluginRegistry


def _parser():
plugin_reg = PluginRegistry()
config_reg = ConfigRegistry(load_entry_point_configs=False)
for recipe in (NodeStatus, AllPlugins):
for recipe in (NodeStatus, AllIbPlugins):
config_reg.configs[recipe.name()] = recipe.plugin_config()
return build_parser(plugin_reg, config_reg)[0]


def test_plugin_configs_equals_form_parses_csv() -> None:
ns = _parser().parse_args(["--plugin-configs=NodeStatus,AllPlugins"])
assert ns.plugin_configs == ["NodeStatus", "AllPlugins"]
ns = _parser().parse_args(["--plugin-configs=NodeStatus,AllIbPlugins"])
assert ns.plugin_configs == ["NodeStatus", "AllIbPlugins"]


def test_plugin_configs_space_separated_parses() -> None:
ns = _parser().parse_args(["--plugin-configs", "NodeStatus,AllPlugins"])
assert ns.plugin_configs == ["NodeStatus", "AllPlugins"]
ns = _parser().parse_args(["--plugin-configs", "NodeStatus,AllIbPlugins"])
assert ns.plugin_configs == ["NodeStatus", "AllIbPlugins"]
14 changes: 7 additions & 7 deletions test/unit/framework/test_pluginrecipe.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import pytest

from nodescraper.models import PluginConfig
from nodescraper.pluginrecipe.all_plugins import AllPlugins
from nodescraper.pluginrecipe.all_ib_plugins import AllIbPlugins
from nodescraper.pluginrecipe.discovery import PluginDiscovery
from nodescraper.pluginrecipe.node_status import NodeStatus
from nodescraper.pluginrecipe.pluginrecipe import (
Expand Down Expand Up @@ -77,9 +77,9 @@ def test_node_status_recipe_matches_registered_plugins() -> None:
assert set(NodeStatus.plugin_names()) == expected & available


def test_all_plugins_recipe_matches_registry() -> None:
def test_all_ib_plugins_recipe_matches_registry() -> None:
plugin_reg = PluginRegistry()
assert set(AllPlugins.plugin_names()) == set(plugin_reg.plugins)
assert set(AllIbPlugins.plugin_names()) == set(plugin_reg.plugins)


def test_node_status_plugin_config_shape() -> None:
Expand All @@ -90,10 +90,10 @@ def test_node_status_plugin_config_shape() -> None:
assert config.plugins["DmesgPlugin"] == COLLECT_AND_ANALYZE.as_config()


def test_all_plugins_plugin_config_shape() -> None:
config = AllPlugins.plugin_config()
assert config.name == "AllPlugins"
assert config.desc == "Run all registered plugins with default arguments."
def test_all_ib_plugins_plugin_config_shape() -> None:
config = AllIbPlugins.plugin_config()
assert config.name == "AllIbPlugins"
assert config.desc == "Run all registered in-band plugins with default arguments."
assert len(config.plugins) == len(PluginRegistry().plugins)


Expand Down
Loading