provider "aws" {
  region = var.aws_region

  default_tags {
    tags = module.default_tags.tags
  }
}

module "default_tags" {
  source             = "git@github.com:theorchard/terraform-default-tags.git//?ref=2.0.0"
  environment        = var.environment
  application_family = var.application_family
  service_name       = var.service_name
  team_name          = var.team_name
}

terraform {
  backend "s3" {
    bucket  = "dev-orcd-terraform-state"
    key     = "dev/terraform-emr/test/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

data "aws_s3_bucket" "s3_bucket" {
  bucket = "test-orcd-bucket"
}

data "aws_route53_zone" "route53_zone" {
  name = "dev.theorchard.io"
}

resource "aws_s3_object" "bootstrap_script" {
  # checkov:skip=CKV_AWS_186:The module doesn't support KMS keys, and bucket creation is out of the module's scope, therefore we will use the default bucket encryption.

  bucket = data.aws_s3_bucket.s3_bucket.bucket
  key    = "terraform-emr/test/bootstrap.sh"
  source = "scripts/bootstrap.sh"
}

data "aws_iam_policy_document" "s3_bucket_usage_policy" {
  statement {
    effect  = "Allow"
    actions = ["s3:*"]
    resources = [
      data.aws_s3_bucket.s3_bucket.arn,
      "${data.aws_s3_bucket.s3_bucket.arn}/*",
    ]
  }
}

resource "aws_iam_policy" "s3_bucket_usage_policy" {
  name   = "S3-${var.environment}-${data.aws_s3_bucket.s3_bucket.bucket}-usage-policy"
  policy = data.aws_iam_policy_document.s3_bucket_usage_policy.json
}

module "emr" {
  source = "../"

  providers = {
    aws.dns = aws
  }

  environment        = var.environment
  service_name       = "terraform-emr-test"
  application_family = "test"

  release_label = "emr-5.34.0"
  applications = [
    "Hadoop",
    "Hive",
    "HBase",
    "Pig",
    "Hue",
    "Spark",
    "Tez",
  ]
  configurations = ""

  key_name                 = "dev_orchard_admin"
  subnet_id                = "subnet-7ff29509"
  override_route53_zone_id = data.aws_route53_zone.route53_zone.zone_id

  kms_key_enabled = false

  leader_instance_group_instance_type = "m5.xlarge"
  core_instance_group_instance_type   = "m5.xlarge"

  bootstrap_name = "bootstrap"
  bootstrap_uri  = "s3://${data.aws_s3_bucket.s3_bucket.bucket}/${aws_s3_object.bootstrap_script.id}"
  bootstrap_args = []

  job_flow_keep_alive = true

  log_uri = "s3://${data.aws_s3_bucket.s3_bucket.bucket}/terraform-emr/test/logs/"

  emr_service_role_iam_managed_policy_attachments = [
    aws_iam_policy.s3_bucket_usage_policy.arn,
  ]

  emr_ec2_role_iam_managed_policy_attachments = [
    aws_iam_policy.s3_bucket_usage_policy.arn,
  ]
}
