terraform {
  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "~> 6.12.0"
    }
    local = {
      source  = "hashicorp/local"
      version = "~> 2.5.0"
    }
  }
}

provider "google" {
  project = var.project_id
  region  = var.region
}

module "network" {
  source            = "../../modules/network"
  project_name      = var.project_name
  region            = var.region
  frontend_cidr     = var.frontend_cidr
  backend_cidr      = var.backend_cidr
  database_cidr     = var.database_cidr
  ssh_source_ranges = var.ssh_source_ranges
}

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

  project_name      = var.project_name
  zone              = var.zone
  instance_type     = var.instance_type
  frontend_subnet_id = module.network.subnet_ids["frontend"]
  backend_subnet_id  = module.network.subnet_ids["backend"]
  database_subnet_id = module.network.subnet_ids["database"]
}

module "iam" {
  source              = "../../modules/iam"
  project_id          = var.project_id
  ssh_public_key_path = "/home/adriendick18/.ssh/id_ed25519.pub"
}

data "google_client_openid_userinfo" "me" {}

resource "local_file" "ansible_cfg" {
  filename = "${path.module}/ansible.cfg"

  content = templatefile(
    "${path.module}/../../templates/ansible.cfg.tpl",
    {
      remote_user = data.google_client_openid_userinfo.me.email
    }
  )
}
