summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@baturin.org>2026-05-13 16:25:24 +0100
committerGitHub <noreply@github.com>2026-05-13 16:25:24 +0100
commit4cb81d993c7e0f945bc5223ce09a2c8884d371f9 (patch)
tree99a2ac69a179a5db2a1928abbd0b52275152abd2
parentda09fc750acfe8a94dbfef09c7f950ce6b0e5b4c (diff)
parentbe77e3b4b870ae2fb8ec4a75794a960c422a8449 (diff)
downloadvyos.vyos-T8518/vlan-unit-tests.tar.gz
vyos.vyos-T8518/vlan-unit-tests.zip
Merge branch 'main' into T8518/vlan-unit-testsT8518/vlan-unit-tests
-rw-r--r--changelogs/fragments/deprecated-cleanup.yml3
-rw-r--r--plugins/module_utils/network/vyos/config/vrf/vrf.old313
-rw-r--r--plugins/modules/vyos_bgp_global.py139
3 files changed, 4 insertions, 451 deletions
diff --git a/changelogs/fragments/deprecated-cleanup.yml b/changelogs/fragments/deprecated-cleanup.yml
new file mode 100644
index 00000000..cf361adc
--- /dev/null
+++ b/changelogs/fragments/deprecated-cleanup.yml
@@ -0,0 +1,3 @@
+---
+minor_changes:
+ - vyos_bgp_global - remove commented-out pre-1.3 deprecated parameter documentation artifacts.
diff --git a/plugins/module_utils/network/vyos/config/vrf/vrf.old b/plugins/module_utils/network/vyos/config/vrf/vrf.old
deleted file mode 100644
index b9f56cc6..00000000
--- a/plugins/module_utils/network/vyos/config/vrf/vrf.old
+++ /dev/null
@@ -1,313 +0,0 @@
-#
-# -*- coding: utf-8 -*-
-# Copyright 2021 Red Hat
-# GNU General Public License v3.0+
-# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-#
-
-from __future__ import absolute_import, division, print_function
-
-
-__metaclass__ = type
-
-"""
-The vyos_vrf config file.
-It is in this file where the current configuration (as dict)
-is compared to the provided configuration (as dict) and the command set
-necessary to bring the current configuration to its desired end-state is
-created.
-"""
-
-import importlib
-
-from copy import deepcopy
-
-from ansible.module_utils.six import iteritems
-from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.rm_base.resource_module import (
- ResourceModule,
-)
-
-from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.config.bgp_global.bgp_global import (
- Bgp_global,
-)
-from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.facts.facts import Facts
-from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.rm_templates.vrf import (
- VrfTemplate,
-)
-from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.utils.utils import combine
-from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.utils.version import (
- LooseVersion,
-)
-from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.vyos import get_os_version
-
-
-# from ansible.plugins.filter.core import combine
-
-
-class Vrf(ResourceModule):
- """
- The vyos_vrf config class
- """
-
- def __init__(self, module):
- super(Vrf, self).__init__(
- empty_fact_val={},
- facts_module=Facts(module),
- module=module,
- resource="vrf",
- tmplt=VrfTemplate(),
- )
- self.parsers = [
- "bind_to_all",
- ]
- self.bgp = Bgp_global(module)
-
- def _validate_template(self):
- version = get_os_version(self._module)
- if LooseVersion(version) >= LooseVersion("1.4"):
- self._tmplt = VrfTemplate()
- else:
- self._module.fail_json(msg="VRF is not supported in this version of VyOS")
-
- def parse(self):
- """override parse to check template"""
- self._validate_template()
- return super().parse()
-
- def get_parser(self, name):
- """get_parsers"""
- self._validate_template()
- return super().get_parser(name)
-
- def execute_module(self):
- """Execute the module
-
- :rtype: A dictionary
- :returns: The result from module execution
- """
- if self.state not in ["parsed", "gathered"]:
- self.generate_commands()
- self.run_commands()
-
- return self.result
-
- def generate_commands(self):
- """Generate configuration commands to send based on
- want, have and desired state.
- """
- wantd = {}
- haved = {}
- wantd = deepcopy(self.want)
- haved = deepcopy(self.have)
-
- # self._module.fail_json(msg="WanT: " + str(self.want) + "**** H: " + str(self.have))
-
- # if state is merged, merge want onto have and then compare
- if self.state in ["merged", "replaced"]:
- # wantd = dict_merge(wantd, haved)
- # wantd = haved | combine(wantd, recursive=True)
- wantd = combine(haved, wantd, recursive=True)
- # self._module.fail_json(msg="Want: " + str(wantd) + "**** H: " + str(haved))
-
- # if state is deleted, delete and empty out wantd
- if self.state == "deleted":
- w = deepcopy(wantd)
- if w == {} and haved != {}:
- self.commands = ["delete vrf"]
- return
- for k, want in iteritems(w):
- if not (k in haved and haved[k]):
- del wantd[k]
- else:
- if isinstance(want, list):
- for entry in want:
- wname = entry.get("name")
- haved["instances"] = [
- i for i in haved.get("instances", []) if i.get("name") != wname
- ]
- self.commands.append("delete vrf name {}".format(wname))
- else:
- self.commands.append("delete vrf {}".format(k.replace("_", "-")))
- del wantd[k]
-
- if self.state == "overridden":
- w = deepcopy(wantd)
- h = deepcopy(haved)
- for k, want in iteritems(w):
- if k in haved and haved[k] != want:
- if isinstance(want, list):
- for entry in want:
- wname = entry.get("name")
- hdict = next(
- (inst for inst in haved["instances"] if inst["name"] == wname),
- None,
- )
- if entry != hdict:
- # self._module.fail_json(msg="Want: " + str(entry) + "**** H: " + str(hdict))
- haved["instances"] = [
- i for i in haved.get("instances", []) if i.get("name") != wname
- ]
- self.commands.append("delete vrf name {}".format(wname))
- self.commands.append("commit")
-
- for k, want in iteritems(wantd):
- if isinstance(want, list):
- self._compare_instances(want=want, have=haved.pop(k, {}))
- self.compare(
- parsers=self.parsers,
- want={k: want},
- have={k: haved.pop(k, {})},
- )
- self._module.fail_json(msg=self.commands)
-
- def _compare_instances(self, want, have):
- """Compare the instances of the VRF"""
- parsers = [
- "table_id",
- "vni",
- "description",
- "disable_vrf",
- ]
- # self._module.fail_json(msg="want: " + str(want) + "**** have: " + str(have))
-
- for entry in want:
- h = {}
- wname = entry.get("name")
- # h = next((vrf for vrf in have if vrf["name"] == wname), {})
- h = {
- k: v
- for vrf in have
- if vrf.get("name") == wname
- for k, v in vrf.items()
- if k != "address_family"
- }
- self.compare(parsers=parsers, want=entry, have=h)
-
- if "address_family" in entry:
- wafi = {"name": wname, "address_family": entry.get("address_family", [])}
- # hdict = next((item for item in have if item["name"] == wname), None)
- hdict = next((d for d in have if d.get("name") == wname), None)
-
- hafi = {
- "name": (hdict or {"name": wname})["name"],
- "address_family": hdict.get("address_family", []) if hdict else [],
- }
-
- # self._module.fail_json(msg="wafi: " + str(wafi) + "**** hafi: " + str(hafi))
-
- self._compare_addr_family(wafi, hafi)
-
- if "protocols" in entry:
- for protocol_name in entry["protocols"]:
- protocol_module = self._load_protocol_module(protocol_name)
- w_p_dict = entry["protocols"][protocol_name]
- h_p_dict = next(
- (
- v.get("protocols", {}).get(protocol_name)
- for v in have
- if v.get("name") == wname
- ),
- {},
- )
- if protocol_name == "bgp":
- protocol_module._validate_template()
- protocol_module.want = w_p_dict
- protocol_module.have = h_p_dict
- protocol_module.generate_commands()
- elif protocol_name in [
- # "ospf",
- # "ospfv3",
- "static",
- ]:
- self._module.fail_json(msg=str(protocol_module))
- protocol_module._module.params["config"] = w_p_dict
- protocol_module.state = self.state
- self._module.fail_json(msg=str(protocol_module.set_config(h_p_dict)))
-
- protocol_module.commands = protocol_module.set_config(h_p_dict)
- self.commands.extend(
- [
- cmd.replace("protocols", "vrf name " + wname + " protocols", 1)
- for cmd in protocol_module.commands
- ],
- )
- protocol_module = None # Clear the module to free resources
-
- def _compare_addr_family(self, want, have):
- """Compare the address families of the VRF"""
- afi_parsers = [
- # "address_family",
- "disable_forwarding",
- "disable_nht",
- ]
- # self._module.fail_json(msg="wAfi: " + str(want) + "**** hAfi: " + str(have))
-
- wafi = self.afi_to_list(want)
- hafi = self.afi_to_list(have)
-
- lookup = {(d["name"], d["afi"]): d for d in hafi}
- pairs = [(d1, lookup.get((d1["name"], d1["afi"]), {})) for d1 in wafi]
-
- for wafd, hafd in pairs:
- # self._module.fail_json(msg="wAfd: " + str(wafd) + "**** hAfd: " + str(hafd))
- if "route_maps" in wafd:
- self._compare_route_maps(wafd, hafd)
- self.compare(parsers=afi_parsers, want=wafd, have=hafd)
- # self.compare(parsers=afi_parsers, want=wafi, have=hafi)
-
- def afi_to_list(self, data):
- """Convert address family dict to list"""
-
- return [
- {"name": data["name"], **{**af, "afi": "ip" if af["afi"] == "ipv4" else af["afi"]}}
- for af in data["address_family"]
- ]
-
- def _compare_route_maps(self, wafd, hafd):
- want_rms = wafd.get("route_maps", [])
- have_rms = hafd.get("route_maps", [])
-
- for want in want_rms:
- match = next(
- (
- h
- for h in have_rms
- if h["rm_name"] == want["rm_name"] and h["protocol"] == want["protocol"]
- ),
- {},
- )
- base = {"name": wafd["name"], "afi": wafd["afi"]}
-
- self.compare(
- parsers="route_maps",
- want={**base, "route_maps": want},
- have={**base, "route_maps": match},
- )
-
- def _load_protocol_module(self, protocol_name):
- if protocol_name == "bgp":
- from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.config.bgp_global.bgp_global import (
- Bgp_global,
- )
-
- return Bgp_global(self._module)
- elif protocol_name == "ospf":
- from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.config.ospfv2.ospfv2 import (
- Ospfv2,
- )
-
- return Ospfv2(self._module)
- elif protocol_name == "ospfv3":
- from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.config.ospfv3.ospfv3 import (
- Ospfv3,
- )
-
- return Ospfv3(self._module)
- elif protocol_name == "static":
- from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.config.static_routes.static_routes import (
- Static_routes,
- )
-
- return Static_routes(self._module)
- else:
- self._module.fail_json(msg="The protocol is not supported")
diff --git a/plugins/modules/vyos_bgp_global.py b/plugins/modules/vyos_bgp_global.py
index fe14bc0f..7e9f63b1 100644
--- a/plugins/modules/vyos_bgp_global.py
+++ b/plugins/modules/vyos_bgp_global.py
@@ -74,37 +74,6 @@ options:
description:
- Minimum interval for sending routing updates.
type: int
- # bfd: # <-- added in 1.3
- # description: Enable Bidirectional Forwarding Detection (BFD) support
- # type: dict
- # suboptions:
- # check-control-plane-failure:
- # description:
- # - Allow to write CBIT independence in BFD outgoing packets
- # and read both C-BIT value of BFD and lookup BGP peer status
- # type: bool
- # allowas_in: --> Moved to address-family before 1.3
- # description:
- # - Number of occurrences of AS number.
- # type: int
- # as_override: --> Moved to address-family before 1.3
- # description:
- # - AS for routes sent to this neighbor to be the local AS.
- # type: bool
- # attribute_unchanged: --> Moved to address-family before 1.3
- # description:
- # - BGP attributes are sent unchanged.
- # type: dict
- # suboptions:
- # as_path:
- # description: as_path
- # type: bool
- # med:
- # description: med
- # type: bool
- # next_hop:
- # description: next_hop
- # type: bool
capability:
description:
- Advertise capabilities to this neighbor.
@@ -118,13 +87,6 @@ options:
description:
- Advertise extended nexthop capability to this neighbor.
type: bool
- # orf: --> Removed before 1.3
- # description:
- # - Advertise ORF capability to this neighbor.
- # type: str
- # choices:
- # - send
- # - receive
default_originate:
description:
- Send default route to this neighbor
@@ -146,70 +108,14 @@ options:
- Disable sending community attributes to this neighbor.
type: str
choices: ['extended', 'standard']
- # distribute_list: --> Moved to address-family before 1.3
- # description: Access-list to filter route updates to/from this neighbor.
- # type: list
- # elements: dict
- # suboptions:
- # action:
- # description: Access-list to filter outgoing/incoming route updates to this neighbor
- # type: str
- # choices: ['export', 'import']
- # acl:
- # description: Access-list number.
- # type: int
ebgp_multihop:
description:
- Allow this EBGP neighbor to not be on a directly connected network. Specify
- the number hops.
+ the number of hops.
type: int
- # interface: # <-- added in 1.3
- # description: interface parameters
- # type: dict
- # suboptions:
- # peer_group:
- # description: Peer group for this neighbor
- # type: str
- # remote_as:
- # description:
- # - Remote AS number
- # - Or 'external' for any number except this AS number
- # - or 'internal' for this AS number
- # type: str
- # v6only:
- # description: Enable BGP with v6 link-local only
- # type: dict
- # suboptions:
- # peer_group:
- # description: Peer group for this neighbor
- # type: str
- # remote_as:
- # description:
- # - Remote AS number
- # - Or 'external' for any number except this AS number
- # - or 'internal' for this AS number
- # filter_list: --> Moved to address-family before 1.3
- # description: As-path-list to filter route updates to/from this neighbor.
- # type: list
- # elements: dict
- # suboptions:
- # action:
- # description: filter outgoing/incoming route updates
- # type: str
- # choices: ['export', 'import']
- # path_list:
- # description: As-path-list to filter
- # type: str
local_as:
description: local as number not to be prepended to updates from EBGP peers
type: int
- # maximum_prefix: --> Moved to address-family before 1.3
- # description: Maximum number of prefixes to accept from this neighbor
- # nexthop-self Nexthop for routes sent to this neighbor to be the local router.
- # type: int
- # nexthop_self: --> Moved to address-family before 1.3
- # description: Nexthop for routes sent to this neighbor to be the local router.
- # type: bool
override_capability:
description: Ignore capability negotiation with specified neighbor.
type: bool
@@ -228,61 +134,18 @@ options:
port:
description: Neighbor's BGP port
type: int
- # prefix_list: --> Moved to address-family before 1.3
- # description: Prefix-list to filter route updates to/from this neighbor.
- # type: list
- # elements: dict
- # suboptions:
- # action:
- # description: filter outgoing/incoming route updates
- # type: str
- # choices: ['export', 'import']
- # prefix_list:
- # description: Prefix-list to filter
- # type: str
remote_as:
description: Neighbor BGP AS number
type: int
- # remove_private_as: --> Moved to address-family before 1.3
- # description: Remove private AS numbers from AS path in outbound route updates
- # type: bool
- # route_map: --> Moved to address-family before 1.3
- # description: Route-map to filter route updates to/from this neighbor.
- # type: list
- # elements: dict
- # suboptions:
- # action:
- # description: filter outgoing/incoming route updates
- # type: str
- # choices: ['export', 'import']
- # route_map:
- # description: route-map to filter
- # type: str
- # route_reflector_client: --> Moved to address-family before 1.3
- # description: Neighbor as a route reflector client
- # type: bool
- # route_server_client: --> Removed prior to 1.3
- # description: Neighbor is route server client
- # type: bool
shutdown:
description: Administratively shut down neighbor
type: bool
- # soft_reconfiguration: --> Moved to address-family before 1.3
- # description: Soft reconfiguration for neighbor
- # type: bool
solo: # <-- added in 1.3
description: Do not send back prefixes learned from the neighbor
type: bool
strict_capability_match:
description: Enable strict capability negotiation
type: bool
- # unsuppress_map: --> Moved to address-family before 1.3
- # description: Route-map to selectively unsuppress suppressed routes
- # type: str
-
- # weight: --> Moved to address-family before 1.3
- # description: Default weight for routes from this neighbor
- # type: int
timers:
description: Neighbor timers
type: dict