Page MenuHomeVyOS Platform

No OneTemporary

Size
15 KB
Referenced Files
None
Subscribers
None
diff --git a/.coderabbit.yaml b/.coderabbit.yaml
index 2b9a02a4..c7c465d6 100644
--- a/.coderabbit.yaml
+++ b/.coderabbit.yaml
@@ -1,204 +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
diff --git a/.github/mergify.yml b/.github/mergify.yml
index 43353ea4..1cb5bb73 100644
--- a/.github/mergify.yml
+++ b/.github/mergify.yml
@@ -1,34 +1,36 @@
# yaml-language-server: $schema=https://docs.mergify.com/mergify-configuration-schema.json
extends: mergify
merge_protections_settings:
reporting_method: check-runs
pull_request_rules:
- name: Flag product T-ID format violation in PR title or commit messages
description: >
Product-repo convention: the PR title AND every commit's first line must
- match `T<digits>: <text>` (optional `scope: ` prefix). The title is always
- checked; the per-commit check is exempted when a maintainer applies the
- `legacy` label — an escape hatch for grandfathered PRs whose commit history
- cannot be rewritten (repos that squash-merge AND block force-push, e.g.
- vyos.vyos enforces `non_fast_forward` on ~ALL branches with zero bypass).
- New PRs are still nudged toward the convention; `legacy` is the deliberate,
- maintainer-controlled opt-out. Relocated from the central config (T8966)
- so the convention is opt-in per product repo. Name is intentionally
- distinct from any central rule name so this stays additive (not an
- `extends:` override). Legacy-label escape added 2026-06-08 (T8966).
+ match a `T<digits>:`, `NOS-<digits>:` or legacy `VD-<digits>:` task key
+ followed by text (optional `scope: ` prefix). NOS is the renamed VD Jira
+ project (2026-07). The title is always checked; the per-commit check is
+ exempted when a maintainer applies the `legacy` label — an escape hatch for
+ grandfathered PRs whose commit history cannot be rewritten (repos that
+ squash-merge AND block force-push, e.g. vyos.vyos enforces
+ `non_fast_forward` on ~ALL branches with zero bypass). New PRs are still
+ nudged toward the convention; `legacy` is the deliberate,
+ maintainer-controlled opt-out. Relocated from the central config (T8966) so
+ the convention is opt-in per product repo. Name is intentionally distinct
+ from any central rule name so this stays additive (not an `extends:`
+ override). Legacy-label escape added 2026-06-08 (T8966).
conditions:
- '-closed'
- '-merged'
- '-author~=\[bot\]$'
- 'author!=copilot-swe-agent'
- 'author!=vyosbot'
- or:
- - '-title~=^(([a-zA-Z0-9\-_.]+:\s)?)T\d+:\s+[^\s]+.*'
+ - '-title~=^(([a-zA-Z0-9\-_.]+:[ ])?)(T[0-9]+|NOS-[0-9]+|VD-[0-9]+):[ ]+[^\s]+.*'
- and:
- 'label!=legacy'
- - 'commits[*].commit_message~=^(?!(([a-zA-Z0-9\-_.]+:\s)?)T\d+:\s+[^\s]+).*'
+ - 'commits[*].commit_message~=^(?!(([a-zA-Z0-9\-_.]+:[ ])?)(T[0-9]+|NOS-[0-9]+|VD-[0-9]+):[ ]+[^\s]+).*'
actions:
label:
toggle:
- invalid-task-id

File Metadata

Mime Type
text/x-diff
Expires
Sat, Sep 26, 9:52 AM (1 d, 4 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4281913
Default Alt Text
(15 KB)

Event Timeline