# Terraform backends cannot contain interpolations
terraform {
  backend "s3" {
    bucket         = "orcd-terraform-state"
    key            = "qa/logs-applications/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = "true"
    dynamodb_table = "terraform-qa-logs-applications"
  }
}

provider "aws" {
  region = "us-east-1"
}

module "applications_ftd" {
  source = "../../modules/fluentd"

  environment            = "qa"
  stack_name             = "${var.fluentd_stack_name}"
  fluentd_key_name       = "qa-logs-applications"
  vpc_id                 = "vpc-7f0e841a"
  ssl_certificate_arn    = "arn:aws:acm:us-east-1:437795906767:certificate/a76e4883-28aa-4062-a4cc-c06b8012ae28"
  vpc_public_subnet_ids  = "subnet-0f4dba24,subnet-30e29047"
  vpc_private_subnet_ids = "subnet-cb4dbae0,subnet-5366ef24"
  udp_in_cidr_block      = ["10.40.0.0/22", "192.168.31.0/24"]
  fluentd_ext_8888_cidr_blocks = [
    "52.202.238.54/32",
    "3.81.188.77/32",
    "3.213.73.88/32",
    "3.213.8.167/32",
    "207.237.185.2/32",
    "52.0.160.11/32",
    "52.4.166.115/32",
  ]
  fluentd_ext_24224_cidr_blocks = [
    "52.202.238.54/32",
    "3.81.188.77/32",
    "3.213.73.88/32",
    "3.213.8.167/32",
    "207.237.185.2/32",
    "52.0.160.11/32",
    "52.4.166.115/32",
  ]
  fluentd_instance_type     = "c5.large"
  user_data                 = "${module.chef_bootstrap_applications_fluentd.user_data_output}"
  zone_id                   = "Z2RSKZ9M7TJ9Z"
  health_check_grace_period = 2400

  aws_route53_params = {
    domain_name = "theorchard.io"
    zone_id     = "Z2RSKZ9M7TJ9Z"
    type        = "CNAME"
    ttl         = "300"
  }
}

module "chef_bootstrap_applications_fluentd" {
  source = "git@github.com:theorchard/terraform-chef-bootstrap.git//?ref=1.1.0"

  chef_version      = "13.12.3"
  chef_server       = "${var.chef_server}"
  chef_server_url   = "https://${var.chef_server}/organizations/orchard"
  s3_chef_bucket    = "orcd-chef-validator-keys"
  chef_environment  = "_default"
  chef_role         = "qa_fluentd_applications"
  log_file          = "/var/log/chef/bootstrap.log"
  aws_instance_name = "qa-${var.fluentd_stack_name}"
  aws_iam_role_id   = "${module.applications_ftd.aws_iam_role_id_output}"
}

# Run fluentd in all private subnets
data "aws_subnet_ids" "private_subnet_ids" {
  vpc_id = var.vpc_id

  filter {
    name = "tag:tier"

    values = [
      "private",
    ]
  }

  filter {
    name = "tag:Name"

    values = [
      "*private*",
    ]
  }
}

module "fluentd" {
  source = "../../modules/fluentd"

  environment                              = var.environment
  service_name                             = var.service_name
  vpc_id                                   = var.vpc_id
  instance_subnet_ids                      = data.aws_subnet_ids.private_subnet_ids.ids
  load_balancer_subnets                    = data.aws_subnet_ids.private_subnet_ids.ids
  ssh_keypair_name                         = "orchard_admin"
  acm_domain                               = "*.theorchard.io"
  aws_instance_type                        = "c5.large"
  load_balancer_access_logs_s3_bucket_name = "orch-elb-logs"
  min_size                                 = 2
  user_data                                = module.chef_bootstrap_fluentd.user_data_output
  health_check_grace_period                = 1800
  udp_allow_cidr_blocks = [
    "10.30.0.0/22",
    "10.40.0.0/22",
    "192.168.31.0/24",
    "192.168.32.0/24",
    "192.168.33.0/24",
    "192.168.40.0/22",
  ]
  tcp_8888_allow_cidr_blocks = [
    "10.30.0.0/22",
    "10.40.0.0/22",
    "192.168.31.0/24",
    "192.168.32.0/24",
    "192.168.33.0/24",
    "192.168.40.0/22",
  ]
  tcp_24224_allow_cidr_blocks = [
    "10.30.0.0/22",
    "10.40.0.0/22",
    "192.168.31.0/24",
    "192.168.32.0/24",
    "192.168.33.0/24",
    "192.168.40.0/22",
  ]
  aws_route53_params = {
    domain_name = "theorchard.io"
    zone_id     = "Z2RSKZ9M7TJ9Z"
    type        = "CNAME"
    ttl         = "300"
  }
}

module "chef_bootstrap_fluentd" {
  source = "git@github.com:theorchard/terraform-chef-bootstrap.git"

  chef_version      = "15.11.8"
  chef_server       = var.chef_server
  chef_server_url   = "https://${var.chef_server}/organizations/orchard"
  s3_chef_bucket    = "orcd-chef-validator-keys"
  chef_environment  = "_default"
  chef_role         = "${var.environment}_fluentd_applications"
  log_file          = "/var/log/chef/bootstrap.log"
  aws_instance_name = "${var.environment}-${var.service_name}"
  aws_iam_role_id   = module.fluentd.instance_iam_role_name_output
}

# Not elasticbeanstalk, but it gives a good base to adjust
module "datadog_fluentd_dashboard" {
  source           = "git@github.com:theorchard/terraform-datadog.git//modules/service?ref=1.0.1"
  environment      = "qa"
  environment_type = "elasticbeanstalk"
  service_name     = "fluentd"
}
