diff --git a/README.md b/README.md index 47ba185..1689a23 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,7 @@ module "iosxr" { | [iosxr_mpls_oam.mpls_oam](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/mpls_oam) | resource | | [iosxr_ntp.ntp](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/ntp) | resource | | [iosxr_router_ospf.router_ospf](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/router_ospf) | resource | +| [iosxr_router_ospf_vrf_area_interface.router_ospf_vrf_area_interface](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/router_ospf_vrf_area_interface) | resource | | [iosxr_router_static_ipv4_unicast.router_static_ipv4_unicast](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/router_static_ipv4_unicast) | resource | | [iosxr_segment_routing.segment_routing](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/segment_routing) | resource | | [iosxr_service_timestamps.service_timestamps](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/service_timestamps) | resource | diff --git a/iosxr_router_ospf_vrf_area_interface.tf b/iosxr_router_ospf_vrf_area_interface.tf new file mode 100644 index 0000000..b478ce5 --- /dev/null +++ b/iosxr_router_ospf_vrf_area_interface.tf @@ -0,0 +1,43 @@ +locals { + device_router_ospf_vrf_area_interface = flatten([ + for device in local.devices : [ + for process_name, process in try(local.device_config[device.name].router_ospf_processes, {}) : [ + for vrf_name, vrf in try(process.vrfs, {}) : [ + for area_id, area in try(vrf.areas, {}) : [ + for interface_name, interface in try(area.interfaces, {}) : { + device_name = device.name + process_name = process_name + vrf_name = vrf_name + area_id = area_id + interface_name = interface_name + key = "${device.name}-${process_name}-${vrf_name}-${area_id}-${replace(interface_name, "/", "_")}" + config = interface + } + ] + ] + ] + ] + if try(local.device_config[device.name].router_ospf_processes, null) != null + ]) +} + +resource "iosxr_router_ospf_vrf_area_interface" "router_ospf_vrf_area_interface" { + for_each = { for item in local.device_router_ospf_vrf_area_interface : item.key => item } + + device = each.value.device_name + process_name = each.value.process_name + vrf_name = each.value.vrf_name + area_id = each.value.area_id + interface_name = each.value.interface_name + + # Optional attributes with defaults fallback + network_broadcast = try(each.value.config.network_broadcast, local.defaults.iosxr.configuration.router_ospf_vrf_area_interface_network_broadcast, null) + network_non_broadcast = try(each.value.config.network_non_broadcast, local.defaults.iosxr.configuration.router_ospf_vrf_area_interface_network_non_broadcast, null) + network_point_to_point = try(each.value.config.network_point_to_point, local.defaults.iosxr.configuration.router_ospf_vrf_area_interface_network_point_to_point, null) + network_point_to_multipoint = try(each.value.config.network_point_to_multipoint, local.defaults.iosxr.configuration.router_ospf_vrf_area_interface_network_point_to_multipoint, null) + cost = try(each.value.config.cost, local.defaults.iosxr.configuration.router_ospf_vrf_area_interface_cost, null) + priority = try(each.value.config.priority, local.defaults.iosxr.configuration.router_ospf_vrf_area_interface_priority, null) + passive_enable = try(each.value.config.passive_enable, local.defaults.iosxr.configuration.router_ospf_vrf_area_interface_passive_enable, null) + passive_disable = try(each.value.config.passive_disable, local.defaults.iosxr.configuration.router_ospf_vrf_area_interface_passive_disable, null) + delete_mode = try(each.value.config.delete_mode, local.defaults.iosxr.configuration.router_ospf_vrf_area_interface_delete_mode, null) +} \ No newline at end of file