summaryrefslogtreecommitdiff
path: root/plugins/modules/vyos_bgp_address_family.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/modules/vyos_bgp_address_family.py')
-rw-r--r--plugins/modules/vyos_bgp_address_family.py1192
1 files changed, 1192 insertions, 0 deletions
diff --git a/plugins/modules/vyos_bgp_address_family.py b/plugins/modules/vyos_bgp_address_family.py
new file mode 100644
index 0000000..80c6807
--- /dev/null
+++ b/plugins/modules/vyos_bgp_address_family.py
@@ -0,0 +1,1192 @@
+#!/usr/bin/python
+# -*- 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)
+
+#############################################
+# WARNING #
+#############################################
+#
+# This file is auto generated by the resource
+# module builder playbook.
+#
+# Do not edit this file manually.
+#
+# Changes to this file will be over written
+# by the resource module builder.
+#
+# Changes should be made in the model used to
+# generate this file or in the resource module
+# builder template.
+#
+#############################################
+
+"""
+The module file for vyos_bgp_address_family
+"""
+
+from __future__ import absolute_import, division, print_function
+
+__metaclass__ = type
+
+DOCUMENTATION = """
+module: vyos_bgp_address_family
+version_added: 2.1.0
+short_description: BGP Address Family Resource Module.
+description:
+- This module manages BGP address family configuration of interfaces on devices running VYOS.
+author: Gomathi Selvi Srinivasan (@GomathiselviS)
+options:
+ config:
+ description: A dict of BGP global configuration for interfaces.
+ type: dict
+ suboptions:
+ as_number:
+ description:
+ - AS number.
+ type: int
+ address_family:
+ description: BGP address-family parameters.
+ type: list
+ elements: dict
+ suboptions:
+ afi:
+ description: BGP address family settings.
+ type: str
+ choices: ['ipv4', 'ipv6']
+ aggregate_address:
+ description:
+ - BGP aggregate network.
+ type: list
+ elements: dict
+ suboptions:
+ prefix:
+ description: BGP aggregate network.
+ type: str
+ as_set:
+ description: Generate AS-set path information for this aggregate address.
+ type: bool
+ summary_only:
+ description: Announce the aggregate summary network only.
+ type: bool
+ networks:
+ description: BGP network
+ type: list
+ elements: dict
+ suboptions:
+ prefix:
+ description: BGP network address
+ type: str
+ path_limit:
+ description: AS path hop count limit
+ type: int
+ backdoor:
+ description: Network as a backdoor route.
+ type: bool
+ route_map:
+ description: Route-map to modify route attributes
+ type: str
+ redistribute:
+ description: Redistribute routes from other protocols into BGP
+ type: list
+ elements: dict
+ suboptions:
+ protocol:
+ description: types of routes to be redistributed.
+ type: str
+ choices: ['connected', 'kernel', 'ospf', 'ospfv3', 'rip', 'ripng', 'static']
+ table:
+ description: Redistribute non-main Kernel Routing Table.
+ type: str
+ route_map:
+ description: Route map to filter redistributed routes
+ type: str
+ metric:
+ description: Metric for redistributed routes.
+ type: int
+ neighbors:
+ description: BGP neighbor
+ type: list
+ elements: dict
+ suboptions:
+ neighbor_address:
+ description: BGP neighbor address (v4/v6).
+ type: str
+ address_family:
+ description: address family.
+ type: list
+ elements: dict
+ suboptions:
+ afi:
+ description: BGP neighbor parameters.
+ type: str
+ choices: ['ipv4', 'ipv6']
+ allowas_in:
+ description: Number of occurrences of AS number.
+ type: int
+ as_override:
+ description: AS for routes sent to this neighbor to be the local AS.
+ type: bool
+ attribute_unchanged:
+ description: BGP attributes are sent unchanged.
+ type: dict
+ suboptions:
+ as_path:
+ description: as_path attribute
+ type: bool
+ med:
+ description: med attribute
+ type: bool
+ next_hop:
+ description: next_hop attribute
+ type: bool
+ capability:
+ description: Advertise capabilities to this neighbor.
+ type: dict
+ suboptions:
+ dynamic:
+ description: Advertise dynamic capability to this neighbor.
+ type: bool
+ orf:
+ description: Advertise ORF capability to this neighbor.
+ type: str
+ choices: ['send', 'receive']
+ default_originate:
+ description: Send default route to this neighbor
+ type: str
+ distribute_list:
+ 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: Acess-list number.
+ type: int
+ filter_list:
+ 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
+ maximum_prefix:
+ 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_local:
+ description: Nexthop attributes.
+ type: bool
+ nexthop_self:
+ description: Nexthop for routes sent to this neighbor to be the local router.
+ type: bool
+ peer_group:
+ description: IPv4 peer group for this peer
+ type: str
+ prefix_list:
+ 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
+ remove_private_as:
+ description: Remove private AS numbers from AS path in outbound route updates
+ type: bool
+ route_map:
+ 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:
+ description: Neighbor as a route reflector client
+ type: bool
+ route_server_client:
+ description: Neighbor is route server client
+ type: bool
+ soft_reconfiguration:
+ description: Soft reconfiguration for neighbor
+ type: bool
+ unsupress_map:
+ description: Route-map to selectively unsuppress suppressed routes
+ type: str
+ weight:
+ description: Default weight for routes from this neighbor
+ type: int
+ running_config:
+ type: str
+ description:
+ - This option is used only with state I(parsed).
+ - The value of this option should be the output received from the IOS device by
+ executing the command B(show configuration command | match bgp).
+ - The state I(parsed) reads the configuration from C(running_config) option and
+ transforms it into Ansible structured data as per the resource module's argspec
+ and the value is then returned in the I(parsed) key within the result.
+ state:
+ description:
+ - The state the configuration should be left in.
+ type: str
+ choices:
+ - merged
+ - replaced
+ - deleted
+ - gathered
+ - parsed
+ - rendered
+ - purged
+ - overridden
+ default: merged
+"""
+EXAMPLES = """
+# Using merged
+# Before state
+# vyos@vyos:~$ show configuration commands | match "set protocols bgp"
+# vyos@vyos:~$
+
+ - name: Merge provided configuration with device configuration
+ vyos.vyos.vyos_bgp_address_family:
+ config:
+ as_number: "100"
+ address_family:
+ - afi: "ipv4"
+ redistribute:
+ - protocol: "static"
+ metric: 50
+ neighbors:
+ - neighbor_address: "20.33.1.1/24"
+ address_family:
+ - afi: "ipv4"
+ allowas_in: 4
+ as_override: True
+ attribute_unchanged:
+ med: True
+ - afi: "ipv6"
+ default_originate: "map01"
+ distribute_list:
+ - action: "export"
+ acl: 10
+ - neighbor_address: "100.11.34.12"
+ address_family:
+ - afi: "ipv4"
+ maximum_prefix: 45
+ nexthop_self: True
+ route_map:
+ - action: "export"
+ route_map: "map01"
+ - action: "import"
+ route_map: "map01"
+ weight: 50
+
+# After State:
+# vyos@vyos:~$ show configuration commands | match "set protocols bgp"
+# set protocols bgp 100 address-family ipv4-unicast redistribute static metric '50'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast allowas-in number '4'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast as-override
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast attribute-unchanged med
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast default-originate route-map 'map01'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast distribute-list export '10'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast maximum-prefix '45'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast nexthop-self
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast route-map export 'map01'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast route-map import 'map01'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast weight '50'
+# vyos@vyos:~$
+#
+# Module Execution:
+#
+# "after": {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "redistribute": [
+# {
+# "metric": 50,
+# "protocol": "static"
+# }
+# ]
+# }
+# ],
+# "as_number": 100,
+# "neighbors": [
+# {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "maximum_prefix": 45,
+# "nexthop_self": true,
+# "route_map": [
+# {
+# "action": "export",
+# "route_map": "map01"
+# },
+# {
+# "action": "import",
+# "route_map": "map01"
+# }
+# ],
+# "weight": 50
+# }
+# ],
+# "neighbor_address": "100.11.34.12"
+# },
+# {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "allowas_in": 4,
+# "as_override": true,
+# "attribute_unchanged": {
+# "med": true
+# }
+# },
+# {
+# "afi": "ipv6",
+# "default_originate": "map01",
+# "distribute_list": [
+# {
+# "acl": 10,
+# "action": "export"
+# }
+# ]
+# }
+# ],
+# "neighbor_address": "20.33.1.1/24"
+# }
+# ]
+# },
+# "before": {},
+# "changed": true,
+# "commands": [
+# "set protocols bgp 100 address-family ipv4-unicast redistribute static metric 50",
+# "set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast allowas-in number 4",
+# "set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast as-override",
+# "set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast attribute-unchanged med",
+# "set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast default-originate route-map map01",
+# "set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast distribute-list export 10",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast maximum-prefix 45",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast nexthop-self",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast route-map export map01",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast route-map import map01",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast weight 50"
+# ],
+#
+
+# Using replaced:
+
+# Before state:
+
+# vyos@vyos:~$ show configuration commands | match "set protocols bgp"
+# set protocols bgp 100 address-family ipv4-unicast redistribute static metric '50'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast allowas-in number '4'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast as-override
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast attribute-unchanged med
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast default-originate route-map 'map01'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast distribute-list export '10'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast maximum-prefix '45'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast nexthop-self
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast route-map export 'map01'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast route-map import 'map01'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast weight '50'
+# vyos@vyos:~$
+
+ - name: Replace provided configuration with device configuration
+ vyos.vyos.vyos_bgp_address_family:
+ config:
+ as_number: "100"
+ neighbors:
+ - neighbor_address: "100.11.34.12"
+ address_family:
+ - afi: "ipv4"
+ allowas_in: 4
+ as_override: True
+ attribute_unchanged:
+ med: True
+ - afi: "ipv6"
+ default_originate: "map01"
+ distribute_list:
+ - action: "export"
+ acl: 10
+ - neighbor_address: "20.33.1.1/24"
+ address_family:
+ - afi: "ipv6"
+ maximum_prefix: 45
+ nexthop_self: True
+
+ state: replaced
+
+# After State:
+
+# vyos@vyos:~$ show configuration commands | match "set protocols bgp"
+# set protocols bgp 100 address-family ipv4-unicast redistribute static metric '50'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast maximum-prefix '45'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast nexthop-self
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast allowas-in number '4'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast as-override
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast attribute-unchanged med
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast default-originate route-map 'map01'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast distribute-list export '10'
+# vyos@vyos:~$
+#
+#
+# # Module Execution:
+# "after": {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "redistribute": [
+# {
+# "metric": 50,
+# "protocol": "static"
+# }
+# ]
+# }
+# ],
+# "as_number": 100,
+# "neighbors": [
+# {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "allowas_in": 4,
+# "as_override": true,
+# "attribute_unchanged": {
+# "med": true
+# }
+# },
+# {
+# "afi": "ipv6",
+# "default_originate": "map01",
+# "distribute_list": [
+# {
+# "acl": 10,
+# "action": "export"
+# }
+# ]
+# }
+# ],
+# "neighbor_address": "100.11.34.12"
+# },
+# {
+# "address_family": [
+# {
+# "afi": "ipv4"
+# },
+# {
+# "afi": "ipv6",
+# "maximum_prefix": 45,
+# "nexthop_self": true
+# }
+# ],
+# "neighbor_address": "20.33.1.1/24"
+# }
+# ]
+# },
+# "before": {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "redistribute": [
+# {
+# "metric": 50,
+# "protocol": "static"
+# }
+# ]
+# }
+# ],
+# "as_number": 100,
+# "neighbors": [
+# {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "maximum_prefix": 45,
+# "nexthop_self": true,
+# "route_map": [
+# {
+# "action": "export",
+# "route_map": "map01"
+# },
+# {
+# "action": "import",
+# "route_map": "map01"
+# }
+# ],
+# "weight": 50
+# }
+# ],
+# "neighbor_address": "100.11.34.12"
+# },
+# {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "allowas_in": 4,
+# "as_override": true,
+# "attribute_unchanged": {
+# "med": true
+# }
+# },
+# {
+# "afi": "ipv6",
+# "default_originate": "map01",
+# "distribute_list": [
+# {
+# "acl": 10,
+# "action": "export"
+# }
+# ]
+# }
+# ],
+# "neighbor_address": "20.33.1.1/24"
+# }
+# ]
+# },
+# "changed": true,
+# "commands": [
+# "delete protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast distribute-list",
+# "delete protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast default-originate",
+# "delete protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast attribute-unchanged",
+# "delete protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast as-override",
+# "delete protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast allowas-in",
+# "delete protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast weight",
+# "delete protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast route-map",
+# "delete protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast nexthop-self",
+# "delete protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast maximum-prefix",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast allowas-in number 4",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast as-override",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast attribute-unchanged med",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast default-originate route-map map01",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast distribute-list export 10",
+# "set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast maximum-prefix 45",
+# "set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast nexthop-self"
+# ],
+
+
+# Using overridden
+# vyos@vyos:~$ show configuration commands | match "set protocols bgp"
+# set protocols bgp 100 address-family ipv4-unicast network 35.1.1.0/24 backdoor
+# set protocols bgp 100 address-family ipv4-unicast redistribute static metric '50'
+# set protocols bgp 100 address-family ipv6-unicast aggregate-address 6601:1:1:1::/64 summary-only
+# set protocols bgp 100 address-family ipv6-unicast network 5001:1:1:1::/64 route-map 'map01'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast maximum-prefix '45'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast nexthop-self
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast allowas-in number '4'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast as-override
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast attribute-unchanged med
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast default-originate route-map 'map01'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast distribute-list export '10'
+# vyos@vyos:~$
+
+ - name: Override
+ vyos.vyos.vyos_bgp_address_family:
+ config:
+ as_number: "100"
+ neighbors:
+ - neighbor_address: "100.11.34.12"
+ address_family:
+ - afi: "ipv6"
+ maximum_prefix: 45
+ nexthop_self: True
+ route_map:
+ - action: "import"
+ route_map: "map01"
+ address_family:
+ - afi: "ipv4"
+ aggregate_address:
+ - prefix: "60.9.2.0/24"
+ summary_only: True
+ - afi: "ipv6"
+ redistribute:
+ - protocol: "static"
+ metric: 50
+ state: overridden
+
+# Aft=validate-moduleser State
+
+# vyos@vyos:~$ show configuration commands | match "set protocols bgp"
+# set protocols bgp 100 address-family ipv4-unicast aggregate-address 60.9.2.0/24 summary-only
+# set protocols bgp 100 address-family ipv6-unicast redistribute static metric '50'
+# set protocols bgp 100 neighbor 20.33.1.1/24
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast maximum-prefix '45'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast nexthop-self
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast route-map import 'map01'
+# vyos@vyos:~$
+
+
+# Module Execution:
+
+# "after": {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "aggregate_address": [
+# {
+# "prefix": "60.9.2.0/24",
+# "summary_only": true
+# }
+# ]
+# },
+# {
+# "afi": "ipv6",
+# "redistribute": [
+# {
+# "metric": 50,
+# "protocol": "static"
+# }
+# ]
+# }
+# ],
+# "as_number": 100,
+# "neighbors": [
+# {
+# "address_family": [
+# {
+# "afi": "ipv4"
+# },
+# {
+# "afi": "ipv6",
+# "maximum_prefix": 45,
+# "nexthop_self": true,
+# "route_map": [
+# {
+# "action": "import",
+# "route_map": "map01"
+# }
+# ]
+# }
+# ],
+# "neighbor_address": "100.11.34.12"
+# }
+# ]
+# },
+# "before": {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "networks": [
+# {
+# "backdoor": true,
+# "prefix": "35.1.1.0/24"
+# }
+# ],
+# "redistribute": [
+# {
+# "metric": 50,
+# "protocol": "static"
+# }
+# ]
+# },
+# {
+# "afi": "ipv6",
+# "aggregate_address": [
+# {
+# "prefix": "6601:1:1:1::/64",
+# "summary_only": true
+# }
+# ],
+# "networks": [
+# {
+# "prefix": "5001:1:1:1::/64",
+# "route_map": "map01"
+# }
+# ]
+# }
+# ],
+# "as_number": 100,
+# "neighbors": [
+# {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "allowas_in": 4,
+# "as_override": true,
+# "attribute_unchanged": {
+# "med": true
+# }
+# },
+# {
+# "afi": "ipv6",
+# "default_originate": "map01",
+# "distribute_list": [
+# {
+# "acl": 10,
+# "action": "export"
+# }
+# ]
+# }
+# ],
+# "neighbor_address": "100.11.34.12"
+# },
+# {
+# "address_family": [
+# {
+# "afi": "ipv4"
+# },
+# {
+# "afi": "ipv6",
+# "maximum_prefix": 45,
+# "nexthop_self": true
+# }
+# ],
+# "neighbor_address": "20.33.1.1/24"
+# }
+# ]
+# },
+# "changed": true,
+# "commands": [
+# "delete protocols bgp 100 neighbor 20.33.1.1/24 address-family",
+# "delete protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast distribute-list",
+# "delete protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast default-originate",
+# "delete protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast attribute-unchanged",
+# "delete protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast as-override",
+# "delete protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast allowas-in",
+# "delete protocols bgp 100 address-family ipv6 aggregate-address",
+# "delete protocols bgp 100 address-family ipv6 network",
+# "delete protocols bgp 100 address-family ipv4 network",
+# "delete protocols bgp 100 address-family ipv4 redistribute",
+# "set protocols bgp 100 address-family ipv4-unicast aggregate-address 60.9.2.0/24 summary-only",
+# "set protocols bgp 100 address-family ipv6-unicast redistribute static metric 50",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast maximum-prefix 45",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast nexthop-self",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast route-map import map01"
+# ],
+#
+
+# Using deleted:
+
+# Before State:
+
+# vyos@vyos:~$ show configuration commands | match "set protocols bgp"
+# set protocols bgp 100 address-family ipv4-unicast aggregate-address 60.9.2.0/24 summary-only
+# set protocols bgp 100 address-family ipv4-unicast redistribute static metric '50'
+# set protocols bgp 100 address-family ipv6-unicast redistribute static metric '50'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast allowas-in number '4'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast as-override
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast attribute-unchanged med
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast default-originate route-map 'map01'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast distribute-list export '10'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast maximum-prefix '45'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast nexthop-self
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast route-map export 'map01'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast route-map import 'map01'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast weight '50'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast maximum-prefix '45'
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast nexthop-self
+# set protocols bgp 100 neighbor 100.11.34.12 address-family ipv6-unicast route-map import 'map01'
+# vyos@vyos:~$
+
+ - name: Delete
+ vyos.vyos.vyos_bgp_address_family:
+ config:
+ as_number: "100"
+ neighbors:
+ - neighbor_address: "20.33.1.1/24"
+ address_family:
+ - afi: "ipv6"
+ - neighbor_address: "100.11.34.12"
+ address_family:
+ - afi: "ipv4"
+ state: deleted
+
+
+# After State:
+
+# vyos@vyos:~$ show configuration commands | match "set protocols bgp"
+# set protocols bgp 100 address-family ipv6-unicast redistribute static metric '50'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast allowas-in number '4'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast as-override
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast attribute-unchanged med
+# set protocols bgp 100 neighbor 100.11.34.12
+# vyos@vyos:~$
+#
+#
+# Module Execution:
+#
+# "after": {
+# "address_family": [
+# {
+# "afi": "ipv6",
+# "redistribute": [
+# {
+# "metric": 50,
+# "protocol": "static"
+# }
+# ]
+# }
+# ],
+# "as_number": 100,
+# "neighbors": [
+# {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "allowas_in": 4,
+# "as_override": true,
+# "attribute_unchanged": {
+# "med": true
+# }
+# }
+# ],
+# "neighbor_address": "20.33.1.1/24"
+# }
+# ]
+# },
+# "before": {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "aggregate_address": [
+# {
+# "prefix": "60.9.2.0/24",
+# "summary_only": true
+# }
+# ],
+# "redistribute": [
+# {
+# "metric": 50,
+# "protocol": "static"
+# }
+# ]
+# },
+# {
+# "afi": "ipv6",
+# "redistribute": [
+# {
+# "metric": 50,
+# "protocol": "static"
+# }
+# ]
+# }
+# ],
+# "as_number": 100,
+# "neighbors": [
+# {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "maximum_prefix": 45,
+# "nexthop_self": true,
+# "route_map": [
+# {
+# "action": "export",
+# "route_map": "map01"
+# },
+# {
+# "action": "import",
+# "route_map": "map01"
+# }
+# ],
+# "weight": 50
+# },
+# {
+# "afi": "ipv6",
+# "maximum_prefix": 45,
+# "nexthop_self": true,
+# "route_map": [
+# {
+# "action": "import",
+# "route_map": "map01"
+# }
+# ]
+# }
+# ],
+# "neighbor_address": "100.11.34.12"
+# },
+# {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "allowas_in": 4,
+# "as_override": true,
+# "attribute_unchanged": {
+# "med": true
+# }
+# },
+# {
+# "afi": "ipv6",
+# "default_originate": "map01",
+# "distribute_list": [
+# {
+# "acl": 10,
+# "action": "export"
+# }
+# ]
+# }
+# ],
+# "neighbor_address": "20.33.1.1/24"
+# }
+# ]
+# },
+# "changed": true,
+# "commands": [
+# "delete protocols bgp 100 address-family ipv4-unicast",
+# "delete protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast",
+# "delete protocols bgp 100 neighbor 100.11.34.12 address-family"
+# ],
+#
+
+# using parsed:
+
+# parsed.cfg
+# set protocols bgp 65536 address-family ipv4-unicast aggregate-address 192.0.2.0/24 as-set
+# set protocols bgp 65536 address-family ipv4-unicast network 192.1.13.0/24 route-map 'map01'
+# set protocols bgp 65536 address-family ipv4-unicast network 192.2.13.0/24 backdoor
+# set protocols bgp 65536 address-family ipv6-unicast redistribute ripng metric '20'
+# set protocols bgp 65536 neighbor 192.0.2.25 address-family ipv4-unicast route-map export 'map01'
+# set protocols bgp 65536 neighbor 192.0.2.25 address-family ipv4-unicast soft-reconfiguration inbound
+# set protocols bgp 65536 neighbor 203.0.113.5 address-family ipv6-unicast attribute-unchanged next-hop
+
+
+ - name: parse configs
+ vyos.vyos.vyos_bgp_address_family:
+ running_config: "{{ lookup('file', './parsed.cfg') }}"
+ state: parsed
+
+# Module Execution:
+# "parsed": {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "aggregate_address": [
+# {
+# "as_set": true,
+# "prefix": "192.0.2.0/24"
+# }
+# ],
+# "networks": [
+# {
+# "prefix": "192.1.13.0/24",
+# "route_map": "map01"
+# },
+# {
+# "backdoor": true,
+# "prefix": "192.2.13.0/24"
+# }
+# ]
+# },
+# {
+# "afi": "ipv6",
+# "redistribute": [
+# {
+# "metric": 20,
+# "protocol": "ripng"
+# }
+# ]
+# }
+# ],
+# "as_number": 65536,
+# "neighbors": [
+# {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "route_map": [
+# {
+# "action": "export",
+# "route_map": "map01"
+# }
+# ],
+# "soft_reconfiguration": true
+# }
+# ],
+# "neighbor_address": "192.0.2.25"
+# },
+# {
+# "address_family": [
+# {
+# "afi": "ipv6",
+# "attribute_unchanged": {
+# "next_hop": true
+# }
+# }
+# ],
+# "neighbor_address": "203.0.113.5"
+# }
+# ]
+#
+
+# Using gathered:
+
+# Native config:
+
+# vyos@vyos:~$ show configuration commands | match "set protocols bgp"
+# set protocols bgp 100 address-family ipv4-unicast network 35.1.1.0/24 backdoor
+# set protocols bgp 100 address-family ipv4-unicast redistribute static metric '50'
+# set protocols bgp 100 address-family ipv6-unicast aggregate-address 6601:1:1:1::/64 summary-only
+# set protocols bgp 100 address-family ipv6-unicast network 5001:1:1:1::/64 route-map 'map01'
+# set protocols bgp 100 address-family ipv6-unicast redistribute static metric '50'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast allowas-in number '4'
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast as-override
+# set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast attribute-unchanged med
+# set protocols bgp 100 neighbor 100.11.34.12
+
+ - name: gather configs
+ vyos.vyos.vyos_bgp_address_family:
+ state: gathered
+
+# Module Execution:
+
+# "gathered": {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "networks": [
+# {
+# "backdoor": true,
+# "prefix": "35.1.1.0/24"
+# }
+# ],
+# "redistribute": [
+# {
+# "metric": 50,
+# "protocol": "static"
+# }
+# ]
+# },
+# {
+# "afi": "ipv6",
+# "aggregate_address": [
+# {
+# "prefix": "6601:1:1:1::/64",
+# "summary_only": true
+# }
+# ],
+# "networks": [
+# {
+# "prefix": "5001:1:1:1::/64",
+# "route_map": "map01"
+# }
+# ],
+# "redistribute": [
+# {
+# "metric": 50,
+# "protocol": "static"
+# }
+# ]
+# }
+# ],
+# "as_number": 100,
+# "neighbors": [
+# {
+# "address_family": [
+# {
+# "afi": "ipv4",
+# "allowas_in": 4,
+# "as_override": true,
+# "attribute_unchanged": {
+# "med": true
+# }
+# }
+# ],
+# "neighbor_address": "20.33.1.1/24"
+# }
+# ]
+
+# Using rendered:
+
+ - name: Render
+ vyos.vyos.vyos_bgp_address_family:
+ config:
+ as_number: "100"
+ address_family:
+ - afi: "ipv4"
+ redistribute:
+ - protocol: "static"
+ metric: 50
+ neighbors:
+ - neighbor_address: "20.33.1.1/24"
+ address_family:
+ - afi: "ipv4"
+ allowas_in: 4
+ as_override: True
+ attribute_unchanged:
+ med: True
+ - afi: "ipv6"
+ default_originate: "map01"
+ distribute_list:
+ - action: "export"
+ acl: 10
+ - neighbor_address: "100.11.34.12"
+ address_family:
+ - afi: "ipv4"
+ maximum_prefix: 45
+ nexthop_self: True
+ route_map:
+ - action: "export"
+ route_map: "map01"
+ - action: "import"
+ route_map: "map01"
+ weight: 50
+ state: rendered
+
+# Module Execution:
+
+# "rendered": [
+# "set protocols bgp 100 address-family ipv4-unicast redistribute static metric 50",
+# "set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast allowas-in number 4",
+# "set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast as-override",
+# "set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv4-unicast attribute-unchanged med",
+# "set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast default-originate route-map map01",
+# "set protocols bgp 100 neighbor 20.33.1.1/24 address-family ipv6-unicast distribute-list export 10",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast maximum-prefix 45",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast nexthop-self",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast route-map export map01",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast route-map import map01",
+# "set protocols bgp 100 neighbor 100.11.34.12 address-family ipv4-unicast weight 50"
+# ]
+
+
+"""
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.argspec.bgp_address_family.bgp_address_family import (
+ Bgp_address_familyArgs,
+)
+from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.config.bgp_address_family.bgp_address_family import (
+ Bgp_address_family,
+)
+
+
+def main():
+ """
+ Main entry point for module execution
+
+ :returns: the result form module invocation
+ """
+ module = AnsibleModule(
+ argument_spec=Bgp_address_familyArgs.argument_spec,
+ mutually_exclusive=[],
+ required_if=[],
+ supports_check_mode=False,
+ )
+
+ result = Bgp_address_family(module).execute_module()
+ module.exit_json(**result)
+
+
+if __name__ == "__main__":
+ main()