<feed xmlns='http://www.w3.org/2005/Atom'>
<title>vyos.vyos.git/plugins, branch test/lldp-interfaces-unit-tests</title>
<subtitle>Ansible Network Collection for VyOS (mirror of https://github.com/vyos/vyos.vyos.git)
</subtitle>
<id>https://git.amelek.net/vyos/vyos.vyos.git/atom?h=test%2Flldp-interfaces-unit-tests</id>
<link rel='self' href='https://git.amelek.net/vyos/vyos.vyos.git/atom?h=test%2Flldp-interfaces-unit-tests'/>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos.vyos.git/'/>
<updated>2026-06-30T11:18:50+00:00</updated>
<entry>
<title>T8522: fix parse_icmp_attr() split delimiter and UnboundLocalError (#464)</title>
<updated>2026-06-30T11:18:50+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@vyos.io</email>
</author>
<published>2026-06-30T11:18:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos.vyos.git/commit/?id=0e10d136ef280ca147b6f1e332072f6ba14c8844'/>
<id>urn:sha1:0e10d136ef280ca147b6f1e332072f6ba14c8844</id>
<content type='text'>
* Add easy-wins improvement spec for vyos.vyos collection

Covers five phases: formatting compliance, runtime.yml redirect fix,
deprecated feature cleanup, missing unit tests, and template deduplication.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

* Add implementation plan for easy-wins improvements

15 tasks across 5 phases: formatting compliance, runtime.yml bugfix,
deprecated code cleanup, missing unit tests, template deduplication.

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

* Update spec and plan with architect review corrections

Key changes:
- Defer Phase 5 (template deduplication) to v7.0.0: route_maps
  are not identical, BGP dedup blocked by Python module-level
  scoping, OSPF has fundamentally different command paradigms
- Add .git-blame-ignore-revs step to Phase 1
- Add missing test cases: overridden/rendered for resource modules,
  aggregate/purge/with_address for vyos_vlan
- Fix incorrect claim that version.py LooseVersion is unused
- Add sequential merge requirement to preamble

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;

* chore: add .worktrees/ and .claude/ to .gitignore

* T8522: fix parse_icmp_attr() split delimiter and UnboundLocalError

- Use val.split("/") instead of val.split(".") when parsing type/code pairs
- In the numeric-only branch, use int(val) instead of the undefined type_no variable
- Cast both type and code to int for consistent typing

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

* T8522: remove unrelated planning docs and gitignore changes

These files were included from local main branch commits unrelated
to this bugfix. This commit removes them to keep the PR scoped.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

* T8522: add parsed test for legacy type/code ICMP format

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

---------

Co-authored-by: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;
Co-authored-by: omnom62 &lt;75066712+omnom62@users.noreply.github.com&gt;</content>
</entry>
<entry>
<title>T2295: vyos_user: quote plaintext-password in generated set commands (#480)</title>
<updated>2026-06-25T19:30:57+00:00</updated>
<author>
<name>Stavros Kroustouris</name>
<email>kroustou@users.noreply.github.com</email>
</author>
<published>2026-06-25T19:30:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos.vyos.git/commit/?id=6d7a2184e970624f74f333931f7f70a1f900f7b5'/>
<id>urn:sha1:6d7a2184e970624f74f333931f7f70a1f900f7b5</id>
<content type='text'>
* vyos_user: quote plaintext-password in generated set commands

VyOS requires quoted values for passwords with special characters.
Align with encrypted-password and integration test conventions.

Co-authored-by: Cursor &lt;cursoragent@cursor.com&gt;

* T2295: escape plaintext-password values in vyos_user set commands

Quote passwords for VyOS special-character handling and escape embedded
single quotes. Update RETURN sample, add unit tests, refresh changelog.

Co-authored-by: Cursor &lt;cursoragent@cursor.com&gt;

* T2295: shorten changelog fragment for ansible-lint line-length

Co-authored-by: Cursor &lt;cursoragent@cursor.com&gt;

* T2295: use shlex.quote() for plaintext-password values

Replace custom _quote_config_value() with stdlib shlex.quote() per
review feedback; update unit tests and RETURN sample accordingly.

Co-authored-by: Cursor &lt;cursoragent@cursor.com&gt;

* T2295: add complex plaintext-password quoting unit test

Cover spaces, shell metacharacters, embedded quotes, and backslashes in
one password; assert command output matches shlex.quote().

Co-authored-by: Cursor &lt;cursoragent@cursor.com&gt;

* T2295: assert explicit quoting in complex password unit test

Replace shlex.quote()-derived expectation with a fixed command string,
matching the other password quoting tests.

Co-authored-by: Cursor &lt;cursoragent@cursor.com&gt;

* Fix RETURN doc sample, add docstrings and workflow permissions

- RETURN sample was missing the username token in the example command
- Add docstrings to all undocumented module-level functions to bring
  docstring coverage above the 80% threshold
- Add explicit permissions: contents: read to codecoverage.yml

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

* Revert "Fix RETURN doc sample, add docstrings and workflow permissions"

This reverts commit 827809ee49cf472a8bf30ec0b24d347a75fcb083.

---------

Co-authored-by: Cursor &lt;cursoragent@cursor.com&gt;
Co-authored-by: omnom62 &lt;75066712+omnom62@users.noreply.github.com&gt;
Co-authored-by: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;</content>
</entry>
<entry>
<title>rm_templates: T8609: fix slow parse() from group-quantifier patterns (#470)</title>
<updated>2026-06-19T13:02:27+00:00</updated>
<author>
<name>Robert Navarro</name>
<email>crshman@gmail.com</email>
</author>
<published>2026-06-19T13:02:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos.vyos.git/commit/?id=5b80cd0cbddd014e54b01e7fa1cd0c0777d94724'/>
<id>urn:sha1:5b80cd0cbddd014e54b01e7fa1cd0c0777d94724</id>
<content type='text'>
* rm_templates: T8609: fix slow parse() from group-quantifier patterns

Running an Ansible playbook that manages BGP route-maps on my VyOS 1.4
edge routers, the vyos.vyos.vyos_route_maps task (state=gathered or
state=merged) takes ~50 seconds per host, sometimes 100s+, against
devices with only a handful of route-maps configured.  The persistent
connection times out before the module finishes and the failure
surfaces as a misleading "socket path does not exist".

Three related quantifier shapes in nine rm_templates files cause O(2^n)
regex backtracking on inputs that share a parser's prefix but don't
match overall.  parse() time on a representative 12-line route-map
config drops from ~50s to &lt;1ms post-fix.

* Trailing form (188 sites): `(?P&lt;X&gt;\S+)\n  *$"""` -&gt; `(?P&lt;X&gt;\S+)\s*$"""`.
  Under re.VERBOSE the literal newline+indent between `\S+` and `*$`
  is stripped at compile time, so the source compiled to `(\S+)*$`
  with the `*` quantifying the named group.

* Mid-pattern `(group containing \S+)*` (22 sites in snmp_server.py
  with a couple in bgp_global*.py): e.g.
  `(?P&lt;protocol&gt;protocol\s\S+)*` -&gt; `(?P&lt;protocol&gt;protocol\s\S+)?`.
  Different position from the trailing form, but the same shape
  underneath (a group whose content includes \S+, quantified with
  `*`), so the same O(2^n) backtracking on prefix-sharing inputs.

* Mid-pattern `(literal-only group)*` (14 sites in snmp_server.py,
  bgp_address_family*.py, bgp_global*.py): e.g.
  `(?P&lt;as_set&gt;as-set)*` -&gt; `(?P&lt;as_set&gt;as-set)?`.  No \S+ inside the
  quantified group, so the backtracking exposure is much smaller.
  On the inputs these patterns actually receive (no device line
  carries duplicate flags) `*` and `?` accept identical input sets,
  so changing to `?` is behavior-preserving.

The first draft of this fix made set_comm_list_delete's
`(?P&lt;delete&gt;\S+)` group required.  The parser's setval emits `set
comm-list delete` with no token after `delete`, so the parser stopped
matching its own output (no existing fixture covered this case, which
is why the regression initially shipped).  CodeRabbit caught it
during review.  Replaced `delete(?P&lt;delete&gt;\S+)\s*$` with
`\s(?P&lt;delete&gt;delete)\s*$` so the named group captures the literal
word `delete`; the result template `{{True if delete is defined}}`
continues to evaluate True.

Affects: route_maps[/_14], bgp_global[/_14], bgp_address_family[/_14],
snmp_server, ospf_interfaces[/_14].

Adds tests/unit/modules/network/vyos/test_rm_templates_perf.py with
a 1-second budget against fixture inputs that have realistic-length
identifiers, plus a round-trip test asserting set_comm_list_delete
matches its own setval-generated line, plus a Bgp_address_familyTemplate14
budget test for symmetry with the other "hot" template families.

* Fix regex backtracking issues in parse() method

Fix slow parse() to prevent regex backtracking on prefix-sharing inputs across multiple files. Add unit test for the bugfixes.

* Refactor bug fixes for regex backtracking improvements

Updated bug fixes to include details on regex backtracking issues in multiple files.

* Fix typo in bugfixes section of changelog

* Update bugfixes for regex backtracking issues

* rm_templates: T8609: route_maps.py: fix remaining trailing `*$` patterns

Five sites in route_maps.py still had the `(?P&lt;name&gt;...)\n  *$` shape that collapses to `(?P&lt;name&gt;...)*$` under `re.VERBOSE`, parsers `sequence`, `on_match_next`, `set_atomic_aggregate`, `set_extcommunity_bandwidth_non_transitive`, and `match_community_exact_match`.  Collapsed each to `\s*$` on the same line as the named group, matching the rest of the PR.

* rm_templates: T8609: route_maps.py: split overlong getval to satisfy E501

Line 517 was 161 chars (`set_extcommunity_bandwidth_non_transitive` parser) and tripped pycodestyle's E501 sanity test in CI.  Split the regex source across two lines at the `\d+)` boundary; under `re.VERBOSE` the literal newline and indent between regex tokens are stripped at compile time, so the engine sees the same pattern.  `\s*$` stays on the same line as the closing capture group, so the group-quantifier shape this PR fixes elsewhere isn't reintroduced.

---------

Co-authored-by: omnom62 &lt;75066712+omnom62@users.noreply.github.com&gt;</content>
</entry>
<entry>
<title>T6818: Add argument to vyos_config for controlling password filtering (#466)</title>
<updated>2026-05-25T11:44:54+00:00</updated>
<author>
<name>stronkbyte</name>
<email>262002943+stronkbyte@users.noreply.github.com</email>
</author>
<published>2026-05-25T11:44:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos.vyos.git/commit/?id=29e47bb4b43d1888c79f54de2fbee90224e9652b'/>
<id>urn:sha1:29e47bb4b43d1888c79f54de2fbee90224e9652b</id>
<content type='text'>
This commit adds the argument `allow_password_change` in order to
control whether any configuration lines which would make changes to user
passwords should be filtered out or not.

Co-authored-by: Daniil Baturin &lt;daniil@baturin.org&gt;
Co-authored-by: omnom62 &lt;75066712+omnom62@users.noreply.github.com&gt;</content>
</entry>
<entry>
<title>T8515: remove pre-1.3 deprecated code artifacts from vyos_bgp_global (#461)</title>
<updated>2026-05-13T13:23:39+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@vyos.io</email>
</author>
<published>2026-05-13T13:23:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos.vyos.git/commit/?id=be77e3b4b870ae2fb8ec4a75794a960c422a8449'/>
<id>urn:sha1:be77e3b4b870ae2fb8ec4a75794a960c422a8449</id>
<content type='text'>
* T8515: remove commented-out pre-1.3 parameter artifacts from vyos_bgp_global docs

* T8515: remove stale vrf.old backup file

* T8515: add changelog fragment for deprecated code cleanup

* T8515: fix grammar in ebgp_multihop description

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

---------

Co-authored-by: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
Co-authored-by: omnom62 &lt;75066712+omnom62@users.noreply.github.com&gt;</content>
</entry>
<entry>
<title>T8520: fix vlan purge generating invalid commands for bare interfaces (#463)</title>
<updated>2026-05-01T18:43:03+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@vyos.io</email>
</author>
<published>2026-05-01T18:43:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos.vyos.git/commit/?id=a2ee09579a75165ae691efcbf3e952db83145b83'/>
<id>urn:sha1:a2ee09579a75165ae691efcbf3e952db83145b83</id>
<content type='text'>
Co-authored-by: Daniil Baturin &lt;daniil@baturin.org&gt;</content>
</entry>
<entry>
<title>T8512: fix isort import ordering violations (#454)</title>
<updated>2026-04-27T13:47:01+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@vyos.io</email>
</author>
<published>2026-04-27T13:47:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos.vyos.git/commit/?id=d3f981148e78c0dd31d35063f3407530278aa3a1'/>
<id>urn:sha1:d3f981148e78c0dd31d35063f3407530278aa3a1</id>
<content type='text'>
* T8512: fix isort import ordering violations

* T8512: add changelog fragment

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

---------

Co-authored-by: omnom62 &lt;75066712+omnom62@users.noreply.github.com&gt;
Co-authored-by: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;</content>
</entry>
<entry>
<title> T8205 Ensure the vyos_user module works when user properties are defined in… (#445)</title>
<updated>2026-04-07T11:46:41+00:00</updated>
<author>
<name>gideon-kuijt-northwave</name>
<email>gideon.kuijt@northwave-cybersecurity.com</email>
</author>
<published>2026-04-07T11:46:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos.vyos.git/commit/?id=16e6f21de8e90833e2284aeab6cd39d2e1482155'/>
<id>urn:sha1:16e6f21de8e90833e2284aeab6cd39d2e1482155</id>
<content type='text'>
* Ensure the vyos_user module works when user properties are defined in aggregate

Ensure the vyos_user module works when user properties are defined in aggregate. Previously the value variable is not filled when a property is configured as a property of a user. This gives a python error when the value variable is called.

* Add unit test for aggregate vyos_user module

* Create vyos_user_aggregate_fix.yml

Create changelog for vyos_user aggregate bugfix

* Rename vyos_user_aggregate_fix.yml to  T8205_vyos_user_aggregate_fix.yml

* Rename  T8205_vyos_user_aggregate_fix.yml to T8205_vyos_user_aggregate_fix.yml

Remove unintended whitespace in changelog fragment: T8205_vyos_user_aggregate_fix.yml

---------

Co-authored-by: omnom62 &lt;75066712+omnom62@users.noreply.github.com&gt;
Co-authored-by: Daniil Baturin &lt;daniil@baturin.org&gt;</content>
</entry>
<entry>
<title>T8104: Add static routes multiple next-hop targets (#444)</title>
<updated>2026-03-08T10:53:15+00:00</updated>
<author>
<name>omnom62</name>
<email>75066712+omnom62@users.noreply.github.com</email>
</author>
<published>2026-03-08T10:53:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos.vyos.git/commit/?id=ab0aa4bd1a16b044f061053aa78b0fa865312545'/>
<id>urn:sha1:ab0aa4bd1a16b044f061053aa78b0fa865312545</id>
<content type='text'>
* Mid fixes

* Ready for testing

* Fixing SR interface

* Fix is ready

* changelog

* Integration tests for static_routes interface next-hop v.1.4+ WIP

* branching 1.3- and 1.4+

* Integration tests for T8104 complete

* Comments are resolved

* Comments are resolved</content>
</entry>
<entry>
<title>T6836 VRF module (#408)</title>
<updated>2026-03-04T09:51:16+00:00</updated>
<author>
<name>omnom62</name>
<email>75066712+omnom62@users.noreply.github.com</email>
</author>
<published>2026-03-04T09:51:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos.vyos.git/commit/?id=a8e5dac21090e9b0ddf876214a9a1522079ecde1'/>
<id>urn:sha1:a8e5dac21090e9b0ddf876214a9a1522079ecde1</id>
<content type='text'>
* t6836 vfr module init

* argspec facts module for VRF

* T6834 static_route module to support interface_route (#398)

* t6834 init

* facts fixes, WIP

* T6834 - facts updates

* static_routes 1.3- config, facts, args and sanit and unit tests

* changelog

* changelog updates

* static_routes 1.4+

* static_routes v1.4 unit tests

* comment removed

* T6829 (area interfaces in OSPFv3 1.3-1.5) re-init (#399)

* T6829 re-init

* re-init T6829 ospfv3 area interface for 1.3-

* changelog

* changelog fix

* Doc is updated

* adding 1.4+ support

* ospfv3 area interfaces for 1.4+

* fixed ospfv3 facts and added area interface unit test for 1.4

* ospfv3 clean-up

* doc updates

* Resolve merge conflicts

* vrf parsers set_table

* more vrf paresers added

* vrf facts main code

* vrf data structures

* simple vrf config push

* simple vrf config push

* some work on vrf

* basic facts done

* vrf instance parsers wif

* ongoing parser testing

* vrf dev work

* testing with paresers

* all basic settings

* merged for vrf

* more states for VRF

* vrf deleted, overriden

* overriden

* sanity

* rst for vrf

* changelog

* fix changelog

* doc fix

* vrf delete idempotent

* deleted and overridden for VFR

* overriden

* overriden vrf idempotency

* asdvanced vrf settings

* afi for VRF facts

* VRF AFI config

* VRF AFI tests

* vrf dev work

* afi dev work

* afi and deep_merge fixes for VRF

* afi basic provisioning

* changelog

* vrf sanity fixes

* VRF AFI protocols and route-maps

* vrf parsed, gathered, rendered fixes

* docstrings VRF

* docstrings VRF

* docstring VRF

* module doc update

* vrf module examples

* VRF doc examples

* linter

* VRF unit tests init

* VRF unit tests init

* VRF unit tests updates

* fixed VRF overridden and deleted unit test cases

* VRF integration tests init

* VRF int tests rtt, merged, replaced

* VRF int testt gathered, rendered

* VRF int tests deleted, rendered, overridden and empty_config

* linter

* VRF int test misc fixes

* VRF global idepmotency

* fixing py3.13 runner deps

* fixing lint

* fixing sanity

* reverting previous fixes

* VRF protocols load_module and provisioning flow

* fixes to bgp VRF protocol methods

* VRF protocol facts init

* VRF protocol load_module works

* reworked VRF load_module routine

* vrf protocl static fixed

* Fixed static and ospf VRF protocol provisioning

* Fixed static and ospf VRF protocol provisioning

* VRF doc update

* VRF docs update

* VRF doc updates

* unit tests for VRF protocols

* VRF BGP protcol sanity check

* VRF protocol fixed sanity checks (DOCUMENTATION)

* sanity and doc for VRF fixed

* VRF unit tests mock

* VRF protocol integration parsed, rtt and merged init

* VRF protocols - rendered, overridden

* VRF protocols replaced

* fix accidental changes to test_vyos_config.py

* PR description

* fix image

* README fix

* Fixing linter

* Mid-result UAT overriden VRF

* Mid-result for VRF UAT

* VRF uat

* VRF obsolete features removed</content>
</entry>
</feed>
