Skip to content
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ module "iosxr" {
| [iosxr_domain_vrf.domain_vrf](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/domain_vrf) | resource |
| [iosxr_esi_set.esi_set](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/esi_set) | resource |
| [iosxr_evpn.evpn](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/evpn) | resource |
| [iosxr_evpn_interface.evpn_interface](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/evpn_interface) | resource |
| [iosxr_evpn_evi.evpn_evi](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/evpn_evi) | resource |
| [iosxr_evpn_group.evpn_group](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/evpn_group) | resource |
| [iosxr_extcommunity_cost_set.extcommunity_cost_set](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/extcommunity_cost_set) | resource |
Expand Down
35 changes: 35 additions & 0 deletions iosxr_evpn_interface.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
locals {
device_evpn_interfaces = flatten([
for device in local.devices : [
for evpn_interface in try(local.device_config[device.name].evpn_interface, []) : {
device_name = device.name
interface_name = evpn_interface.interface_name
key = "${device.name}-${evpn_interface.interface_name}"

# Required attribute (no default fallback needed for required fields)
ethernet_segment_identifier_type_zero_esi = evpn_interface.ethernet_segment_identifier_type_zero_esi

# Optional attributes with defaults support
core_isolation_group = try(evpn_interface.core_isolation_group, local.defaults.iosxr.configuration.evpn_interface.core_isolation_group, null)
ethernet_segment_load_balancing_mode_all_active = try(evpn_interface.ethernet_segment_load_balancing_mode_all_active, local.defaults.iosxr.configuration.evpn_interface.ethernet_segment_load_balancing_mode_all_active, null)
ethernet_segment_load_balancing_mode_port_active = try(evpn_interface.ethernet_segment_load_balancing_mode_port_active, local.defaults.iosxr.configuration.evpn_interface.ethernet_segment_load_balancing_mode_port_active, null)
ethernet_segment_load_balancing_mode_single_active = try(evpn_interface.ethernet_segment_load_balancing_mode_single_active, local.defaults.iosxr.configuration.evpn_interface.ethernet_segment_load_balancing_mode_single_active, null)
ethernet_segment_load_balancing_mode_single_flow_active = try(evpn_interface.ethernet_segment_load_balancing_mode_single_flow_active, local.defaults.iosxr.configuration.evpn_interface.ethernet_segment_load_balancing_mode_single_flow_active, null)
}
]
])
}

resource "iosxr_evpn_interface" "evpn_interface" {
for_each = { for evpn_interface in local.device_evpn_interfaces : evpn_interface.key => evpn_interface }

device = each.value.device_name
interface_name = each.value.interface_name
ethernet_segment_identifier_type_zero_esi = each.value.ethernet_segment_identifier_type_zero_esi

core_isolation_group = each.value.core_isolation_group
ethernet_segment_load_balancing_mode_all_active = each.value.ethernet_segment_load_balancing_mode_all_active
ethernet_segment_load_balancing_mode_port_active = each.value.ethernet_segment_load_balancing_mode_port_active
ethernet_segment_load_balancing_mode_single_active = each.value.ethernet_segment_load_balancing_mode_single_active
ethernet_segment_load_balancing_mode_single_flow_active = each.value.ethernet_segment_load_balancing_mode_single_flow_active
}
Loading