From 6b18c11c094d43b2d30d5fe814bd6e519dea7bb0 Mon Sep 17 00:00:00 2001 From: VISHAL B Date: Mon, 15 Sep 2025 06:08:08 +0530 Subject: [PATCH 1/2] fix-issue-NIC --- main.tf | 57 ++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/main.tf b/main.tf index 39b3e235..85d1325c 100644 --- a/main.tf +++ b/main.tf @@ -28,6 +28,16 @@ locals { ) } +# Compute primary and additional network interfaces (by device_index) +locals { + network_interfaces = var.network_interface != null ? { + for k, v in var.network_interface : tostring(try(v.device_index, tonumber(k))) => v + } : {} + + primary_network_interface = try(local.network_interfaces["0"], null) + additional_network_interfaces = { for k, v in local.network_interfaces : k => v if k != "0" } +} + data "aws_ssm_parameter" "this" { count = local.create && var.ami == null ? 1 : 0 @@ -166,15 +176,12 @@ resource "aws_instance" "this" { monitoring = var.monitoring - dynamic "network_interface" { - for_each = var.network_interface != null ? var.network_interface : {} + dynamic "primary_network_interface" { + for_each = var.network_interface != null && local.primary_network_interface != null ? [local.primary_network_interface] : [] content { - delete_on_termination = network_interface.value.delete_on_termination - device_index = coalesce(network_interface.value.device_index, network_interface.key) - network_card_index = network_interface.value.network_card_index - network_interface_id = network_interface.value.network_interface_id - + delete_on_termination = primary_network_interface.value.delete_on_termination + network_interface_id = primary_network_interface.value.network_interface_id } } @@ -356,15 +363,12 @@ resource "aws_instance" "ignore_ami" { monitoring = var.monitoring - dynamic "network_interface" { - for_each = var.network_interface != null ? var.network_interface : {} + dynamic "primary_network_interface" { + for_each = var.network_interface != null && local.primary_network_interface != null ? [local.primary_network_interface] : [] content { - delete_on_termination = network_interface.value.delete_on_termination - device_index = coalesce(network_interface.value.device_index, network_interface.key) - network_card_index = network_interface.value.network_card_index - network_interface_id = network_interface.value.network_interface_id - + delete_on_termination = primary_network_interface.value.delete_on_termination + network_interface_id = primary_network_interface.value.network_interface_id } } @@ -543,15 +547,12 @@ resource "aws_spot_instance_request" "this" { monitoring = var.monitoring - dynamic "network_interface" { - for_each = var.network_interface != null ? var.network_interface : {} + dynamic "primary_network_interface" { + for_each = var.network_interface != null && local.primary_network_interface != null ? [local.primary_network_interface] : [] content { - delete_on_termination = network_interface.value.delete_on_termination - device_index = try(network_interface.value.device_index, network_interface.key) - network_card_index = network_interface.value.network_card_index - network_interface_id = network_interface.value.network_interface_id - + delete_on_termination = primary_network_interface.value.delete_on_termination + network_interface_id = primary_network_interface.value.network_interface_id } } @@ -616,6 +617,20 @@ resource "aws_ec2_tag" "spot_instance" { value = each.value } +################################################################################ +# Additional Network Interface Attachments +################################################################################ + +resource "aws_network_interface_attachment" "this" { + for_each = local.create && var.network_interface != null ? local.additional_network_interfaces : {} + + region = var.region + + instance_id = local.instance_id + network_interface_id = each.value.network_interface_id + device_index = try(each.value.device_index, tonumber(each.key)) +} + ################################################################################ # EBS Volume(s) ################################################################################ From 211a0a0b5eda4b345a56e7382c94c9baff5fe801 Mon Sep 17 00:00:00 2001 From: VISHAL B Date: Mon, 15 Sep 2025 06:57:17 +0530 Subject: [PATCH 2/2] fix-issue-NIC-final --- main.tf | 67 ++++++++++++++++++++++------------------------------ variables.tf | 6 +++++ 2 files changed, 34 insertions(+), 39 deletions(-) diff --git a/main.tf b/main.tf index 85d1325c..88968aa8 100644 --- a/main.tf +++ b/main.tf @@ -5,6 +5,10 @@ locals { is_t_instance_type = replace(var.instance_type, "/^t(2|3|3a|4g){1}\\..*$/", "1") == "1" ? true : false + network_interfaces = var.network_interface != null ? var.network_interface : {} + primary_network_interface = one([for k, v in local.network_interfaces : v if coalesce(v.device_index, k) == 0]...) + secondary_network_interfaces = { for k, v in local.network_interfaces : k => v if coalesce(v.device_index, k) != 0 } + ami = try(coalesce(var.ami, try(nonsensitive(data.aws_ssm_parameter.this[0].value), null)), null) instance_tags = merge( @@ -28,16 +32,6 @@ locals { ) } -# Compute primary and additional network interfaces (by device_index) -locals { - network_interfaces = var.network_interface != null ? { - for k, v in var.network_interface : tostring(try(v.device_index, tonumber(k))) => v - } : {} - - primary_network_interface = try(local.network_interfaces["0"], null) - additional_network_interfaces = { for k, v in local.network_interfaces : k => v if k != "0" } -} - data "aws_ssm_parameter" "this" { count = local.create && var.ami == null ? 1 : 0 @@ -176,12 +170,11 @@ resource "aws_instance" "this" { monitoring = var.monitoring - dynamic "primary_network_interface" { - for_each = var.network_interface != null && local.primary_network_interface != null ? [local.primary_network_interface] : [] - + dynamic "network_interface" { + for_each = var.network_interface != null ? [local.primary_network_interface] : [] content { - delete_on_termination = primary_network_interface.value.delete_on_termination - network_interface_id = primary_network_interface.value.network_interface_id + device_index = 0 + network_interface_id = network_interface.value.network_interface_id } } @@ -363,12 +356,11 @@ resource "aws_instance" "ignore_ami" { monitoring = var.monitoring - dynamic "primary_network_interface" { - for_each = var.network_interface != null && local.primary_network_interface != null ? [local.primary_network_interface] : [] - + dynamic "network_interface" { + for_each = var.network_interface != null ? [local.primary_network_interface] : [] content { - delete_on_termination = primary_network_interface.value.delete_on_termination - network_interface_id = primary_network_interface.value.network_interface_id + device_index = 0 + network_interface_id = network_interface.value.network_interface_id } } @@ -547,12 +539,11 @@ resource "aws_spot_instance_request" "this" { monitoring = var.monitoring - dynamic "primary_network_interface" { - for_each = var.network_interface != null && local.primary_network_interface != null ? [local.primary_network_interface] : [] - + dynamic "network_interface" { + for_each = var.network_interface != null ? [local.primary_network_interface] : [] content { - delete_on_termination = primary_network_interface.value.delete_on_termination - network_interface_id = primary_network_interface.value.network_interface_id + device_index = 0 + network_interface_id = network_interface.value.network_interface_id } } @@ -617,20 +608,6 @@ resource "aws_ec2_tag" "spot_instance" { value = each.value } -################################################################################ -# Additional Network Interface Attachments -################################################################################ - -resource "aws_network_interface_attachment" "this" { - for_each = local.create && var.network_interface != null ? local.additional_network_interfaces : {} - - region = var.region - - instance_id = local.instance_id - network_interface_id = each.value.network_interface_id - device_index = try(each.value.device_index, tonumber(each.key)) -} - ################################################################################ # EBS Volume(s) ################################################################################ @@ -822,6 +799,18 @@ resource "aws_vpc_security_group_ingress_rule" "this" { to_port = try(coalesce(each.value.to_port, each.value.from_port), null) } +################################################################################ +# Network Interface Attachment +################################################################################ + +resource "aws_network_interface_attachment" "this" { + for_each = var.create && var.create_network_interface_attachment ? local.secondary_network_interfaces : {} + + instance_id = local.instance_id + network_interface_id = each.value.network_interface_id + device_index = each.value.device_index +} + ################################################################################ # Elastic IP ################################################################################ diff --git a/variables.tf b/variables.tf index 8df6532c..323eb4e8 100644 --- a/variables.tf +++ b/variables.tf @@ -605,3 +605,9 @@ variable "putin_khuylo" { type = bool default = true } + +variable "create_network_interface_attachment" { + description = "Whether to create network interface attachments" + type = bool + default = false +}