terraform: make control-planes stateful on gcp (#1087)

* terraform: make control-planes stateful on gcp

* terraform: lock google-beta provider
This commit is contained in:
3u13r 2023-01-27 12:59:25 +01:00 committed by GitHub
parent c758aef1ff
commit 6ea6e42519
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 114 additions and 31 deletions

View file

@ -4,12 +4,17 @@ terraform {
source = "hashicorp/google"
version = "4.48.0"
}
google-beta = {
source = "hashicorp/google-beta"
version = "4.50.0"
}
}
}
locals {
role_dashed = var.role == "ControlPlane" ? "control-plane" : "worker"
name = "${var.name}-${local.role_dashed}"
role_dashed = var.role == "ControlPlane" ? "control-plane" : "worker"
name = "${var.name}-${local.role_dashed}"
state_disk_name = "state-disk"
}
resource "google_compute_instance_template" "template" {
@ -34,7 +39,7 @@ resource "google_compute_instance_template" "template" {
disk_size_gb = var.disk_size
disk_type = var.disk_type
auto_delete = true
device_name = "state-disk" // This name is used by disk mapper to find the disk
device_name = local.state_disk_name // This name is used by disk mapper to find the disk
boot = false
mode = "READ_WRITE"
type = "PERSISTENT"
@ -80,11 +85,28 @@ resource "google_compute_instance_template" "template" {
}
resource "google_compute_instance_group_manager" "instance_group_manager" {
provider = google-beta
name = local.name
description = "Instance group manager for Constellation"
base_instance_name = local.name
target_size = var.instance_count
dynamic "stateful_disk" {
for_each = var.role == "ControlPlane" ? [1] : []
content {
device_name = local.state_disk_name
delete_rule = "ON_PERMANENT_INSTANCE_DELETION"
}
}
dynamic "stateful_internal_ip" {
for_each = var.role == "ControlPlane" ? [1] : []
content {
interface_name = "nic0"
delete_rule = "ON_PERMANENT_INSTANCE_DELETION"
}
}
version {
instance_template = google_compute_instance_template.template.id
}

View file

@ -5,7 +5,11 @@ variable "name" {
variable "role" {
type = string
description = "The role of the instance group. Has to be 'ControlPlane' or 'Worker'."
description = "The role of the instance group."
validation {
condition = contains(["ControlPlane", "Worker"], var.role)
error_message = "The role has to be 'ControlPlane' or 'Worker'."
}
}
variable "uid" {