Skip to content

Commit 9be4cbd

Browse files
authored
feat: Add support for launch template network_performance_options (#3714)
1 parent 3c3d0c4 commit 9be4cbd

9 files changed

Lines changed: 44 additions & 2 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Large diffs are not rendered by default.

modules/eks-managed-node-group/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ module "eks_managed_node_group" {
170170
| <a name="input_min_size"></a> [min\_size](#input\_min\_size) | Minimum number of instances/nodes | `number` | `1` | no |
171171
| <a name="input_name"></a> [name](#input\_name) | Name of the EKS managed node group | `string` | `""` | no |
172172
| <a name="input_network_interfaces"></a> [network\_interfaces](#input\_network\_interfaces) | Customize network interfaces to be attached at instance boot time | <pre>list(object({<br/> associate_carrier_ip_address = optional(bool)<br/> associate_public_ip_address = optional(bool)<br/> connection_tracking_specification = optional(object({<br/> tcp_established_timeout = optional(number)<br/> udp_stream_timeout = optional(number)<br/> udp_timeout = optional(number)<br/> }))<br/> delete_on_termination = optional(bool)<br/> description = optional(string)<br/> device_index = optional(number)<br/> ena_srd_specification = optional(object({<br/> ena_srd_enabled = optional(bool)<br/> ena_srd_udp_specification = optional(object({<br/> ena_srd_udp_enabled = optional(bool)<br/> }))<br/> }))<br/> interface_type = optional(string)<br/> ipv4_address_count = optional(number)<br/> ipv4_addresses = optional(list(string))<br/> ipv4_prefix_count = optional(number)<br/> ipv4_prefixes = optional(list(string))<br/> ipv6_address_count = optional(number)<br/> ipv6_addresses = optional(list(string))<br/> ipv6_prefix_count = optional(number)<br/> ipv6_prefixes = optional(list(string))<br/> network_card_index = optional(number)<br/> network_interface_id = optional(string)<br/> primary_ipv6 = optional(bool)<br/> private_ip_address = optional(string)<br/> security_groups = optional(list(string), [])<br/> }))</pre> | `[]` | no |
173+
| <a name="input_network_performance_options"></a> [network\_performance\_options](#input\_network\_performance\_options) | The network performance options for the instance | <pre>object({<br/> bandwidth_weighting = optional(string)<br/> })</pre> | `null` | no |
173174
| <a name="input_node_repair_config"></a> [node\_repair\_config](#input\_node\_repair\_config) | The node auto repair configuration for the node group | <pre>object({<br/> enabled = optional(bool, true)<br/> max_parallel_nodes_repaired_count = optional(number)<br/> max_parallel_nodes_repaired_percentage = optional(number)<br/> max_unhealthy_node_threshold_count = optional(number)<br/> max_unhealthy_node_threshold_percentage = optional(number)<br/> node_repair_config_overrides = optional(list(object({<br/> min_repair_wait_time_mins = number<br/> node_monitoring_condition = string<br/> node_unhealthy_reason = string<br/> repair_action = string<br/> })))<br/> })</pre> | `null` | no |
174175
| <a name="input_partition"></a> [partition](#input\_partition) | The AWS partition - pass through value to reduce number of GET requests from data sources | `string` | `""` | no |
175176
| <a name="input_placement"></a> [placement](#input\_placement) | The placement of the instance | <pre>object({<br/> affinity = optional(string)<br/> availability_zone = optional(string)<br/> group_name = optional(string)<br/> host_id = optional(string)<br/> host_resource_group_arn = optional(string)<br/> partition_number = optional(number)<br/> spread_domain = optional(string)<br/> tenancy = optional(string)<br/> })</pre> | `null` | no |

modules/eks-managed-node-group/main.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,14 @@ resource "aws_launch_template" "this" {
322322
}
323323
}
324324

325+
dynamic "network_performance_options" {
326+
for_each = var.network_performance_options != null ? [var.network_performance_options] : []
327+
328+
content {
329+
bandwidth_weighting = network_performance_options.value.bandwidth_weighting
330+
}
331+
}
332+
325333
dynamic "placement" {
326334
for_each = var.placement != null || local.create_placement_group ? [var.placement] : []
327335

modules/eks-managed-node-group/variables.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,14 @@ variable "cpu_options" {
259259
default = null
260260
}
261261

262+
variable "network_performance_options" {
263+
description = "The network performance options for the instance"
264+
type = object({
265+
bandwidth_weighting = optional(string)
266+
})
267+
default = null
268+
}
269+
262270
variable "credit_specification" {
263271
description = "Customize the credit specification of the instance"
264272
type = object({

modules/self-managed-node-group/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ module "self_managed_node_group" {
167167
| <a name="input_mixed_instances_policy"></a> [mixed\_instances\_policy](#input\_mixed\_instances\_policy) | Configuration block containing settings to define launch targets for Auto Scaling groups | <pre>object({<br/> instances_distribution = optional(object({<br/> on_demand_allocation_strategy = optional(string)<br/> on_demand_base_capacity = optional(number)<br/> on_demand_percentage_above_base_capacity = optional(number)<br/> spot_allocation_strategy = optional(string)<br/> spot_instance_pools = optional(number)<br/> spot_max_price = optional(string)<br/> }))<br/> launch_template = object({<br/> override = optional(list(object({<br/> instance_requirements = optional(object({<br/> accelerator_count = optional(object({<br/> max = optional(number)<br/> min = optional(number)<br/> }))<br/> accelerator_manufacturers = optional(list(string))<br/> accelerator_names = optional(list(string))<br/> accelerator_total_memory_mib = optional(object({<br/> max = optional(number)<br/> min = optional(number)<br/> }))<br/> accelerator_types = optional(list(string))<br/> allowed_instance_types = optional(list(string))<br/> bare_metal = optional(string)<br/> baseline_ebs_bandwidth_mbps = optional(object({<br/> max = optional(number)<br/> min = optional(number)<br/> }))<br/> burstable_performance = optional(string)<br/> cpu_manufacturers = optional(list(string))<br/> excluded_instance_types = optional(list(string))<br/> instance_generations = optional(list(string))<br/> local_storage = optional(string)<br/> local_storage_types = optional(list(string))<br/> max_spot_price_as_percentage_of_optimal_on_demand_price = optional(number)<br/> memory_gib_per_vcpu = optional(object({<br/> max = optional(number)<br/> min = optional(number)<br/> }))<br/> memory_mib = optional(object({<br/> max = optional(number)<br/> min = optional(number)<br/> }))<br/> network_bandwidth_gbps = optional(object({<br/> max = optional(number)<br/> min = optional(number)<br/> }))<br/> network_interface_count = optional(object({<br/> max = optional(number)<br/> min = optional(number)<br/> }))<br/> on_demand_max_price_percentage_over_lowest_price = optional(number)<br/> require_hibernate_support = optional(bool)<br/> spot_max_price_percentage_over_lowest_price = optional(number)<br/> total_local_storage_gb = optional(object({<br/> max = optional(number)<br/> min = optional(number)<br/> }))<br/> vcpu_count = optional(object({<br/> max = optional(number)<br/> min = optional(number)<br/> }))<br/> }))<br/> instance_type = optional(string)<br/> launch_template_specification = optional(object({<br/> launch_template_id = optional(string)<br/> launch_template_name = optional(string)<br/> version = optional(string)<br/> }))<br/> weighted_capacity = optional(string)<br/> })))<br/> })<br/> })</pre> | `null` | no |
168168
| <a name="input_name"></a> [name](#input\_name) | Name of the Self managed Node Group | `string` | `""` | no |
169169
| <a name="input_network_interfaces"></a> [network\_interfaces](#input\_network\_interfaces) | Customize network interfaces to be attached at instance boot time | <pre>list(object({<br/> associate_carrier_ip_address = optional(bool)<br/> associate_public_ip_address = optional(bool)<br/> connection_tracking_specification = optional(object({<br/> tcp_established_timeout = optional(number)<br/> udp_stream_timeout = optional(number)<br/> udp_timeout = optional(number)<br/> }))<br/> delete_on_termination = optional(bool)<br/> description = optional(string)<br/> device_index = optional(number)<br/> ena_srd_specification = optional(object({<br/> ena_srd_enabled = optional(bool)<br/> ena_srd_udp_specification = optional(object({<br/> ena_srd_udp_enabled = optional(bool)<br/> }))<br/> }))<br/> interface_type = optional(string)<br/> ipv4_address_count = optional(number)<br/> ipv4_addresses = optional(list(string))<br/> ipv4_prefix_count = optional(number)<br/> ipv4_prefixes = optional(list(string))<br/> ipv6_address_count = optional(number)<br/> ipv6_addresses = optional(list(string))<br/> ipv6_prefix_count = optional(number)<br/> ipv6_prefixes = optional(list(string))<br/> network_card_index = optional(number)<br/> network_interface_id = optional(string)<br/> primary_ipv6 = optional(bool)<br/> private_ip_address = optional(string)<br/> security_groups = optional(list(string), [])<br/> }))</pre> | `[]` | no |
170+
| <a name="input_network_performance_options"></a> [network\_performance\_options](#input\_network\_performance\_options) | The network performance options for the instance | <pre>object({<br/> bandwidth_weighting = optional(string)<br/> })</pre> | `null` | no |
170171
| <a name="input_partition"></a> [partition](#input\_partition) | The AWS partition - pass through value to reduce number of GET requests from data sources | `string` | `""` | no |
171172
| <a name="input_placement"></a> [placement](#input\_placement) | The placement of the instance | <pre>object({<br/> affinity = optional(string)<br/> availability_zone = optional(string)<br/> group_name = optional(string)<br/> host_id = optional(string)<br/> host_resource_group_arn = optional(string)<br/> partition_number = optional(number)<br/> spread_domain = optional(string)<br/> tenancy = optional(string)<br/> })</pre> | `null` | no |
172173
| <a name="input_placement_group"></a> [placement\_group](#input\_placement\_group) | The name of the placement group into which you'll launch your instances | `string` | `null` | no |

modules/self-managed-node-group/main.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,14 @@ resource "aws_launch_template" "this" {
443443
}
444444
}
445445

446+
dynamic "network_performance_options" {
447+
for_each = var.network_performance_options != null ? [var.network_performance_options] : []
448+
449+
content {
450+
bandwidth_weighting = network_performance_options.value.bandwidth_weighting
451+
}
452+
}
453+
446454
dynamic "placement" {
447455
for_each = var.placement != null || local.create_placement_group ? [var.placement] : []
448456

modules/self-managed-node-group/variables.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,14 @@ variable "cpu_options" {
231231
default = null
232232
}
233233

234+
variable "network_performance_options" {
235+
description = "The network performance options for the instance"
236+
type = object({
237+
bandwidth_weighting = optional(string)
238+
})
239+
default = null
240+
}
241+
234242
variable "credit_specification" {
235243
description = "Customize the credit specification of the instance"
236244
type = object({

node_groups.tf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,7 @@ module "eks_managed_node_group" {
359359
create_placement_group = each.value.create_placement_group
360360
placement = each.value.placement
361361
network_interfaces = each.value.network_interfaces
362+
network_performance_options = each.value.network_performance_options
362363
maintenance_options = each.value.maintenance_options
363364
private_dns_name_options = each.value.private_dns_name_options
364365

@@ -505,6 +506,7 @@ module "self_managed_node_group" {
505506
enable_efa_only = each.value.enable_efa_only
506507
efa_indices = each.value.efa_indices
507508
network_interfaces = each.value.network_interfaces
509+
network_performance_options = each.value.network_performance_options
508510
placement = each.value.placement
509511
maintenance_options = each.value.maintenance_options
510512
private_dns_name_options = each.value.private_dns_name_options

variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1134,6 +1134,9 @@ variable "self_managed_node_groups" {
11341134
security_groups = optional(list(string))
11351135
subnet_id = optional(string)
11361136
})))
1137+
network_performance_options = optional(object({
1138+
bandwidth_weighting = optional(string)
1139+
}))
11371140
placement = optional(object({
11381141
affinity = optional(string)
11391142
availability_zone = optional(string)
@@ -1423,6 +1426,9 @@ variable "eks_managed_node_groups" {
14231426
security_groups = optional(list(string), [])
14241427
subnet_id = optional(string)
14251428
})))
1429+
network_performance_options = optional(object({
1430+
bandwidth_weighting = optional(string)
1431+
}))
14261432
maintenance_options = optional(object({
14271433
auto_recovery = optional(string)
14281434
}))

0 commit comments

Comments
 (0)