Files
hunfabric/modules/compute-vm/disks.tf
2026-04-18 10:07:14 +02:00

133 lines
4.7 KiB
HCL

/**
* Copyright 2026 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
locals {
attached_disks_regional = {
for k, v in var.attached_disks : k => v
if v.initialize_params.replica_zone != null
}
attached_disks_zonal = {
for k, v in var.attached_disks : k => v
if v.initialize_params.replica_zone == null
}
attached_disks_ordered = {
for k, v in var.attached_disks : coalesce(v.position, k) => {
key = k
is_regional = v.initialize_params.replica_zone != null
}
}
}
resource "google_compute_disk" "boot" {
count = (
!local.is_template && var.boot_disk.use_independent_disk != null ? 1 : 0
)
project = local.project_id
zone = local.zone
# by default, GCP creates boot disks with the same name as the instance
# the deviation here is kept for backwards compatibility
name = coalesce(
var.boot_disk.use_independent_disk.name, "${var.name}-boot"
)
image = var.boot_disk.source.image
architecture = var.boot_disk.architecture
type = var.boot_disk.initialize_params.type
size = var.boot_disk.initialize_params.size
provisioned_iops = var.boot_disk.initialize_params.hyperdisk.provisioned_iops
provisioned_throughput = var.boot_disk.initialize_params.hyperdisk.provisioned_throughput
storage_pool = var.boot_disk.initialize_params.hyperdisk.storage_pool
labels = merge(var.labels, {
disk_name = "boot"
disk_type = var.boot_disk.initialize_params.type
})
dynamic "disk_encryption_key" {
for_each = var.encryption != null ? [""] : []
content {
raw_key = var.encryption.disk_encryption_key_raw
kms_key_self_link = lookup(
local.ctx_kms_keys,
var.encryption.kms_key_self_link,
var.encryption.kms_key_self_link
)
}
}
}
resource "google_compute_disk" "disks" {
for_each = local.is_template ? {} : {
for k, v in local.attached_disks_zonal :
k => v if v.source.attach == null
}
project = local.project_id
zone = local.zone
name = coalesce(each.value.name, "${var.name}-${each.key}")
type = each.value.initialize_params.type
size = each.value.initialize_params.size
architecture = var.boot_disk.architecture
image = each.value.source.image
provisioned_iops = each.value.initialize_params.hyperdisk.provisioned_iops
provisioned_throughput = each.value.initialize_params.hyperdisk.provisioned_throughput
snapshot = each.value.source.snapshot
storage_pool = each.value.initialize_params.hyperdisk.storage_pool
labels = merge(var.labels, {
disk_name = coalesce(each.value.name, each.key)
disk_type = each.value.initialize_params.type
})
dynamic "disk_encryption_key" {
for_each = var.encryption != null ? [""] : []
content {
raw_key = var.encryption.disk_encryption_key_raw
kms_key_self_link = lookup(
local.ctx_kms_keys,
var.encryption.kms_key_self_link,
var.encryption.kms_key_self_link
)
}
}
}
resource "google_compute_region_disk" "disks" {
for_each = local.is_template ? {} : {
for k, v in local.attached_disks_regional :
k => v if v.source.attach == null
}
project = local.project_id
region = local.region
replica_zones = [local.zone, each.value.initialize_params.replica_zone]
name = coalesce(each.value.name, "${var.name}-${each.key}")
type = each.value.initialize_params.type
size = each.value.initialize_params.size
# image = each.value.source.image
snapshot = each.value.source.snapshot
labels = merge(var.labels, {
disk_name = coalesce(each.value.name, each.key)
disk_type = each.value.initialize_params.type
})
dynamic "disk_encryption_key" {
for_each = var.encryption != null ? [""] : []
content {
raw_key = var.encryption.disk_encryption_key_raw
# TODO: check if self link works here
kms_key_name = lookup(
local.ctx_kms_keys,
var.encryption.kms_key_self_link,
var.encryption.kms_key_self_link
)
}
}
}