terraform-aws-modules / terraform-aws-ec2-instance

Terraform module to create AWS EC2 instance(s) resources 🇺🇦
https://registry.terraform.io/modules/terraform-aws-modules/ec2-instance/aws
Apache License 2.0
758 stars 1.88k forks source link

Creation of an Instance with a Capacity Reservation ID #277

Closed schniber closed 2 years ago

schniber commented 2 years ago

Description

When trying to call the module with the specification of a Capacity Reservation ID, the module ends up with the following error:

╷ │ Error: Invalid function argument │ │ on .terraform/modules/terraform-aws-ec2-instance/main.tf line 45, in resource "aws_instance" "this": │ 45: capacity_reservation_id = lookup(capacity_reservation_target.value, "capacity_reservation_id", null) │ ├──────────────── │ │ capacity_reservation_target.value is "cr-xxxxxxxx" │ │ Invalid value for "inputMap" parameter: lookup() requires a map as the │ first argument. ╵

As per line 45 analysis, it looks like the bug is in the following statement:

capacity_reservation_id = lookup(capacity_reservation_target.value, "capacity_reservation_id", null)

it should rather be as follows:

capacity_reservation_id = lookup(capacity_reservation_target, "capacity_reservation_id", null)

In this case, terraform should lookup in the capacity reservation target map (since it is the iterator in the for_each) rather than in its value for the mapping of the attribute capacity reservation id

⚠️ Note

Versions

Reproduction Code [Required]

Steps to reproduce the behavior:

Call the module with following inputs:

module "ec2_capacity_reservation" { source = "../../"

name = "${local.name}-capacity-reservation"

ami = data.aws_ami.amazon_linux.id instance_type = "u-6tb1.56xlarge" subnet_id = element(module.vpc.private_subnets, 0) vpc_security_group_ids = [module.security_group.security_group_id] associate_public_ip_address = true

capacity_reservation_specification = { capacity_reservation_target = { capacity_reservation_id = "cr-00000000000000000" } }

tags = local.tags }

No Yes

Expected behavior

TF plan should go through and the module should create an EC2 Instance which consumes the capacity reservation.

Actual behavior

TF plan fails as it is unable to lookup for the capacity reservation id

Terminal Output Screenshot(s)

Additional context

antonbabenko commented 2 years ago

This issue has been resolved in version 4.1.1 :tada:

antonbabenko commented 2 years ago

This issue has been resolved in version 4.1.2 :tada:

github-actions[bot] commented 2 years ago

I'm going to lock this issue because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues. If you have found a problem that seems similar to this, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.