From 8ba164122af53362f53ac8701152c65d2f799f24 Mon Sep 17 00:00:00 2001 From: jka-pankaj Date: Mon, 29 Sep 2025 16:01:23 +0530 Subject: [PATCH 1/2] Implemented the Policy Map QoS configuration [iosxr_policy_map_qos] --- README.md | 1 + iosxr_policy_map_qos.tf | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 iosxr_policy_map_qos.tf diff --git a/README.md b/README.md index 9bec38f..71385fc 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,7 @@ module "iosxr" { | [iosxr_logging_source_interface.logging_source_interface](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/logging_source_interface) | resource | | [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_policy_map_qos.policy_map_qos](https://registry.terraform.io/providers/CiscoDevNet/iosxr/latest/docs/resources/policy_map_qos) | 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_policy_map_qos.tf b/iosxr_policy_map_qos.tf new file mode 100644 index 0000000..5e6479b --- /dev/null +++ b/iosxr_policy_map_qos.tf @@ -0,0 +1,34 @@ +locals { + device_policy_map_qos = flatten([ + for device in local.devices : [ + for policy_map_name, policy_map in try(local.device_config[device.name].policy_map_qos, {}) : { + device_name = device.name + policy_map_name = policy_map_name + key = "${device.name}-${policy_map_name}" + description = try(policy_map.description, local.defaults.iosxr.configuration.policy_map_qos_description, null) + classes = try(length(policy_map.classes) == 0, true) ? null : [for class in policy_map.classes : { + name = try(class.name, local.defaults.iosxr.configuration.policy_map_qos_classes_name, null) + type = try(class.type, local.defaults.iosxr.configuration.policy_map_qos_classes_type, null) + set_mpls_experimental_topmost = try(class.set_mpls_experimental_topmost, local.defaults.iosxr.configuration.policy_map_qos_classes_set_mpls_experimental_topmost, null) + set_dscp = try(class.set_dscp, local.defaults.iosxr.configuration.policy_map_qos_classes_set_dscp, null) + queue_limits = try(length(class.queue_limits) == 0, true) ? null : [for limit in class.queue_limits : { + value = try(limit.value, local.defaults.iosxr.configuration.policy_map_qos_classes_queue_limits_value, null) + unit = try(limit.unit, local.defaults.iosxr.configuration.policy_map_qos_classes_queue_limits_unit, null) + }] + }] + } + ] + if try(local.device_config[device.name].policy_map_qos, null) != null || try(local.defaults.iosxr.configuration.policy_map_qos, null) != null + ]) +} + +resource "iosxr_policy_map_qos" "policy_map_qos" { + for_each = { for policy_map in local.device_policy_map_qos : policy_map.key => policy_map } + + device = each.value.device_name + policy_map_name = each.value.policy_map_name + + # Optional attributes + description = each.value.description + classes = each.value.classes +} \ No newline at end of file From 171eecfa7cdad83ba6730ec89c012e8bb392819e Mon Sep 17 00:00:00 2001 From: jka-pankaj Date: Wed, 8 Oct 2025 17:54:29 +0530 Subject: [PATCH 2/2] Added missing attributes --- iosxr_policy_map_qos.tf | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/iosxr_policy_map_qos.tf b/iosxr_policy_map_qos.tf index 5e6479b..b187491 100644 --- a/iosxr_policy_map_qos.tf +++ b/iosxr_policy_map_qos.tf @@ -1,19 +1,33 @@ locals { device_policy_map_qos = flatten([ for device in local.devices : [ - for policy_map_name, policy_map in try(local.device_config[device.name].policy_map_qos, {}) : { + for policy_map_qos in try(local.device_config[device.name].policy_map_qos, []) : { device_name = device.name - policy_map_name = policy_map_name - key = "${device.name}-${policy_map_name}" - description = try(policy_map.description, local.defaults.iosxr.configuration.policy_map_qos_description, null) - classes = try(length(policy_map.classes) == 0, true) ? null : [for class in policy_map.classes : { - name = try(class.name, local.defaults.iosxr.configuration.policy_map_qos_classes_name, null) - type = try(class.type, local.defaults.iosxr.configuration.policy_map_qos_classes_type, null) - set_mpls_experimental_topmost = try(class.set_mpls_experimental_topmost, local.defaults.iosxr.configuration.policy_map_qos_classes_set_mpls_experimental_topmost, null) - set_dscp = try(class.set_dscp, local.defaults.iosxr.configuration.policy_map_qos_classes_set_dscp, null) + policy_map_name = try(policy_map_qos.policy_map_name, null) + key = "${device.name}-policy_map_qos-${try(policy_map_qos.policy_map_name, "")}" + description = try(policy_map_qos.description, local.defaults.iosxr.configuration.policy_map_qos.description, null) + classes = try(length(policy_map_qos.classes) == 0, true) ? null : [for class in policy_map_qos.classes : { + name = try(class.name, local.defaults.iosxr.configuration.policy_map_qos.classes.name, null) + type = try(class.type, local.defaults.iosxr.configuration.policy_map_qos.classes.type, null) + bandwidth_remaining_unit = try(class.bandwidth_remaining_unit, local.defaults.iosxr.configuration.policy_map_qos.classes.bandwidth_remaining_unit, null) + bandwidth_remaining_value = try(class.bandwidth_remaining_value, local.defaults.iosxr.configuration.policy_map_qos.classes.bandwidth_remaining_value, null) + police_conform_action_drop = try(class.police_conform_action_drop, local.defaults.iosxr.configuration.policy_map_qos.classes.police_conform_action_drop, null) + police_conform_action_transmit = try(class.police_conform_action_transmit, local.defaults.iosxr.configuration.policy_map_qos.classes.police_conform_action_transmit, null) + police_exceed_action_drop = try(class.police_exceed_action_drop, local.defaults.iosxr.configuration.policy_map_qos.classes.police_exceed_action_drop, null) + police_exceed_action_transmit = try(class.police_exceed_action_transmit, local.defaults.iosxr.configuration.policy_map_qos.classes.police_exceed_action_transmit, null) + police_rate_unit = try(class.police_rate_unit, local.defaults.iosxr.configuration.policy_map_qos.classes.police_rate_unit, null) + police_rate_value = try(class.police_rate_value, local.defaults.iosxr.configuration.policy_map_qos.classes.police_rate_value, null) + police_violate_action_drop = try(class.police_violate_action_drop, local.defaults.iosxr.configuration.policy_map_qos.classes.police_violate_action_drop, null) + police_violate_action_transmit = try(class.police_violate_action_transmit, local.defaults.iosxr.configuration.policy_map_qos.classes.police_violate_action_transmit, null) + priority_level = try(class.priority_level, local.defaults.iosxr.configuration.policy_map_qos.classes.priority_level, null) + service_policy_name = try(class.service_policy_name, local.defaults.iosxr.configuration.policy_map_qos.classes.service_policy_name, null) + set_dscp = try(class.set_dscp, local.defaults.iosxr.configuration.policy_map_qos.classes.set_dscp, null) + set_mpls_experimental_topmost = try(class.set_mpls_experimental_topmost, local.defaults.iosxr.configuration.policy_map_qos.classes.set_mpls_experimental_topmost, null) + shape_average_rate_unit = try(class.shape_average_rate_unit, local.defaults.iosxr.configuration.policy_map_qos.classes.shape_average_rate_unit, null) + shape_average_rate_value = try(class.shape_average_rate_value, local.defaults.iosxr.configuration.policy_map_qos.classes.shape_average_rate_value, null) queue_limits = try(length(class.queue_limits) == 0, true) ? null : [for limit in class.queue_limits : { - value = try(limit.value, local.defaults.iosxr.configuration.policy_map_qos_classes_queue_limits_value, null) - unit = try(limit.unit, local.defaults.iosxr.configuration.policy_map_qos_classes_queue_limits_unit, null) + value = try(limit.value, local.defaults.iosxr.configuration.policy_map_qos.classes.queue_limits.value, null) + unit = try(limit.unit, local.defaults.iosxr.configuration.policy_map_qos.classes.queue_limits.unit, null) }] }] } @@ -28,7 +42,6 @@ resource "iosxr_policy_map_qos" "policy_map_qos" { device = each.value.device_name policy_map_name = each.value.policy_map_name - # Optional attributes description = each.value.description classes = each.value.classes } \ No newline at end of file