locals {
  extra_app_image_repo = var.ecs_extra_apps_image_repo != "" ? var.ecs_extra_apps_image_repo : module.basic_components.sample_app_image_repo
}

data "template_file" "extra_apps_defs" {
  for_each = var.ecs_extra_apps
  template = file("${var.testcase}/${each.value.definition}")
  vars = {
    region     = var.region
    image_repo = local.extra_app_image_repo
  }
}

resource "aws_ecs_task_definition" "extra_apps" {
  for_each              = var.ecs_extra_apps
  family                = "taskdef-${module.common.testing_id}-${each.value.service_name}"
  container_definitions = data.template_file.extra_apps_defs[each.key].rendered
  requires_compatibilities = each.value.launch_type == "FARGATE" ? [
    "FARGATE"] : [
  "EC2"]
  network_mode       = each.value.network_mode
  cpu                = each.value.cpu
  memory             = each.value.memory
  task_role_arn      = module.basic_components.aoc_iam_role_arn
  execution_role_arn = module.basic_components.aoc_iam_role_arn
}

resource "aws_ecs_service" "extra_apps" {
  for_each         = var.ecs_extra_apps
  name             = "aocservice-${module.common.testing_id}-${each.value.service_name}"
  cluster          = aws_ecs_cluster.ecscluster.id
  task_definition  = "${aws_ecs_task_definition.extra_apps[each.key].family}:1"
  desired_count    = each.value.replicas
  launch_type      = each.value.launch_type
  platform_version = each.value.launch_type == "FARGATE" ? "1.4.0" : null

  // NOTE: network configuration is only allowed for awsvpc
  // a hack for optional block https://github.com/hashicorp/terraform/issues/19898
  dynamic "network_configuration" {
    for_each = each.value.network_mode == "awsvpc" ? tolist([
    each.value.network_mode]) : []
    content {
      subnets = module.basic_components.aoc_private_subnet_ids
      security_groups = [
      module.basic_components.aoc_security_group_id]
    }
  }
}

output "extra_apps_defs_rendered" {
  value = {
    for k, v in data.template_file.extra_apps_defs : k => v.rendered
  }
}

output "extra_app_task_defs" {
  value = aws_ecs_task_definition.extra_apps
}