# Configuration Provider terraform { required_providers { google = { source = "hashicorp/google" version = "~> 5.0" } } } provider "google" { project = var.project_id region = var.region } # 1. Appel du Module IAM (pour configurer l'accès avant de créer les VMs) module "iam" { source = "../../modules/iam" project_id = var.project_id gcp_user_email = var.gcp_user_email ssh_public_key = var.ssh_public_key } # 2. Appel du Module Network module "network" { source = "../../modules/network" project_id = var.project_id 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 } # 3. Appel du Module Compute module "compute" { source = "../../modules/compute" # Dépendances du module network frontend_subnet_id = module.network.subnets_map.frontend backend_subnet_id = module.network.subnets_map.backend database_subnet_id = module.network.subnets_map.database project_id = var.project_id instance_type = var.instance_type zone = var.zone # Assurez-vous que l'IAM est configuré avant de créer les instances depends_on = [module.iam] } # 4. Créer le fichier de configuration Ansible (template) # C'est un bloc data pour lire le template data "template_file" "ansible_cfg_tpl" { template = file("../../templates/ansible.cfg.tpl") vars = { frontend_ip = module.compute.internal_ips.frontend backend_ip = module.compute.internal_ips.backend database_ip = module.compute.internal_ips.database } } # C'est une ressource pour écrire le fichier final (inventaire Ansible) resource "local_file" "ansible_inventory" { content = data.template_file.ansible_cfg_tpl.rendered filename = "ansible-inventory.cfg" # Crée le fichier dans environments/dev }