133 lines
4.7 KiB
HCL
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
|
|
)
|
|
|
|
}
|
|
}
|
|
}
|