diff options
author | GomathiselviS <gomathiselvi@gmail.com> | 2021-03-26 20:48:39 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-27 00:48:39 +0000 |
commit | 4f83f5cf80ca92bf91792a0cd4621744b4f1c37e (patch) | |
tree | 7e37f5cab203d5ab92022ffcadc8cc24c2eef6cb /plugins/modules | |
parent | c936f0c6d7138e23f4d8c14c4bb1c5727ab303fc (diff) | |
download | vyos.vyos-4f83f5cf80ca92bf91792a0cd4621744b4f1c37e.tar.gz vyos.vyos-4f83f5cf80ca92bf91792a0cd4621744b4f1c37e.zip |
Add vyos_bgp_address_family resource module. (#132)
Add vyos_bgp_address_family resource module.
Reviewed-by: https://github.com/apps/ansible-zuul
Diffstat (limited to 'plugins/modules')
-rw-r--r-- | plugins/modules/vyos_bgp_address_family.py | 1192 |
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() |