@@ -28,6 +28,16 @@ locals {
2828 )
2929}
3030
31+ # Compute primary and additional network interfaces (by device_index)
32+ locals {
33+ network_interfaces = var. network_interface != null ? {
34+ for k , v in var . network_interface : tostring (try (v. device_index , tonumber (k))) => v
35+ } : {}
36+
37+ primary_network_interface = try (local. network_interfaces [" 0" ], null )
38+ additional_network_interfaces = { for k , v in local . network_interfaces : k => v if k != " 0" }
39+ }
40+
3141data "aws_ssm_parameter" "this" {
3242 count = local. create && var. ami == null ? 1 : 0
3343
@@ -166,15 +176,12 @@ resource "aws_instance" "this" {
166176
167177 monitoring = var. monitoring
168178
169- dynamic "network_interface " {
170- for_each = var. network_interface != null ? var . network_interface : {}
179+ dynamic "primary_network_interface " {
180+ for_each = var. network_interface != null && local . primary_network_interface != null ? [ local . primary_network_interface ] : []
171181
172182 content {
173- delete_on_termination = network_interface. value . delete_on_termination
174- device_index = coalesce (network_interface. value . device_index , network_interface. key )
175- network_card_index = network_interface. value . network_card_index
176- network_interface_id = network_interface. value . network_interface_id
177-
183+ delete_on_termination = primary_network_interface. value . delete_on_termination
184+ network_interface_id = primary_network_interface. value . network_interface_id
178185 }
179186 }
180187
@@ -356,15 +363,12 @@ resource "aws_instance" "ignore_ami" {
356363
357364 monitoring = var. monitoring
358365
359- dynamic "network_interface " {
360- for_each = var. network_interface != null ? var . network_interface : {}
366+ dynamic "primary_network_interface " {
367+ for_each = var. network_interface != null && local . primary_network_interface != null ? [ local . primary_network_interface ] : []
361368
362369 content {
363- delete_on_termination = network_interface. value . delete_on_termination
364- device_index = coalesce (network_interface. value . device_index , network_interface. key )
365- network_card_index = network_interface. value . network_card_index
366- network_interface_id = network_interface. value . network_interface_id
367-
370+ delete_on_termination = primary_network_interface. value . delete_on_termination
371+ network_interface_id = primary_network_interface. value . network_interface_id
368372 }
369373 }
370374
@@ -543,15 +547,12 @@ resource "aws_spot_instance_request" "this" {
543547
544548 monitoring = var. monitoring
545549
546- dynamic "network_interface " {
547- for_each = var. network_interface != null ? var . network_interface : {}
550+ dynamic "primary_network_interface " {
551+ for_each = var. network_interface != null && local . primary_network_interface != null ? [ local . primary_network_interface ] : []
548552
549553 content {
550- delete_on_termination = network_interface. value . delete_on_termination
551- device_index = try (network_interface. value . device_index , network_interface. key )
552- network_card_index = network_interface. value . network_card_index
553- network_interface_id = network_interface. value . network_interface_id
554-
554+ delete_on_termination = primary_network_interface. value . delete_on_termination
555+ network_interface_id = primary_network_interface. value . network_interface_id
555556 }
556557 }
557558
@@ -616,6 +617,20 @@ resource "aws_ec2_tag" "spot_instance" {
616617 value = each. value
617618}
618619
620+ # ###############################################################################
621+ # Additional Network Interface Attachments
622+ # ###############################################################################
623+
624+ resource "aws_network_interface_attachment" "this" {
625+ for_each = local. create && var. network_interface != null ? local. additional_network_interfaces : {}
626+
627+ region = var. region
628+
629+ instance_id = local. instance_id
630+ network_interface_id = each. value . network_interface_id
631+ device_index = try (each. value . device_index , tonumber (each. key ))
632+ }
633+
619634# ###############################################################################
620635# EBS Volume(s)
621636# ###############################################################################
0 commit comments