provider "aws" {
  region = var.aws_region
}

# Terraform backends cannot contain interpolations
terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "prod/track-time-fix/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

data "aws_caller_identity" "current" {}

# Policy for read-only access to the S3 bucket
data "aws_iam_policy" "s3_configs_read_only_policy" {
  name = "S3-${var.environment}-${var.config_service_name}-RO"
}

# Policy for KMS access to encrypted config objects in the S3 bucket
data "aws_iam_policy" "orchard_repo_cron_worker_kms_policy" {
  name = "KMS-${var.environment}-${var.config_service_name}-policy"
}

data "aws_iam_policy_document" "assume_role_policy_document" {
  statement {
    actions = ["sts:AssumeRole"]
    effect  = "Allow"
    principals {
      type = "AWS"

      identifiers = [
        "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/prod-jenkins-aws-task-agent"
      ]
    }
  }
}

resource "aws_iam_role" "jenkins_role" {
  name               = "${var.environment}-${var.service_name}-jenkins-role"
  assume_role_policy = data.aws_iam_policy_document.assume_role_policy_document.json
}

resource "aws_iam_role_policy_attachment" "s3_policy_role_attachment" {
  policy_arn = data.aws_iam_policy.s3_configs_read_only_policy.arn
  role       = aws_iam_role.jenkins_role.name
}

resource "aws_iam_role_policy_attachment" "kms_policy_role_attachment" {
  policy_arn = data.aws_iam_policy.orchard_repo_cron_worker_kms_policy.arn
  role       = aws_iam_role.jenkins_role.name
}
