From cb23fcd83f50a2615a1ae02d13922d8e01b4b1bb Mon Sep 17 00:00:00 2001 From: Ryan Cragun Date: Tue, 16 May 2023 14:00:20 -0600 Subject: [PATCH] test: use correct pool allocation for spot strategy (#20593) Determine the allocation pool size for the spot fleet by the allocation strategy. This allows us to ensure a consistent attribute plan during re-runs which avoid rebuilding the target fleets. Signed-off-by: Ryan Cragun --- enos/modules/target_ec2_spot_fleet/main.tf | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/enos/modules/target_ec2_spot_fleet/main.tf b/enos/modules/target_ec2_spot_fleet/main.tf index 4e55da2dd095..b7122b2f3a99 100644 --- a/enos/modules/target_ec2_spot_fleet/main.tf +++ b/enos/modules/target_ec2_spot_fleet/main.tf @@ -161,10 +161,11 @@ resource "random_string" "unique_id" { } locals { - instances = toset([for idx in range(var.instance_count) : tostring(idx)]) - cluster_name = coalesce(var.cluster_name, random_string.cluster_name.result) - name_prefix = "${var.project_name}-${local.cluster_name}-${random_string.unique_id.result}" - fleet_tag = "${local.name_prefix}-spot-fleet-target" + allocation_strategy = "lowestPrice" + instances = toset([for idx in range(var.instance_count) : tostring(idx)]) + cluster_name = coalesce(var.cluster_name, random_string.cluster_name.result) + name_prefix = "${var.project_name}-${local.cluster_name}-${random_string.unique_id.result}" + fleet_tag = "${local.name_prefix}-spot-fleet-target" fleet_tags = { Name = "${local.name_prefix}-target" Type = local.cluster_name @@ -314,11 +315,14 @@ resource "aws_launch_template" "target" { # Unless we see capacity issues or instances being shut down then we ought to # stick with that strategy. resource "aws_spot_fleet_request" "targets" { - allocation_strategy = "lowestPrice" + allocation_strategy = local.allocation_strategy fleet_type = "request" iam_fleet_role = aws_iam_role.fleet.arn - // Set this to zero so re-runs don't plan for replacement - instance_pools_to_use_count = 0 + // The instance_pools_to_use_count is only valid for the allocation_strategy + // lowestPrice. When we are using that strategy we'll want to always set it + // to 1 to avoid rebuilding the fleet on a re-run. For any other strategy + // set it to zero to avoid rebuilding the fleet on a re-run. + instance_pools_to_use_count = local.allocation_strategy == "lowestPrice" ? 1 : 0 target_capacity = var.instance_count terminate_instances_on_delete = true wait_for_fulfillment = true