From 5b3ce9600f15a8992a219cc91b98deea86394889 Mon Sep 17 00:00:00 2001 From: Felix-Vimalaratnam Date: Wed, 3 Dec 2025 17:19:47 +0100 Subject: [PATCH] compute fait --- terraform/environments/dev/main.tf | 9 ++++ terraform/environments/dev/variables.tf | 12 +++++ terraform/modules/compute/main.tf | 72 ++++++++++++++++++++++++- terraform/modules/compute/outputs.tf | 22 +++++++- terraform/modules/compute/variables.tf | 27 +++++++++- terraform/modules/network/outputs.tf | 4 +- 6 files changed, 141 insertions(+), 5 deletions(-) diff --git a/terraform/environments/dev/main.tf b/terraform/environments/dev/main.tf index ec8f309..000c973 100644 --- a/terraform/environments/dev/main.tf +++ b/terraform/environments/dev/main.tf @@ -25,4 +25,13 @@ module "network" { backend_cidr = var.backend_cidr database_cidr = var.database_cidr ssh_source_ranges = var.ssh_source_ranges +} + +module "compute" { + source = "../../modules/compute" + instance_type = var.instance_type + zone = var.zone + frontend_subnet_id = module.network.subnets.frontend + backend_subnet_id = module.network.subnets.backend + database_subnet_id = module.network.subnets.database } \ No newline at end of file diff --git a/terraform/environments/dev/variables.tf b/terraform/environments/dev/variables.tf index e0e7bef..d93ab19 100644 --- a/terraform/environments/dev/variables.tf +++ b/terraform/environments/dev/variables.tf @@ -40,4 +40,16 @@ variable "project_id" { description = "ID du projet" type = string default = "glossy-handler-478713-i1" +} + +variable "instance_type" { + description = "type de l'instance" + type = string + default = "e2_small" +} + +variable "zone" { + description = "Nom de la zone" + type = string + default = "europe-west9-b" } \ No newline at end of file diff --git a/terraform/modules/compute/main.tf b/terraform/modules/compute/main.tf index a4f4814..6e64c65 100644 --- a/terraform/modules/compute/main.tf +++ b/terraform/modules/compute/main.tf @@ -19,4 +19,74 @@ # - Disque : 20GB # - Pas d'IP publique # - Tags : database, ssh -# - OS Login enabled \ No newline at end of file +# - OS Login enabled + +resource "google_compute_instance" "vm_frontend" { + name = "vm_frontend" + machine_type = var.instance_type + zone = var.zone + + boot_disk { + initialize_params { + image = "debian-cloud/debian-11" + size = 10 + } + } + + network_interface { + access_config {} # IP publique + subnetwork = var.frontend_subnet_id + } + + tags = ["frontend", "ssh"] + + metadata = { + enable-oslogin = "TRUE" + } +} + +resource "google_compute_instance" "vm_backend" { + name = "vm_backend" + machine_type = var.instance_type + zone = var.zone + + boot_disk { + initialize_params { + image = "debian-cloud/debian-11" + size = 10 + } + } + + network_interface { + subnetwork = var.backend_subnet_id + } + + tags = ["backend", "ssh"] + + metadata = { + enable-oslogin = "TRUE" + } +} + +resource "google_compute_instance" "vm_database" { + name = "vm_database" + machine_type = var.instance_type + zone = var.zone + + boot_disk { + initialize_params { + image = "debian-cloud/debian-11" + size = 20 + } + } + + network_interface { + subnetwork = var.database_subnet_id + } + + tags = ["database", "ssh"] + + metadata = { + enable-oslogin = "TRUE" + } +} \ No newline at end of file diff --git a/terraform/modules/compute/outputs.tf b/terraform/modules/compute/outputs.tf index 4a91aa9..9c4e28b 100644 --- a/terraform/modules/compute/outputs.tf +++ b/terraform/modules/compute/outputs.tf @@ -1,4 +1,24 @@ # À vous d'exposer : # 1. Les IPs internes de toutes les instances # 2. L'IP publique du frontend -# 3. Les noms des instances \ No newline at end of file +# 3. Les noms des instances + +output "ip_internes" { + value = { + frontend = google_compute_subnetwork.subnet_frontend.network_interface[0].network_ip + backend = google_compute_instance.subnet_backend.network_interface[0].network_ip + database = google_compute_instance.subnet_database.network_interface[0].network_ip + } +} + +output "ip_public_frontend" { + value = google_compute_instance.subnet_frontend.network_interface[0].access_config[0].nat_ip +} + +output "nom_instances" { + value = { + frontend = google_compute_instance.subnet_frontend.name + backend = google_compute_instance.subnet_backend.name + database = google_compute_instance.subnet_database.name + } +} diff --git a/terraform/modules/compute/variables.tf b/terraform/modules/compute/variables.tf index 76a14cc..07ab6ea 100644 --- a/terraform/modules/compute/variables.tf +++ b/terraform/modules/compute/variables.tf @@ -3,4 +3,29 @@ # - zone # - frontend_subnet_id # - backend_subnet_id -# - database_subnet_id \ No newline at end of file +# - database_subnet_id + +variable "instance_type" { + description = "type de l'instance" + type = string +} + +variable "zone" { + description = "Nom de la zone" + type = string +} + +variable "frontend_subnet_id" { + description = "id du frontend" + type = string +} + +variable "backend_subnet_id" { + description = "id du backend" + type = string +} + +variable "database_subnet_id" { + description = "id du database" + type = string +} diff --git a/terraform/modules/network/outputs.tf b/terraform/modules/network/outputs.tf index 078bc94..2191456 100644 --- a/terraform/modules/network/outputs.tf +++ b/terraform/modules/network/outputs.tf @@ -2,11 +2,11 @@ # 1. L'ID du VPC # 2. Les IDs des sous-réseaux sous forme de map -output "vpc_terraform_output" { +output "vpc" { value = google_compute_network.vpc_terraform.id } -output "list_id" { +output "subnets" { value = { frontend = google_compute_subnetwork.subnet_frontend.id backend = google_compute_subnetwork.subnet_backend.id