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"
}
},