From 76713ba8328e3384095862c47c01def5d2510ef7 Mon Sep 17 00:00:00 2001 From: laxmikantchintakindi <159624484+laxmikantchintakindi@users.noreply.github.com> Date: Fri, 7 Jun 2024 16:30:57 +0530 Subject: [PATCH] Feat(eos_cli_config_gen): Add support for 'no bgp redistribute-internal' (#4033) --- .../documentation/devices/router-bgp-base.md | 4 ++ .../router-bgp-vrf-address-families.md | 3 + .../intended/configs/router-bgp-base.cfg | 3 + .../router-bgp-vrf-address-families.cfg | 3 + .../inventory/host_vars/router-bgp-base.yml | 5 ++ .../router-bgp-vrf-address-families.yml | 4 ++ .../docs/tables/router-bgp.md | 30 ++++++++++ .../eos_cli_config_gen.jsonschema.json | 60 +++++++++++++++++++ .../schemas/eos_cli_config_gen.schema.yml | 33 ++++++++++ .../schema_fragments/router_bgp.schema.yml | 27 +++++++++ .../templates/documentation/router-bgp.j2 | 3 + .../templates/eos/router-bgp.j2 | 30 ++++++++++ .../schemas/eos_designs.jsonschema.json | 60 +++++++++++++++++++ 13 files changed, 265 insertions(+) diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-base.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-base.md index e5af150ef9e..f5868f84fbb 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-base.md +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-base.md @@ -58,6 +58,7 @@ ASN Notation: asplain | update wait-install | | no bgp default ipv4-unicast | | no bgp default ipv4-unicast transport ipv6 | +| no bgp redistribute-internal | | distance bgp 20 200 200 | | maximum-paths 32 ecmp 32 | | bgp route-reflector preserve-attributes always | @@ -218,6 +219,7 @@ router bgp 65101 neighbor 192.0.3.9 peer group TEST neighbor 192.0.3.9 remote-as 65438 no neighbor 192.0.3.9 bfd + no bgp redistribute-internal aggregate-address 1.1.1.0/24 advertise-only aggregate-address 1.12.1.0/24 as-set advertise-map ADV-MAP supress-map SUP-MAP summary-only attribute-map RM-ATTRIBUTE match-map RM-MATCH advertise-only aggregate-address 2.2.1.0/24 @@ -240,6 +242,7 @@ router bgp 65101 network 10.0.0.0/8 network 172.16.0.0/12 network 192.168.0.0/16 route-map RM-FOO-MATCH + no bgp redistribute-internal redistribute bgp leaked redistribute connected include leaked rcf Address_Family_IPV4_Connected() redistribute dynamic route-map Address_Family_IPV4_Dynamic_RM @@ -257,6 +260,7 @@ router bgp 65101 neighbor 2001:db8::2 rcf out Address_Family_IPV6_Out() network 2001:db8:100::/40 network 2001:db8:200::/40 route-map RM-BAR-MATCH + bgp redistribute-internal redistribute bgp leaked route-map RM-REDISTRIBUTE-BGP redistribute connected rcf Address_Family_IPV6_Connected() redistribute ospfv3 match external include leaked diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-vrf-address-families.md b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-vrf-address-families.md index 899c35026da..a946f78b25b 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-vrf-address-families.md +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/documentation/devices/router-bgp-vrf-address-families.md @@ -86,6 +86,7 @@ router bgp 65001 redistribute ospfv3 match nssa-external 2 ! vrf VRF01 + no bgp redistribute-internal ! address-family flow-spec ipv4 bgp missing-policy direction in action permit @@ -107,6 +108,7 @@ router bgp 65001 neighbor 1.2.3.4 route-map FOO in neighbor 1.2.3.4 route-map BAR out network 2.3.4.0/24 route-map BARFOO + no bgp redistribute-internal redistribute connected rcf VRF_AFIPV4_RCF_CONNECTED_1() redistribute ospf match external redistribute ospf match nssa-external 1 @@ -139,6 +141,7 @@ router bgp 65001 neighbor aa::2 rcf in VRF_AFIPV6_RCF_IN() neighbor aa::2 rcf out VRF_AFIPV6_RCF_OUT() network aa::/64 + no bgp redistribute-internal redistribute connected rcf VRF_AFIPV6_RCF_CONNECTED() redistribute isis include leaked redistribute ospfv3 match external diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-base.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-base.cfg index 8adef52a489..ff39bcc46ef 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-base.cfg +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-base.cfg @@ -87,6 +87,7 @@ router bgp 65101 neighbor 192.0.3.9 peer group TEST neighbor 192.0.3.9 remote-as 65438 no neighbor 192.0.3.9 bfd + no bgp redistribute-internal aggregate-address 1.1.1.0/24 advertise-only aggregate-address 1.12.1.0/24 as-set advertise-map ADV-MAP supress-map SUP-MAP summary-only attribute-map RM-ATTRIBUTE match-map RM-MATCH advertise-only aggregate-address 2.2.1.0/24 @@ -109,6 +110,7 @@ router bgp 65101 network 10.0.0.0/8 network 172.16.0.0/12 network 192.168.0.0/16 route-map RM-FOO-MATCH + no bgp redistribute-internal redistribute bgp leaked redistribute connected include leaked rcf Address_Family_IPV4_Connected() redistribute dynamic route-map Address_Family_IPV4_Dynamic_RM @@ -126,6 +128,7 @@ router bgp 65101 neighbor 2001:db8::2 rcf out Address_Family_IPV6_Out() network 2001:db8:100::/40 network 2001:db8:200::/40 route-map RM-BAR-MATCH + bgp redistribute-internal redistribute bgp leaked route-map RM-REDISTRIBUTE-BGP redistribute connected rcf Address_Family_IPV6_Connected() redistribute ospfv3 match external include leaked diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-vrf-address-families.cfg b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-vrf-address-families.cfg index 3e6970776f1..5c350a203bb 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-vrf-address-families.cfg +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/intended/configs/router-bgp-vrf-address-families.cfg @@ -39,6 +39,7 @@ router bgp 65001 redistribute ospfv3 match nssa-external 2 ! vrf VRF01 + no bgp redistribute-internal ! address-family flow-spec ipv4 bgp missing-policy direction in action permit @@ -60,6 +61,7 @@ router bgp 65001 neighbor 1.2.3.4 route-map FOO in neighbor 1.2.3.4 route-map BAR out network 2.3.4.0/24 route-map BARFOO + no bgp redistribute-internal redistribute connected rcf VRF_AFIPV4_RCF_CONNECTED_1() redistribute ospf match external redistribute ospf match nssa-external 1 @@ -92,6 +94,7 @@ router bgp 65001 neighbor aa::2 rcf in VRF_AFIPV6_RCF_IN() neighbor aa::2 rcf out VRF_AFIPV6_RCF_OUT() network aa::/64 + no bgp redistribute-internal redistribute connected rcf VRF_AFIPV6_RCF_CONNECTED() redistribute isis include leaked redistribute ospfv3 match external diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-base.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-base.yml index f021a8e55b6..785e8c74e70 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-base.yml +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-base.yml @@ -28,6 +28,7 @@ router_bgp: always: true bestpath: d_path: true + redistribute_internal: false listen_ranges: # should render - prefix: 10.10.10.0/24 @@ -98,6 +99,8 @@ router_bgp: - prefix: 172.16.0.0/12 - prefix: 192.168.0.0/16 route_map: RM-FOO-MATCH + bgp: + redistribute_internal: false peer_groups: - name: foo prefix_list_in: PL-BAR-v4-IN @@ -136,6 +139,8 @@ router_bgp: - prefix: 2001:db8:100::/40 - prefix: 2001:db8:200::/40 route_map: RM-BAR-MATCH + bgp: + redistribute_internal: true peer_groups: - name: baz prefix_list_in: PL-BAR-v6-IN diff --git a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-vrf-address-families.yml b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-vrf-address-families.yml index 7931694c36a..f8866197d5f 100644 --- a/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-vrf-address-families.yml +++ b/ansible_collections/arista/avd/molecule/eos_cli_config_gen/inventory/host_vars/router-bgp-vrf-address-families.yml @@ -40,6 +40,8 @@ router_bgp: activate: false vrfs: - name: VRF01 + bgp: + redistribute_internal: false address_family_ipv4: bgp: missing_policy: @@ -50,6 +52,7 @@ router_bgp: receive: true send: ecmp_limit: 4 + redistribute_internal: false neighbors: - ip_address: 1.2.3.4 activate: true @@ -79,6 +82,7 @@ router_bgp: receive: true send: any: true + redistribute_internal: false neighbors: - ip_address: aa::1 activate: true diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-bgp.md b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-bgp.md index f436f7ccd87..d84744ee8df 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-bgp.md +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/docs/tables/router-bgp.md @@ -41,6 +41,7 @@ | [      always](## "router_bgp.bgp.route_reflector_preserve_attributes.always") | Boolean | | | | | | [    bestpath](## "router_bgp.bgp.bestpath") | Dictionary | | | | | | [      d_path](## "router_bgp.bgp.bestpath.d_path") | Boolean | | | | | + | [    redistribute_internal](## "router_bgp.bgp.redistribute_internal") | Boolean | | | | Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. | | [  listen_ranges](## "router_bgp.listen_ranges") | List, items: Dictionary | | | | Improved "listen_ranges" data model to support multiple listen ranges and additional filter capabilities.
| | [    - prefix](## "router_bgp.listen_ranges.[].prefix") | String | | | | IPv4 prefix "A.B.C.D/E" or IPv6 prefix "A:B:C:D:E:F:G:H/I". | | [      peer_id_include_router_id](## "router_bgp.listen_ranges.[].peer_id_include_router_id") | Boolean | | | | Include router ID as part of peer filter. | @@ -319,6 +320,8 @@ | [    networks](## "router_bgp.address_family_ipv4.networks") | List, items: Dictionary | | | | | | [      - prefix](## "router_bgp.address_family_ipv4.networks.[].prefix") | String | Required, Unique | | | IPv4 prefix "A.B.C.D/E" or IPv6 prefix "A:B:C:D:E:F:G:H/I". | | [        route_map](## "router_bgp.address_family_ipv4.networks.[].route_map") | String | | | | Route-map name. | + | [    bgp](## "router_bgp.address_family_ipv4.bgp") | Dictionary | | | | | + | [      redistribute_internal](## "router_bgp.address_family_ipv4.bgp.redistribute_internal") | Boolean | | | | Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. | | [    peer_groups](## "router_bgp.address_family_ipv4.peer_groups") | List, items: Dictionary | | | | | | [      - name](## "router_bgp.address_family_ipv4.peer_groups.[].name") | String | Required, Unique | | | Peer-group name. | | [        activate](## "router_bgp.address_family_ipv4.peer_groups.[].activate") | Boolean | | | | | @@ -386,6 +389,8 @@ | [    networks](## "router_bgp.address_family_ipv6.networks") | List, items: Dictionary | | | | | | [      - prefix](## "router_bgp.address_family_ipv6.networks.[].prefix") | String | Required, Unique | | | IPv4 prefix "A.B.C.D/E" or IPv6 prefix "A:B:C:D:E:F:G:H/I". | | [        route_map](## "router_bgp.address_family_ipv6.networks.[].route_map") | String | | | | Route-map name. | + | [    bgp](## "router_bgp.address_family_ipv6.bgp") | Dictionary | | | | | + | [      redistribute_internal](## "router_bgp.address_family_ipv6.bgp.redistribute_internal") | Boolean | | | | Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. | | [    peer_groups](## "router_bgp.address_family_ipv6.peer_groups") | List, items: Dictionary | | | | | | [      - name](## "router_bgp.address_family_ipv6.peer_groups.[].name") | String | Required, Unique | | | Peer-group name. | | [        activate](## "router_bgp.address_family_ipv6.peer_groups.[].activate") | Boolean | | | | | @@ -567,6 +572,8 @@ | [      source_interface](## "router_bgp.address_family_vpn_ipv6.neighbor_default_encapsulation_mpls_next_hop_self.source_interface") | String | | | | | | [  vrfs](## "router_bgp.vrfs") | List, items: Dictionary | | | | | | [    - name](## "router_bgp.vrfs.[].name") | String | Required, Unique | | | VRF name. | + | [      bgp](## "router_bgp.vrfs.[].bgp") | Dictionary | | | | | + | [        redistribute_internal](## "router_bgp.vrfs.[].bgp.redistribute_internal") | Boolean | | | | Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. | | [      rd](## "router_bgp.vrfs.[].rd") | String | | | | Route distinguisher. | | [      evpn_multicast](## "router_bgp.vrfs.[].evpn_multicast") | Boolean | | | | | | [      evpn_multicast_address_family](## "router_bgp.vrfs.[].evpn_multicast_address_family") | Dictionary | | | | Enable per-AF EVPN multicast settings. | @@ -685,6 +692,7 @@ | [              ecmp](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send.ecmp") | Boolean | | | | | | [              ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send.ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send. | | [              limit](## "router_bgp.vrfs.[].address_family_ipv4.bgp.additional_paths.send.limit") | Integer | | | Min: 2
Max: 64 | Amount of paths to send. | + | [          redistribute_internal](## "router_bgp.vrfs.[].address_family_ipv4.bgp.redistribute_internal") | Boolean | | | | Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. | | [        neighbors](## "router_bgp.vrfs.[].address_family_ipv4.neighbors") | List, items: Dictionary | | | | | | [          - ip_address](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].ip_address") | String | Required, Unique | | | | | [            activate](## "router_bgp.vrfs.[].address_family_ipv4.neighbors.[].activate") | Boolean | | | | | @@ -722,6 +730,7 @@ | [              ecmp](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send.ecmp") | Boolean | | | | | | [              ecmp_limit](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send.ecmp_limit") | Integer | | | Min: 2
Max: 64 | Amount of ECMP paths to send. | | [              limit](## "router_bgp.vrfs.[].address_family_ipv6.bgp.additional_paths.send.limit") | Integer | | | Min: 2
Max: 64 | Amount of paths to send. | + | [          redistribute_internal](## "router_bgp.vrfs.[].address_family_ipv6.bgp.redistribute_internal") | Boolean | | | | Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. | | [        neighbors](## "router_bgp.vrfs.[].address_family_ipv6.neighbors") | List, items: Dictionary | | | | | | [          - ip_address](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].ip_address") | String | Required, Unique | | | | | [            activate](## "router_bgp.vrfs.[].address_family_ipv6.neighbors.[].activate") | Boolean | | | | | @@ -894,6 +903,9 @@ bestpath: d_path: + # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. + redistribute_internal: + # Improved "listen_ranges" data model to support multiple listen ranges and additional filter capabilities. listen_ranges: @@ -1429,6 +1441,10 @@ # Route-map name. route_map: + bgp: + + # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. + redistribute_internal: peer_groups: # Peer-group name. @@ -1575,6 +1591,10 @@ # Route-map name. route_map: + bgp: + + # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. + redistribute_internal: peer_groups: # Peer-group name. @@ -1888,6 +1908,10 @@ # VRF name. - name: + bgp: + + # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. + redistribute_internal: # Route distinguisher. rd: @@ -2134,6 +2158,9 @@ # Amount of paths to send. limit: + + # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. + redistribute_internal: neighbors: - ip_address: activate: @@ -2199,6 +2226,9 @@ # Amount of paths to send. limit: + + # Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. + redistribute_internal: neighbors: - ip_address: activate: diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.jsonschema.json b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.jsonschema.json index ed0e94ac0b7..3b89d8f53f0 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.jsonschema.json +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.jsonschema.json @@ -17757,6 +17757,11 @@ "^_.+$": {} }, "title": "Bestpath" + }, + "redistribute_internal": { + "type": "boolean", + "description": "Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true.", + "title": "Redistribute Internal" } }, "additionalProperties": false, @@ -19579,6 +19584,21 @@ }, "title": "Networks" }, + "bgp": { + "type": "object", + "properties": { + "redistribute_internal": { + "type": "boolean", + "description": "Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true.", + "title": "Redistribute Internal" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP" + }, "peer_groups": { "type": "array", "items": { @@ -20058,6 +20078,21 @@ }, "title": "Networks" }, + "bgp": { + "type": "object", + "properties": { + "redistribute_internal": { + "type": "boolean", + "description": "Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true.", + "title": "Redistribute Internal" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP" + }, "peer_groups": { "type": "array", "items": { @@ -21389,6 +21424,21 @@ "description": "VRF name.", "title": "Name" }, + "bgp": { + "type": "object", + "properties": { + "redistribute_internal": { + "type": "boolean", + "description": "Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true.", + "title": "Redistribute Internal" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP" + }, "rd": { "type": "string", "description": "Route distinguisher.", @@ -22124,6 +22174,11 @@ "^_.+$": {} }, "title": "Additional Paths" + }, + "redistribute_internal": { + "type": "boolean", + "description": "Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true.", + "title": "Redistribute Internal" } }, "additionalProperties": false, @@ -22397,6 +22452,11 @@ "^_.+$": {} }, "title": "Additional Paths" + }, + "redistribute_internal": { + "type": "boolean", + "description": "Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true.", + "title": "Redistribute Internal" } }, "additionalProperties": false, diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.schema.yml index e388045d8d4..625969244f4 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/eos_cli_config_gen.schema.yml @@ -10638,6 +10638,10 @@ keys: keys: d_path: type: bool + redistribute_internal: + type: bool + description: Allow redistribution of iBGP routes into an Interior Gateway + Protocol (IGP). EOS default is true. listen_ranges: type: list description: 'Improved "listen_ranges" data model to support multiple listen @@ -11740,6 +11744,13 @@ keys: route_map: description: Route-map name. type: str + bgp: + type: dict + keys: + redistribute_internal: + type: bool + description: Allow redistribution of iBGP routes into an Interior + Gateway Protocol (IGP). EOS default is true. peer_groups: type: list primary_key: name @@ -12026,6 +12037,13 @@ keys: route_map: description: Route-map name. type: str + bgp: + type: dict + keys: + redistribute_internal: + type: bool + description: Allow redistribution of iBGP routes into an Interior + Gateway Protocol (IGP). EOS default is true. peer_groups: type: list primary_key: name @@ -12744,6 +12762,13 @@ keys: description: VRF name. convert_types: - int + bgp: + type: dict + keys: + redistribute_internal: + type: bool + description: Allow redistribution of iBGP routes into an Interior + Gateway Protocol (IGP). EOS default is true. rd: type: str description: Route distinguisher. @@ -13249,6 +13274,10 @@ keys: - str min: 2 max: 64 + redistribute_internal: + type: bool + description: Allow redistribution of iBGP routes into an Interior + Gateway Protocol (IGP). EOS default is true. neighbors: type: list primary_key: ip_address @@ -13411,6 +13440,10 @@ keys: - str min: 2 max: 64 + redistribute_internal: + type: bool + description: Allow redistribution of iBGP routes into an Interior + Gateway Protocol (IGP). EOS default is true. neighbors: type: list primary_key: ip_address diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_bgp.schema.yml b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_bgp.schema.yml index ff75a836d0b..3ec015ef64d 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_bgp.schema.yml +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/schemas/schema_fragments/router_bgp.schema.yml @@ -150,6 +150,9 @@ keys: keys: d_path: type: bool + redistribute_internal: + type: bool + description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. listen_ranges: type: list description: | @@ -1210,6 +1213,12 @@ keys: route_map: description: Route-map name. type: str + bgp: + type: dict + keys: + redistribute_internal: + type: bool + description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. peer_groups: type: list primary_key: name @@ -1490,6 +1499,12 @@ keys: route_map: description: Route-map name. type: str + bgp: + type: dict + keys: + redistribute_internal: + type: bool + description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. peer_groups: type: list primary_key: name @@ -2207,6 +2222,12 @@ keys: description: VRF name. convert_types: - int + bgp: + type: dict + keys: + redistribute_internal: + type: bool + description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. rd: type: str description: Route distinguisher. @@ -2674,6 +2695,9 @@ keys: - str min: 2 max: 64 + redistribute_internal: + type: bool + description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. neighbors: type: list primary_key: ip_address @@ -2829,6 +2853,9 @@ keys: - str min: 2 max: 64 + redistribute_internal: + type: bool + description: Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true. neighbors: type: list primary_key: ip_address diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/templates/documentation/router-bgp.j2 b/ansible_collections/arista/avd/roles/eos_cli_config_gen/templates/documentation/router-bgp.j2 index 55416453c06..005bf4f554f 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/templates/documentation/router-bgp.j2 +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/templates/documentation/router-bgp.j2 @@ -65,6 +65,9 @@ ASN Notation: {{ router_bgp.as_notation | arista.avd.default('asplain') }} {% elif router_bgp.bgp.default.ipv4_unicast_transport_ipv6 is arista.avd.defined(false) %} | no bgp default ipv4-unicast transport ipv6 | {% endif %} +{% if router_bgp.bgp.redistribute_internal is arista.avd.defined(false) %} +| no bgp redistribute-internal | +{% endif %} {% if router_bgp.distance.external_routes is arista.avd.defined %} {% set distance_cli = "distance bgp " ~ router_bgp.distance.external_routes %} {% if router_bgp.distance.internal_routes is arista.avd.defined and router_bgp.distance.local_routes is arista.avd.defined %} diff --git a/ansible_collections/arista/avd/roles/eos_cli_config_gen/templates/eos/router-bgp.j2 b/ansible_collections/arista/avd/roles/eos_cli_config_gen/templates/eos/router-bgp.j2 index fa4e06baa9b..d3fabe4d51e 100644 --- a/ansible_collections/arista/avd/roles/eos_cli_config_gen/templates/eos/router-bgp.j2 +++ b/ansible_collections/arista/avd/roles/eos_cli_config_gen/templates/eos/router-bgp.j2 @@ -390,6 +390,11 @@ router bgp {{ router_bgp.as }} {{ link_bandwidth_cli }} {% endif %} {% endfor %} +{% if router_bgp.bgp.redistribute_internal is arista.avd.defined(true) %} + bgp redistribute-internal +{% elif router_bgp.bgp.redistribute_internal is arista.avd.defined(false) %} + no bgp redistribute-internal +{% endif %} {% for aggregate_address in router_bgp.aggregate_addresses | arista.avd.natural_sort('prefix') %} {% set aggregate_address_cli = "aggregate-address " ~ aggregate_address.prefix %} {% if aggregate_address.as_set is arista.avd.defined(true) %} @@ -861,6 +866,11 @@ router bgp {{ router_bgp.as }} network {{ network.prefix }} {% endif %} {% endfor %} +{% if router_bgp.address_family_ipv4.bgp.redistribute_internal is arista.avd.defined(true) %} + bgp redistribute-internal +{% elif router_bgp.address_family_ipv4.bgp.redistribute_internal is arista.avd.defined(false) %} + no bgp redistribute-internal +{% endif %} {% for redistribute_route in router_bgp.address_family_ipv4.redistribute_routes | arista.avd.natural_sort('source_protocol') %} {% if redistribute_route.source_protocol is arista.avd.defined %} {% set redistribute_route_cli = "redistribute " ~ redistribute_route.source_protocol %} @@ -1027,6 +1037,11 @@ router bgp {{ router_bgp.as }} network {{ network.prefix }} {% endif %} {% endfor %} +{% if router_bgp.address_family_ipv6.bgp.redistribute_internal is arista.avd.defined(true) %} + bgp redistribute-internal +{% elif router_bgp.address_family_ipv6.bgp.redistribute_internal is arista.avd.defined(false) %} + no bgp redistribute-internal +{% endif %} {% for redistribute_route in router_bgp.address_family_ipv6.redistribute_routes | arista.avd.natural_sort('source_protocol') %} {% if redistribute_route.source_protocol is arista.avd.defined %} {% set redistribute_route_cli = "redistribute " ~ redistribute_route.source_protocol %} @@ -1600,6 +1615,11 @@ router bgp {{ router_bgp.as }} network {{ network.prefix }} {% endif %} {% endfor %} +{% if vrf.bgp.redistribute_internal is arista.avd.defined(true) %} + bgp redistribute-internal +{% elif vrf.bgp.redistribute_internal is arista.avd.defined(false) %} + no bgp redistribute-internal +{% endif %} {% for aggregate_address in vrf.aggregate_addresses | arista.avd.natural_sort('prefix') %} {% set aggregate_address_cli = "aggregate-address " ~ aggregate_address.prefix %} {% if aggregate_address.as_set is arista.avd.defined(true) %} @@ -1766,6 +1786,11 @@ router bgp {{ router_bgp.as }} {% endif %} {{ network_cli }} {% endfor %} +{% if vrf.address_family_ipv4.bgp.redistribute_internal is arista.avd.defined(true) %} + bgp redistribute-internal +{% elif vrf.address_family_ipv4.bgp.redistribute_internal is arista.avd.defined(false) %} + no bgp redistribute-internal +{% endif %} {% for redistribute_route in vrf.address_family_ipv4.redistribute_routes | arista.avd.natural_sort('source_protocol') %} {% if redistribute_route.source_protocol is arista.avd.defined %} {% set redistribute_route_cli = "redistribute " ~ redistribute_route.source_protocol %} @@ -1900,6 +1925,11 @@ router bgp {{ router_bgp.as }} {% endif %} {{ network_cli }} {% endfor %} +{% if vrf.address_family_ipv6.bgp.redistribute_internal is arista.avd.defined(true) %} + bgp redistribute-internal +{% elif vrf.address_family_ipv6.bgp.redistribute_internal is arista.avd.defined(false) %} + no bgp redistribute-internal +{% endif %} {% for redistribute_route in vrf.address_family_ipv6.redistribute_routes | arista.avd.natural_sort('source_protocol') %} {% if redistribute_route.source_protocol is arista.avd.defined %} {% set redistribute_route_cli = "redistribute " ~ redistribute_route.source_protocol %} diff --git a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json index cea341de10a..6dc77d5441f 100644 --- a/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json +++ b/ansible_collections/arista/avd/roles/eos_designs/schemas/eos_designs.jsonschema.json @@ -34815,6 +34815,11 @@ "^_.+$": {} }, "title": "Bestpath" + }, + "redistribute_internal": { + "type": "boolean", + "description": "Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true.", + "title": "Redistribute Internal" } }, "additionalProperties": false, @@ -36637,6 +36642,21 @@ }, "title": "Networks" }, + "bgp": { + "type": "object", + "properties": { + "redistribute_internal": { + "type": "boolean", + "description": "Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true.", + "title": "Redistribute Internal" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP" + }, "peer_groups": { "type": "array", "items": { @@ -37116,6 +37136,21 @@ }, "title": "Networks" }, + "bgp": { + "type": "object", + "properties": { + "redistribute_internal": { + "type": "boolean", + "description": "Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true.", + "title": "Redistribute Internal" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP" + }, "peer_groups": { "type": "array", "items": { @@ -38447,6 +38482,21 @@ "description": "VRF name.", "title": "Name" }, + "bgp": { + "type": "object", + "properties": { + "redistribute_internal": { + "type": "boolean", + "description": "Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true.", + "title": "Redistribute Internal" + } + }, + "additionalProperties": false, + "patternProperties": { + "^_.+$": {} + }, + "title": "BGP" + }, "rd": { "type": "string", "description": "Route distinguisher.", @@ -39182,6 +39232,11 @@ "^_.+$": {} }, "title": "Additional Paths" + }, + "redistribute_internal": { + "type": "boolean", + "description": "Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true.", + "title": "Redistribute Internal" } }, "additionalProperties": false, @@ -39455,6 +39510,11 @@ "^_.+$": {} }, "title": "Additional Paths" + }, + "redistribute_internal": { + "type": "boolean", + "description": "Allow redistribution of iBGP routes into an Interior Gateway Protocol (IGP). EOS default is true.", + "title": "Redistribute Internal" } }, "additionalProperties": false,