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 be762a071d4..d617c8314ee 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 @@ -236,6 +236,7 @@ router bgp 65101 network 172.16.0.0/12 network 192.168.0.0/16 route-map RM-FOO-MATCH redistribute connected rcf Address_Family_IPV4_Connected() + redistribute dynamic route-map Address_Family_IPV4_Dynamic_RM redistribute static rcf Address_Family_IPV4_Static() ! address-family ipv6 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 d8a209ddaf8..dc14d26b5a8 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 @@ -105,6 +105,7 @@ router bgp 65101 network 172.16.0.0/12 network 192.168.0.0/16 route-map RM-FOO-MATCH redistribute connected rcf Address_Family_IPV4_Connected() + redistribute dynamic route-map Address_Family_IPV4_Dynamic_RM redistribute static rcf Address_Family_IPV4_Static() ! address-family ipv6 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 bda2db70c76..086a3e0c8d9 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 @@ -106,6 +106,8 @@ router_bgp: rcf: Address_Family_IPV4_Connected() - source_protocol: static rcf: Address_Family_IPV4_Static() + - source_protocol: dynamic + route_map: Address_Family_IPV4_Dynamic_RM address_family_ipv6: networks: - prefix: 2001:db8:100::/40 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 2e651135004..4d9f7eaf7be 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 @@ -339,8 +339,9 @@ | [          route_map](## "router_bgp.address_family_ipv4.neighbors.[].default_originate.route_map") | String | | | | | | [    redistribute_routes](## "router_bgp.address_family_ipv4.redistribute_routes") | List, items: Dictionary | | | | | | [      - source_protocol](## "router_bgp.address_family_ipv4.redistribute_routes.[].source_protocol") | String | Required, Unique | | | | + | [        route_map](## "router_bgp.address_family_ipv4.redistribute_routes.[].route_map") | String | | | | | | [        include_leaked](## "router_bgp.address_family_ipv4.redistribute_routes.[].include_leaked") | Boolean | | | | | - | [        rcf](## "router_bgp.address_family_ipv4.redistribute_routes.[].rcf") | String | | | | RCF function name with parenthesis.
Example: MyFunction(myarg). | + | [        rcf](## "router_bgp.address_family_ipv4.redistribute_routes.[].rcf") | String | | | | RCF function name with parenthesis.
Example: MyFunction(myarg).
`route_map` and `rcf` are mutually exclusive. `route_map` takes precedence.
Only used if `source_protocol` is one of `connected`, `static`, `isis`, `user`, `dynamic`. | | [  address_family_ipv4_multicast](## "router_bgp.address_family_ipv4_multicast") | Dictionary | | | | | | [    peer_groups](## "router_bgp.address_family_ipv4_multicast.peer_groups") | List, items: Dictionary | | | | | | [      - name](## "router_bgp.address_family_ipv4_multicast.peer_groups.[].name") | String | Required, Unique | | | Peer-group name. | @@ -392,7 +393,7 @@ | [      - source_protocol](## "router_bgp.address_family_ipv6.redistribute_routes.[].source_protocol") | String | Required, Unique | | | | | [        route_map](## "router_bgp.address_family_ipv6.redistribute_routes.[].route_map") | String | | | | | | [        include_leaked](## "router_bgp.address_family_ipv6.redistribute_routes.[].include_leaked") | Boolean | | | | | - | [        rcf](## "router_bgp.address_family_ipv6.redistribute_routes.[].rcf") | String | | | | RCF function name with parenthesis.
Example: MyFunction(myarg). | + | [        rcf](## "router_bgp.address_family_ipv6.redistribute_routes.[].rcf") | String | | | | RCF function name with parenthesis.
Example: MyFunction(myarg).
`route_map` and `rcf` are mutually exclusive. `route_map` takes precedence.
Only used if `source_protocol` is one of `connected`, `static`, `isis`, `user`, `dynamic`. | | [  address_family_ipv6_multicast](## "router_bgp.address_family_ipv6_multicast") | Dictionary | | | | | | [    bgp](## "router_bgp.address_family_ipv6_multicast.bgp") | Dictionary | | | | | | [      missing_policy](## "router_bgp.address_family_ipv6_multicast.bgp.missing_policy") | Dictionary | | | | | @@ -1399,10 +1400,13 @@ route_map: redistribute_routes: - source_protocol: + route_map: include_leaked: # RCF function name with parenthesis. # Example: MyFunction(myarg). + # `route_map` and `rcf` are mutually exclusive. `route_map` takes precedence. + # Only used if `source_protocol` is one of `connected`, `static`, `isis`, `user`, `dynamic`. rcf: address_family_ipv4_multicast: peer_groups: @@ -1512,6 +1516,8 @@ # RCF function name with parenthesis. # Example: MyFunction(myarg). + # `route_map` and `rcf` are mutually exclusive. `route_map` takes precedence. + # Only used if `source_protocol` is one of `connected`, `static`, `isis`, `user`, `dynamic`. rcf: address_family_ipv6_multicast: bgp: 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 b33a0cb8df0..e7f3ca2c9b7 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 @@ -18767,13 +18767,17 @@ "type": "string", "title": "Source Protocol" }, + "route_map": { + "type": "string", + "title": "Route Map" + }, "include_leaked": { "type": "boolean", "title": "Include Leaked" }, "rcf": { "type": "string", - "description": "RCF function name with parenthesis.\nExample: MyFunction(myarg).", + "description": "RCF function name with parenthesis.\nExample: MyFunction(myarg).\n`route_map` and `rcf` are mutually exclusive. `route_map` takes precedence.\nOnly used if `source_protocol` is one of `connected`, `static`, `isis`, `user`, `dynamic`.", "title": "RCF" } }, @@ -19133,7 +19137,7 @@ }, "rcf": { "type": "string", - "description": "RCF function name with parenthesis.\nExample: MyFunction(myarg).", + "description": "RCF function name with parenthesis.\nExample: MyFunction(myarg).\n`route_map` and `rcf` are mutually exclusive. `route_map` takes precedence.\nOnly used if `source_protocol` is one of `connected`, `static`, `isis`, `user`, `dynamic`.", "title": "RCF" } }, 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 dc525ac7b80..a0c964bf7db 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 @@ -11174,13 +11174,21 @@ keys: keys: source_protocol: type: str + route_map: + type: str include_leaked: type: bool rcf: type: str description: 'RCF function name with parenthesis. - Example: MyFunction(myarg).' + Example: MyFunction(myarg). + + `route_map` and `rcf` are mutually exclusive. `route_map` takes + precedence. + + Only used if `source_protocol` is one of `connected`, `static`, + `isis`, `user`, `dynamic`.' address_family_ipv4_multicast: type: dict keys: @@ -11373,7 +11381,13 @@ keys: type: str description: 'RCF function name with parenthesis. - Example: MyFunction(myarg).' + Example: MyFunction(myarg). + + `route_map` and `rcf` are mutually exclusive. `route_map` takes + precedence. + + Only used if `source_protocol` is one of `connected`, `static`, + `isis`, `user`, `dynamic`.' address_family_ipv6_multicast: type: dict keys: 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 79dfd6f0b6e..24e2342816b 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 @@ -1244,6 +1244,8 @@ keys: keys: source_protocol: type: str + route_map: + type: str include_leaked: type: bool rcf: @@ -1251,6 +1253,8 @@ keys: description: |- RCF function name with parenthesis. Example: MyFunction(myarg). + `route_map` and `rcf` are mutually exclusive. `route_map` takes precedence. + Only used if `source_protocol` is one of `connected`, `static`, `isis`, `user`, `dynamic`. address_family_ipv4_multicast: type: dict keys: @@ -1444,6 +1448,8 @@ keys: description: |- RCF function name with parenthesis. Example: MyFunction(myarg). + `route_map` and `rcf` are mutually exclusive. `route_map` takes precedence. + Only used if `source_protocol` is one of `connected`, `static`, `isis`, `user`, `dynamic`. address_family_ipv6_multicast: type: dict keys: 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 00dba7f45be..8c3f10feb3a 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 @@ -847,7 +847,9 @@ router bgp {{ router_bgp.as }} {% elif redistribute_route.include_leaked is arista.avd.defined %} {% set redistribute_route_cli = redistribute_route_cli ~ " include leaked" %} {% endif %} -{% if redistribute_route.source_protocol in ["connected", "static", "isis", "user", "dynamic"] %} +{% if redistribute_route.route_map is arista.avd.defined %} +{% set redistribute_route_cli = redistribute_route_cli ~ " route-map " ~ redistribute_route.route_map %} +{% elif redistribute_route.source_protocol in ["connected", "static", "isis", "user", "dynamic"] %} {% if redistribute_route.rcf is arista.avd.defined %} {% set redistribute_route_cli = redistribute_route_cli ~ " rcf " ~ redistribute_route.rcf %} {% endif %} 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 a569825c5a7..0324cd048b8 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 @@ -35446,13 +35446,17 @@ "type": "string", "title": "Source Protocol" }, + "route_map": { + "type": "string", + "title": "Route Map" + }, "include_leaked": { "type": "boolean", "title": "Include Leaked" }, "rcf": { "type": "string", - "description": "RCF function name with parenthesis.\nExample: MyFunction(myarg).", + "description": "RCF function name with parenthesis.\nExample: MyFunction(myarg).\n`route_map` and `rcf` are mutually exclusive. `route_map` takes precedence.\nOnly used if `source_protocol` is one of `connected`, `static`, `isis`, `user`, `dynamic`.", "title": "RCF" } }, @@ -35812,7 +35816,7 @@ }, "rcf": { "type": "string", - "description": "RCF function name with parenthesis.\nExample: MyFunction(myarg).", + "description": "RCF function name with parenthesis.\nExample: MyFunction(myarg).\n`route_map` and `rcf` are mutually exclusive. `route_map` takes precedence.\nOnly used if `source_protocol` is one of `connected`, `static`, `isis`, `user`, `dynamic`.", "title": "RCF" } },