# Ziti Server, module couldnt be renamed as it would lead to a destruction of the instance
module jenkins_dev_server {
  source          = "./modules/jenkins"
  name            = "development"
  vpc_id          = module.network.vpc_id
  vpc_cidr        = var.vpc_cidr
  key_name        = var.key_name
  private_subnets = flatten(module.network.private_subnets)
  public_subnets  = flatten(module.network.public_subnets)
  jenkins_url     = "jenkinstest.${var.domain}"
  primary_zone    = data.aws_route53_zone.primaryzone.zone_id
  account_acm     = data.aws_acm_certificate.account_acm.arn
  imageid         = "ami-0e3085e3ab0165ac8"
  allowed_cidrs = [ "${aws_instance.bastion.public_ip}/32","${aws_instance.bastion.private_ip}/32" ]
  prefix_list_id = aws_ec2_managed_prefix_list.bb_whitelisted_ips.id
}

# Dev Server
module jenkins_test_server {
  source          = "./modules/jenkins"
  name            = "test"
  vpc_id          = module.network.vpc_id
  vpc_cidr        = var.vpc_cidr
  key_name        = var.key_name
  private_subnets = flatten(module.network.private_subnets)
  public_subnets  = flatten(module.network.public_subnets)
  jenkins_url     = "jenkinsdev.${var.domain}"
  primary_zone    = data.aws_route53_zone.primaryzone.zone_id
  account_acm     = data.aws_acm_certificate.account_acm.arn
  imageid         = "ami-013be31976ca2c322"
  prefix_list_id = aws_ec2_managed_prefix_list.bb_whitelisted_ips.id
  allowed_cidrs = [ "${aws_instance.bastion.public_ip}/32","${aws_instance.bastion.private_ip}/32" ]
}

# Production
module jenkins_production_server {
  source             = "./modules/jenkins"
  name               = "production"
  vpc_id             = module.network.vpc_id
  vpc_cidr           = var.vpc_cidr
  key_name           = var.key_name
  disable_api_termination = true
  private_subnets    = ["subnet-057587b8d7803c014"]
  public_subnets     = flatten(module.network.public_subnets)
  jenkins_url        = "jenkins.${var.domain}"
  master_root_volume = 500
  primary_zone       = data.aws_route53_zone.primaryzone.zone_id
  account_acm        = data.aws_acm_certificate.account_acm.arn
  ebs_optimized      = true
  imageid            = "ami-06cbb3127116448ed"
  allowed_cidrs = [ "${aws_instance.bastion.public_ip}/32","${aws_instance.bastion.private_ip}/32" ]
  prefix_list_id = aws_ec2_managed_prefix_list.bb_whitelisted_ips.id
}

# Slave 01
resource aws_instance jenkins-slave-01 {
  ami                    = "ami-0c40d6e3be6186c52"
  instance_type          = "t3.medium"
  key_name               = var.key_name
  disable_api_termination = true
  vpc_security_group_ids = [module.jenkins_production_server.jenkins_sg]
  # TODO remove hard coded val
  subnet_id            = module.network.private_subnets[0]
  iam_instance_profile = module.jenkins_production_server.iam_instance_profile
  ebs_optimized        = true
  tags = {
    Name              = "jenkins-slave-01"
    nf_node_type      = "INF"
    nf_environment    = "devops-tools"
    cost_environment  = "non-production"
    cost_category     = "CICD"
    cost_team_owner   = "MOPRAV"
  }
  lifecycle {
    ignore_changes = [ tags, volume_tags, root_block_device[0].tags ]
  }
}

# Slave 02
resource aws_instance jenkins-slave-02 {
  ami                    = "ami-0dae2074174793ef9"
  instance_type          = "t3.medium"
  key_name               = var.key_name
  disable_api_termination = true
  vpc_security_group_ids = [module.jenkins_production_server.jenkins_sg]
  # TODO remove hard coded val
  subnet_id            = module.network.private_subnets[0]
  iam_instance_profile = module.jenkins_production_server.iam_instance_profile
  ebs_optimized        = true
  tags = {
    Name              = "jenkins-slave-02"
    nf_node_type      = "INF"
    nf_environment    = "devops-tools"
    cost_environment  = "non-production"
    cost_category     = "CICD"
    cost_team_owner   = "MOPRAV"
  }
  lifecycle {
    ignore_changes = [ tags, volume_tags, root_block_device[0].tags ]
  }
}


resource aws_ec2_managed_prefix_list bb_whitelisted_ips {
  name           = "Bitbucket OB IP Addresses from https://ip-ranges.atlassian.com/"
  address_family = "IPv4"
  max_entries    = 50

  entry {
    cidr        = "52.41.219.63/32"
  }
  entry {
    cidr        = "34.216.18.129/32"
  }
  entry {
    cidr        = "13.236.8.128/25"
  }
  entry {
    cidr        = "18.246.31.128/25"
  }
  entry {
    cidr        = "34.236.25.177/32"
  }
  entry {
    cidr        = "185.166.140.0/22"
  }
  entry {
    cidr        = "34.199.54.113/32"
  }
  entry {
    cidr        = "35.155.178.254/32"
  }
  entry {
    cidr        = "52.204.96.37/32"
  }
  entry {
    cidr        = "35.84.197.128/26"
  }
  entry {
    cidr        = "3.69.198.0/26"
  }
  entry {
    cidr        = "15.228.142.0/26"
  }
  entry {
    cidr        = "3.26.128.128/26"
  }
  entry {
    cidr        = "13.214.1.0/26"
  }
  entry {
    cidr        = "35.160.177.10/32"
  }
  entry {
    cidr        = "3.109.72.192/26"
  }
  entry {
    cidr        = "52.203.14.55/32"
  }
  entry {
    cidr        = "18.184.99.128/25"
  }
  entry {
    cidr        = "44.197.146.192/26"
  }
  entry {
    cidr        = "52.215.192.128/25"
  }
  entry {
    cidr        = "104.192.136.0/21"
  }
  entry {
    cidr        = "18.205.93.0/27"
  }
  entry {
    cidr        = "35.171.175.212/32"
  }
  entry {
    cidr        = "18.136.214.0/25"
  }
  entry {
    cidr        = "3.251.213.64/26"
  }
  entry {
    cidr        = "3.99.65.0/26"
  }
  entry {
    cidr        = "52.202.195.162/32"
  }
  entry {
    cidr        = "13.52.5.0/25"
  }
  entry {
    cidr        = "3.101.177.128/26"
  }
  entry {
    cidr        = "34.218.168.212/32"
  }
  entry {
    cidr        = "18.234.32.128/25"
  }
  entry {
    cidr        = "34.218.156.209/32"
  }
  entry {
    cidr        = "52.54.90.98/32"
  }
  entry {
    cidr        = "18.170.192.128/26"
  }
  entry {
    cidr        = "34.232.119.183/32"
  }
  entry {
    cidr        = "35.75.131.128/26"
  }
  entry {
    cidr        = "34.232.25.90/32"
  }
}
