include "root" {
  path   = find_in_parent_folders("terragrunt-localstack.hcl")
  expose = true
}
generate "main" {
  path      = "main.tf"
  if_exists = "overwrite_terragrunt"
  contents  = <<EOF

resource "aws_vpc" "this" {
  cidr_block = "192.168.44.0/22"
}

####### END ########
resource "aws_subnet" "prv1c" {
  availability_zone = "us-east-1a"
  cidr_block = "192.168.44.0/24"
  vpc_id = aws_vpc.this.id
  map_public_ip_on_launch = false
  assign_ipv6_address_on_creation = false
  tags = merge({
    Name = "us-east-1a-private-local"
    Tier = "private"
  })
  depends_on = [aws_vpc.this]
}
resource "aws_subnet" "prv1e" {
  availability_zone = "us-east-1b"
  cidr_block = "192.168.45.0/24"
  vpc_id = aws_vpc.this.id
  map_public_ip_on_launch = false
  assign_ipv6_address_on_creation = false
  tags =  merge({
    Name = "us-east-1b-private-local"
    Tier = "private"
  })
  depends_on = [aws_vpc.this]
}
resource "aws_subnet" "pub1c" {
  availability_zone = "us-east-1a"
  cidr_block = "192.168.46.0/24"
  vpc_id = aws_vpc.this.id
  map_public_ip_on_launch = true
  assign_ipv6_address_on_creation = false
  tags = merge({
    Name = "us-east-1a-public-local"
    Tier = "public"
  })
  depends_on = [aws_vpc.this]
}
resource "aws_subnet" "pub1e" {
  availability_zone = "us-east-1b"
  cidr_block = "192.168.47.0/24"
  vpc_id = aws_vpc.this.id
  map_public_ip_on_launch = true
  assign_ipv6_address_on_creation = false
  tags = merge({
    Name = "us-east-1b-public-local"
    Tier = "public"
  })
  depends_on = [aws_vpc.this]
}
resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.this.id
  tags = merge({
    Name = "local-igw"
  })
  depends_on = [aws_vpc.this]
}
resource "aws_eip" "nat1" {
  vpc = true
  tags = merge({
    Name = "local-nat-eip"
  })
  depends_on = [aws_vpc.this]
}
resource "aws_nat_gateway" "nat1" {
  allocation_id = aws_eip.nat1.id
  subnet_id = aws_subnet.pub1c.id
}
resource "aws_route_table" "public" {
  vpc_id = aws_vpc.this.id
  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.igw.id
  }
}
resource "aws_route_table" "private" {
  vpc_id = aws_vpc.this.id
  route {
    cidr_block = "0.0.0.0/0"
    nat_gateway_id = aws_nat_gateway.nat1.id
  }
}
resource "aws_route_table_association" "pub_subnet_as_1" {
  subnet_id = aws_subnet.pub1c.id
  route_table_id = aws_route_table.public.id
}
resource "aws_route_table_association" "pub_subnet_as_2" {
  subnet_id = aws_subnet.pub1e.id
  route_table_id = aws_route_table.public.id
}
resource "aws_route_table_association" "pri_subnet_as_1" {
  subnet_id = aws_subnet.prv1c.id
  route_table_id = aws_route_table.private.id
}
resource "aws_route_table_association" "pri_subnet_as_2" {
  subnet_id = aws_subnet.prv1e.id
  route_table_id = aws_route_table.private.id
}
####### END ########
output "vpc_id" {
  value = aws_vpc.this.id
}
output "nat_ext_ip" {
  value = aws_nat_gateway.nat1.public_ip
}
output "nat_int_ip" {
  value = aws_nat_gateway.nat1.private_ip
}
output "prv_ips_list" {
  value = [aws_subnet.prv1e.cidr_block,aws_subnet.prv1c.cidr_block]
}
output "pub_ips_list" {
  value = [aws_subnet.pub1e.cidr_block, aws_subnet.pub1c.cidr_block]
}
output "private_subnets_id_list" {
  value = [aws_subnet.prv1e.id,aws_subnet.prv1c.id]
}
output "public_subnets_id_list" {
  value = [aws_subnet.pub1c.id,aws_subnet.pub1e.id]
}
output "private_subnet_id" {
  value = aws_subnet.prv1c.id
}
output "public_subnet_id" {
  value = aws_subnet.pub1c.id
}
output "private_route_table" {
  value = aws_route_table.private.id
}
output "public_route_table" {
  value = aws_route_table.public.id
}

EOF
}
