summaryrefslogtreecommitdiff
path: root/.coderabbit.yaml
diff options
context:
space:
mode:
Diffstat (limited to '.coderabbit.yaml')
-rw-r--r--.coderabbit.yaml205
1 files changed, 205 insertions, 0 deletions
diff --git a/.coderabbit.yaml b/.coderabbit.yaml
new file mode 100644
index 00000000..c7c465d6
--- /dev/null
+++ b/.coderabbit.yaml
@@ -0,0 +1,205 @@
+# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
+#
+# Per-repo CodeRabbit override for vyos/vyos.vyos (Ansible network collection).
+#
+# Most behavior is inherited from the org-level central baseline at
+# https://github.com/vyos/coderabbit/blob/production/.coderabbit.yaml.
+# This file keeps only what's distinct to this repo:
+# - Ansible-collection-specific `path_instructions` (15 entries).
+# - Two `path_filters` entries that aren't in the central list.
+# - `base_branches: [main]` — central uses VyOS release-train names; this
+# repo is an Ansible collection that lives on `main`.
+# - `knowledge_base.jira` scoped to VD.
+#
+# Migrated from standalone (591-line rich config from T8584, sha
+# 38eae56fb991b63e0c89245e4ef5fc130d3f5c8b) to centralized inheritance
+# mode under T8851 on 2026-05-24. The standalone config preceded
+# `vyos/coderabbit` central-config introduction (2026-05-12).
+
+inheritance: true
+
+reviews:
+ auto_review:
+ base_branches:
+ - main
+
+ path_filters:
+ # Repo-specific filters that aren't in the central baseline. The
+ # central already filters `!**/__pycache__/**`, `!**/*.pyc`,
+ # `!**/*.egg-info/**`, `!**/.venv/**`, `!**/.worktrees/**` — so they
+ # are not repeated here.
+ - "!changelogs/changelog.yaml"
+ - "!.collections/**"
+
+ path_instructions:
+ # ── Global PR hygiene ──────────────────────────────────────────────
+ - path: "**"
+ instructions: |
+ This is the vyos.vyos Ansible network collection (namespace=vyos, name=vyos,
+ version=6.0.0). PR titles must follow the format `T{id}: description` referencing
+ a Phorge task at vyos.dev. Every PR must include a changelog fragment in
+ changelogs/fragments/ (YAML, valid keys: major_changes, minor_changes,
+ breaking_changes, deprecated_features, removed_features, security_fixes,
+ bugfixes, known_issues, doc_changes, trivial; plus release_summary as a
+ prelude section). Style: black line-length=100, isort
+ profile=black line_length=100, flake8 max-line-length=120. Do not suggest
+ 88-char wrapping.
+
+ # ── Module entry points ────────────────────────────────────────────
+ - path: "plugins/modules/vyos_*.py"
+ instructions: |
+ Module entry points. Each file must contain three YAML triple-string blocks:
+ DOCUMENTATION, EXAMPLES, and RETURN — this is Ansible's documentation contract,
+ not Python docstrings. Verify:
+ - DOCUMENTATION includes: module, author, short_description, description,
+ version_added, extends_documentation_fragment (vyos.vyos.vyos), options with
+ types and descriptions, and a notes section listing tested VyOS versions.
+ - EXAMPLES has at least one working task per supported state.
+ - RETURN documents all return keys with description, returned, type, and sample.
+ - The module wires argspec, config, and facts classes correctly.
+ - State choices include the full set where applicable: merged, replaced,
+ overridden, deleted, gathered, parsed, rendered.
+ Do not add Python-style docstrings (def-level) to these files — the YAML blocks
+ are the canonical documentation.
+
+ # ── Argspec (auto-generated) ───────────────────────────────────────
+ - path: "plugins/module_utils/network/vyos/argspec/**"
+ instructions: |
+ Auto-generated by the Ansible resource module builder. These files carry a
+ "DO NOT EDIT" warning header. Do not suggest modifications to auto-generated
+ argspec files — changes will be overwritten. If the schema needs updating,
+ the resource module builder must regenerate it. Only flag issues if the
+ argument_spec dict has obvious type mismatches or missing required fields
+ that would cause runtime failures.
+
+ # ── Config classes ─────────────────────────────────────────────────
+ - path: "plugins/module_utils/network/vyos/config/**"
+ instructions: |
+ Config builders extending ansible.netcommon ConfigBase or ResourceModule.
+ These generate VyOS CLI commands from desired state. Verify:
+ - execute_module() handles all declared states correctly.
+ - set_config() and _set_config() process gathered facts and desired config
+ without data loss.
+ - Command generation produces valid VyOS CLI syntax (set/delete prefixes,
+ proper quoting of values with spaces).
+ - No silent swallowing of unknown keys — unknown config should raise or warn.
+ - Methods that compare current vs desired state handle empty/None gracefully.
+ Some older config files have auto-generated headers — do not restructure those.
+
+ # ── Facts classes ──────────────────────────────────────────────────
+ - path: "plugins/module_utils/network/vyos/facts/**"
+ instructions: |
+ Facts classes parse raw VyOS CLI output into structured dicts. Verify:
+ - Regex patterns handle edge cases (missing fields, empty values, quoted strings).
+ - populate() returns a clean dict even when device output is incomplete.
+ - get_device_data() uses the correct show command for the resource.
+ - facts/facts.py FACT_RESOURCE_SUBSETS and FACT_LEGACY_SUBSETS stay in sync
+ with available fact classes.
+ - Legacy facts (facts/legacy/) use run_commands(); resource facts use
+ get_resource_connection().
+
+ # ── RM Templates ───────────────────────────────────────────────────
+ - path: "plugins/module_utils/network/vyos/rm_templates/*.py"
+ instructions: |
+ Parser templates mapping structured data to VyOS CLI commands and vice versa.
+ Files with a `_14` suffix target VyOS 1.4+ behavior — do not suggest merging
+ them with the base version. Verify:
+ - _tmplt_* helper functions produce syntactically valid VyOS commands.
+ - Regex patterns in PARSERS list correctly capture all variations of the CLI
+ output (quoted values, optional fields, nested hierarchies).
+ - New templates include both set and delete command generation.
+ - compval/getval paths match the argspec structure.
+
+ # ── Cliconf plugin ─────────────────────────────────────────────────
+ - path: "plugins/cliconf/vyos.py"
+ instructions: |
+ Low-level CLI abstraction for VyOS. Handles configure mode, commit, diff,
+ command execution. Changes here affect all modules. Verify:
+ - edit_config() enters configure mode and commits correctly.
+ - get_diff() returns accurate before/after config diffs.
+ - Error handling catches VyOS-specific error patterns (commit failures,
+ invalid commands).
+ - __rpc__ list matches actually implemented methods.
+
+ # ── Terminal plugin ────────────────────────────────────────────────
+ - path: "plugins/terminal/vyos.py"
+ instructions: |
+ Terminal prompt detection and initialization. Changes affect connection
+ reliability. Verify regex patterns against actual VyOS prompt formats
+ (configure mode, operational mode, different shell variants). Do not
+ remove existing patterns without testing against all supported VyOS versions.
+
+ # ── Action plugin ──────────────────────────────────────────────────
+ - path: "plugins/action/vyos.py"
+ instructions: |
+ Auto-proxies all modules to the device. Must validate network_cli connection
+ type. Symlinks from each module name point here. Keep minimal — logic belongs
+ in config classes, not the action plugin.
+
+ # ── Changelog fragments ────────────────────────────────────────────
+ - path: "changelogs/fragments/*.{yaml,yml}"
+ instructions: |
+ Changelog fragments for ansible-changelog. Valid top-level keys:
+ major_changes, minor_changes, breaking_changes, deprecated_features,
+ removed_features, security_fixes, bugfixes, known_issues, doc_changes,
+ trivial. release_summary is a prelude section (one per release).
+ Fragment filename should be descriptive (e.g., fix-bgp-neighbor-timers.yml).
+ Use `trivial` for tooling/housekeeping. Entries should be complete sentences.
+
+ # ── CI workflows ───────────────────────────────────────────────────
+ - path: ".github/workflows/**"
+ instructions: |
+ CI pipeline: tests.yml (main CI with changelog, build, lint, sanity, unit jobs),
+ codecoverage.yml, release.yml (Galaxy + Automation Hub publish), check_label.yaml,
+ cla-check.yml. Changes to release.yml or ah_token_refresh.yml affect publishing
+ credentials — review with extra care. Do not remove the `all_green` aggregation
+ job from tests.yml.
+
+ # ── Unit tests ─────────────────────────────────────────────────────
+ - path: "tests/unit/**"
+ instructions: |
+ Unit tests use pytest + unittest.TestCase via TestVyosModule base class.
+ Key patterns:
+ - All test classes inherit TestVyosModule (from vyos_module.py).
+ - setUp() creates and starts mock patches; tearDown() stops them.
+ - execute_module(failed, changed, commands, sort) is the primary assertion method.
+ - load_fixtures() is overridden per test class to wire mock return values.
+ - Fixture files (.cfg) go in tests/unit/modules/network/vyos/fixtures/.
+ - Use load_fixture(name) to read fixtures — never inline raw config strings.
+ - set_module_args(dict(...)) configures module input before execution.
+ Style: black line-length=100, assertions via self.assertEqual / self.assertIn /
+ execute_module kwargs. pytest-xdist runs tests in parallel (-n 2).
+
+ # ── Test fixtures ──────────────────────────────────────────────────
+ - path: "tests/unit/modules/network/vyos/fixtures/**"
+ instructions: |
+ Raw VyOS CLI output files (.cfg). These are loaded by load_fixture() and
+ cached in memory. Format is VyOS `set ...` configuration syntax or show
+ command output. Fixture filenames follow the pattern:
+ vyos_{module}_config.cfg (base) or vyos_{module}_config_v14.cfg (VyOS 1.4+).
+ New fixtures must be syntactically valid VyOS config. Do not add JSON fixtures
+ unless the test explicitly requires JSON parsing.
+
+ # ── Collection metadata ────────────────────────────────────────────
+ - path: "galaxy.yml"
+ instructions: |
+ Collection metadata. namespace=vyos, name=vyos. Version bumps must be
+ coordinated with release process. Dependency on ansible.netcommon>=2.5.1
+ is required. Do not add unnecessary dependencies.
+
+ - path: "meta/runtime.yml"
+ instructions: |
+ Module redirects and tombstones. Adding a new module requires a redirect
+ entry (short name → FQCN). Tombstoned modules (logging, vyos_logging) must
+ not be un-tombstoned. requires_ansible must stay >=2.15.0 unless explicitly
+ bumping minimum version.
+
+knowledge_base:
+ jira:
+ # `auto` activates Jira context lookups when this repo lives on an
+ # org with an Atlassian OAuth grant attached (VyOS-Networks); on the
+ # public vyos source it self-disables.
+ usage: auto
+ project_keys:
+ - NOS
+ - VD