variable "region" {
  description = "cloud region name"
  type = string
}

variable "account" {
  description = "aws account id"
  type = string
}

provider "aws" {
  region  = var.region
  profile = var.account
}

terraform {
  backend "s3" {}
}

data "aws_servicequotas_service_quota" "vpcs_per_region" {
  quota_code   = "L-F678F1CE"
  service_code = "vpc"
}

resource "aws_servicequotas_service_quota" "vpcs_per_region" {
  count = data.aws_servicequotas_service_quota.vpcs_per_region.value < 100 ? 1 : 0
  quota_code   = "L-F678F1CE"
  service_code = "vpc"
  value        = 100
}

data "aws_servicequotas_service_quota" "nat_gateways_per_az" {
  quota_code   = "L-FE5A380F"
  service_code = "vpc"
}

resource "aws_servicequotas_service_quota" "nat_gateways_per_az" {
  count = data.aws_servicequotas_service_quota.nat_gateways_per_az.value < 100 ? 1 : 0
  quota_code   = "L-FE5A380F"
  service_code = "vpc"
  value        = 100
}

data "aws_servicequotas_service_quota" "internet_gateways_per_region" {
  quota_code   = "L-A4707A72"
  service_code = "vpc"
}

resource "aws_servicequotas_service_quota" "internet_gateways_per_region" {
  count = data.aws_servicequotas_service_quota.internet_gateways_per_region.value < 100 ? 1 : 0
  quota_code   = "L-A4707A72"
  service_code = "vpc"
  value        = 100
}

data "aws_servicequotas_service_quota" "gateway_vpc_endpoints_per_region" {
  quota_code   = "L-1B52E74A"
  service_code = "vpc"
}

resource "aws_servicequotas_service_quota" "gateway_vpc_endpoints_per_region" {
  count = data.aws_servicequotas_service_quota.gateway_vpc_endpoints_per_region.value < 100 ? 1 : 0
  quota_code   = "L-1B52E74A"
  service_code = "vpc"
  value        = 100
}

data "aws_servicequotas_service_quota" "managed_node_groups_per_cluster" {
  quota_code   = "L-6D54EA21"
  service_code = "eks"
}

resource "aws_servicequotas_service_quota" "managed_node_groups_per_cluster" {
  count = data.aws_servicequotas_service_quota.managed_node_groups_per_cluster.value < 90 ? 1 : 0
  quota_code   = "L-6D54EA21"
  service_code = "eks"
  value        = 90
}

data "aws_servicequotas_service_quota" "auto_scaling_groups_per_region" {
  quota_code   = "L-CDE20ADC"
  service_code = "autoscaling"
}

resource "aws_servicequotas_service_quota" "auto_scaling_groups_per_region" {
  count = data.aws_servicequotas_service_quota.auto_scaling_groups_per_region.value < 10000 ? 1 : 0
  quota_code   = "L-CDE20ADC"
  service_code = "autoscaling"
  value        = 10000
}

data "aws_servicequotas_service_quota" "running_on_demand_standard_instances" {
  quota_code   = "L-1216C47A"
  service_code = "ec2"
}

resource "aws_servicequotas_service_quota" "running_on_demand_standard_instances" {
  count = data.aws_servicequotas_service_quota.running_on_demand_standard_instances.value < 50000 ? 1 : 0
  quota_code   = "L-1216C47A"
  service_code = "ec2"
  value        = 50000
}

data "aws_servicequotas_service_quota" "ec2_vpc_elastic_ips" {
  quota_code   = "L-0263D0A3"
  service_code = "ec2"
}

resource "aws_servicequotas_service_quota" "ec2_vpc_elastic_ips" {
  count = data.aws_servicequotas_service_quota.ec2_vpc_elastic_ips.value < 300 ? 1 : 0
  quota_code   = "L-0263D0A3"
  service_code = "ec2"
  value = 300
}

data "aws_servicequotas_service_quota" "application_load_balancers_per_region" {
  quota_code   = "L-53DA6B97"
  service_code = "elasticloadbalancing"
}

resource "aws_servicequotas_service_quota" "application_load_balancers_per_region" {
  count = data.aws_servicequotas_service_quota.application_load_balancers_per_region.value < 200 ? 1 : 0
  quota_code   = "L-53DA6B97"
  service_code = "elasticloadbalancing"
  value        = 200
}

data "aws_servicequotas_service_quota" "network_load_balancers_per_region" {
  quota_code   = "L-69A177A2"
  service_code = "elasticloadbalancing"
}

resource "aws_servicequotas_service_quota" "network_load_balancers_per_region" {
  count = data.aws_servicequotas_service_quota.network_load_balancers_per_region.value < 200 ? 1 : 0
  quota_code   = "L-69A177A2"
  service_code = "elasticloadbalancing"
  value        = 200
}
