diff --git a/community/modules/compute/schedmd-slurm-gcp-v6-nodeset-dynamic/README.md b/community/modules/compute/schedmd-slurm-gcp-v6-nodeset-dynamic/README.md index ebf4542019..b40bfa2583 100644 --- a/community/modules/compute/schedmd-slurm-gcp-v6-nodeset-dynamic/README.md +++ b/community/modules/compute/schedmd-slurm-gcp-v6-nodeset-dynamic/README.md @@ -84,7 +84,7 @@ No resources. | Name | Description | Type | Default | Required | | ---- | ----------- | ---- | ------- | :------: | | [access\_config](#input\_access\_config) | Access configurations, i.e. IPs via which the VM instance can be accessed via the Internet. |
list(object({
nat_ip = string
network_tier = string
})) | `[]` | no |
-| [additional\_disks](#input\_additional\_disks) | Configurations of additional disks to be included on the partition nodes. | list(object({
disk_name = string
device_name = string
disk_size_gb = number
disk_type = string
disk_labels = map(string)
auto_delete = bool
boot = bool
})) | `[]` | no |
+| [additional\_disks](#input\_additional\_disks) | Configurations of additional disks to be included on the partition nodes. | list(object({
disk_name = string
device_name = string
disk_size_gb = number
disk_type = string
disk_storage_pool = optional(string)
disk_labels = map(string)
auto_delete = bool
boot = bool
})) | `[]` | no |
| [additional\_networks](#input\_additional\_networks) | Additional network interface details for GCE, if any. | list(object({
network = string
subnetwork = string
subnetwork_project = string
network_ip = string
nic_type = string
stack_type = string
queue_count = number
access_config = list(object({
nat_ip = string
network_tier = string
}))
ipv6_access_config = list(object({
network_tier = string
}))
alias_ip_range = list(object({
ip_cidr_range = string
subnetwork_range_name = string
}))
})) | `[]` | no |
| [advanced\_machine\_features](#input\_advanced\_machine\_features) | See https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance_template#nested_advanced_machine_features | object({
enable_nested_virtualization = optional(bool)
threads_per_core = optional(number)
turbo_mode = optional(string)
visible_core_count = optional(number)
performance_monitoring_unit = optional(string)
enable_uefi_networking = optional(bool)
}) | {
"threads_per_core": 1
} | no |
| [allow\_automatic\_updates](#input\_allow\_automatic\_updates) | If false, disables automatic system package updates on the created instances. This feature islist(object({
nat_ip = string
network_tier = string
})) | `[]` | no |
-| [additional\_disks](#input\_additional\_disks) | Configurations of additional disks to be included on the partition nodes. | list(object({
disk_name = optional(string)
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
disk_labels = optional(map(string))
auto_delete = optional(bool)
boot = optional(bool)
disk_resource_manager_tags = optional(map(string))
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
})) | `[]` | no |
+| [additional\_disks](#input\_additional\_disks) | Configurations of additional disks to be included on the partition nodes. | list(object({
disk_name = optional(string)
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
disk_storage_pool = optional(string)
disk_labels = optional(map(string))
auto_delete = optional(bool)
boot = optional(bool)
disk_resource_manager_tags = optional(map(string))
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
})) | `[]` | no |
| [additional\_networks](#input\_additional\_networks) | Additional network interface details for GCE, if any. | list(object({
network = optional(string)
subnetwork = string
subnetwork_project = optional(string)
network_ip = optional(string, "")
nic_type = optional(string)
stack_type = optional(string)
queue_count = optional(number)
access_config = optional(list(object({
nat_ip = string
network_tier = string
})), [])
ipv6_access_config = optional(list(object({
network_tier = string
})), [])
alias_ip_range = optional(list(object({
ip_cidr_range = string
subnetwork_range_name = string
})), [])
})) | `[]` | no |
| [advanced\_machine\_features](#input\_advanced\_machine\_features) | See https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance_template#nested_advanced_machine_features | object({
enable_nested_virtualization = optional(bool)
threads_per_core = optional(number)
turbo_mode = optional(string)
visible_core_count = optional(number)
performance_monitoring_unit = optional(string)
enable_uefi_networking = optional(bool)
}) | {
"threads_per_core": 1
} | no |
| [allow\_automatic\_updates](#input\_allow\_automatic\_updates) | If false, disables automatic system package updates on the created instances. This feature isobject({
enabled = optional(bool, true)
max_run_duration = optional(number, 604800) # one week
use_job_duration = optional(bool, false)
use_bulk_insert = optional(bool, false)
}) | {
"enabled": false
} | no |
| [enable\_confidential\_vm](#input\_enable\_confidential\_vm) | Enable the Confidential VM configuration. Note: the instance image must support option. | `bool` | `false` | no |
diff --git a/community/modules/compute/schedmd-slurm-gcp-v6-nodeset/main.tf b/community/modules/compute/schedmd-slurm-gcp-v6-nodeset/main.tf
index fcba71516c..e9116faee2 100644
--- a/community/modules/compute/schedmd-slurm-gcp-v6-nodeset/main.tf
+++ b/community/modules/compute/schedmd-slurm-gcp-v6-nodeset/main.tf
@@ -49,6 +49,7 @@ locals {
disk_name = ad.disk_name
device_name = ad.device_name
disk_type = ad.disk_type
+ disk_storage_pool = ad.disk_storage_pool
disk_size_gb = ad.disk_size_gb
disk_labels = merge(ad.disk_labels, local.labels)
auto_delete = ad.auto_delete
@@ -85,6 +86,7 @@ locals {
disk_labels = merge(local.labels, var.disk_labels)
disk_size_gb = var.disk_size_gb
disk_type = var.disk_type
+ disk_storage_pool = var.disk_storage_pool
disk_resource_manager_tags = var.disk_resource_manager_tags
additional_disks = local.additional_disks
diff --git a/community/modules/compute/schedmd-slurm-gcp-v6-nodeset/variables.tf b/community/modules/compute/schedmd-slurm-gcp-v6-nodeset/variables.tf
index 95e8967497..8684806276 100644
--- a/community/modules/compute/schedmd-slurm-gcp-v6-nodeset/variables.tf
+++ b/community/modules/compute/schedmd-slurm-gcp-v6-nodeset/variables.tf
@@ -142,6 +142,12 @@ variable "disk_type" {
default = "pd-standard"
}
+variable "disk_storage_pool" {
+ description = "Storage pool to use for the node's boot disk. Note that storage pools are only supported with Hyperdisk types (balanced or throughput). You must provide an existing storage pool, as this module does not create new ones."
+ type = string
+ default = null
+}
+
variable "disk_size_gb" {
description = "Size of boot disk to create for the partition compute nodes."
type = number
@@ -192,6 +198,7 @@ variable "additional_disks" {
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
+ disk_storage_pool = optional(string)
disk_labels = optional(map(string))
auto_delete = optional(bool)
boot = optional(bool)
diff --git a/community/modules/compute/schedmd-slurm-gcp-v6-partition/README.md b/community/modules/compute/schedmd-slurm-gcp-v6-partition/README.md
index f0b8901b5a..0b57dc88ed 100644
--- a/community/modules/compute/schedmd-slurm-gcp-v6-partition/README.md
+++ b/community/modules/compute/schedmd-slurm-gcp-v6-partition/README.md
@@ -85,7 +85,7 @@ No resources.
| [exclusive](#input\_exclusive) | Exclusive job access to nodes. When set to true nodes execute single job and are deletedlist(object({
server_ip = string,
remote_mount = string,
local_mount = string,
local_mount_owner = optional(string)
local_mount_permissions = optional(string)
fs_type = string,
mount_options = string,
client_install_runner = map(string)
mount_runner = map(string)
})) | `[]` | no |
-| [nodeset](#input\_nodeset) | A list of nodesets.list(object({
node_count_static = optional(number, 0)
node_count_dynamic_max = optional(number, 1)
node_conf = optional(map(string), {})
nodeset_name = string
additional_disks = optional(list(object({
disk_name = optional(string)
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
disk_labels = optional(map(string), {})
auto_delete = optional(bool, true)
boot = optional(bool, false)
disk_resource_manager_tags = optional(map(string), {})
})), [])
bandwidth_tier = optional(string, "platform_default")
can_ip_forward = optional(bool, false)
disk_auto_delete = optional(bool, true)
disk_labels = optional(map(string), {})
disk_resource_manager_tags = optional(map(string), {})
disk_size_gb = optional(number)
disk_type = optional(string)
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
enable_confidential_vm = optional(bool, false)
confidential_instance_type = optional(string)
enable_placement = optional(bool, false)
placement_max_distance = optional(number, null)
enable_oslogin = optional(bool, true)
enable_shielded_vm = optional(bool, false)
enable_maintenance_reservation = optional(bool, false)
enable_opportunistic_maintenance = optional(bool, false)
gpu = optional(object({
count = number
type = string
}))
accelerator_topology = optional(string, null)
dws_flex = object({
enabled = bool
max_run_duration = number
use_job_duration = bool
use_bulk_insert = bool
})
labels = optional(map(string), {})
machine_type = optional(string)
advanced_machine_features = object({
enable_nested_virtualization = optional(bool)
threads_per_core = optional(number)
turbo_mode = optional(string)
visible_core_count = optional(number)
performance_monitoring_unit = optional(string)
enable_uefi_networking = optional(bool)
})
maintenance_interval = optional(string)
instance_properties_json = string
metadata = optional(map(string), {})
min_cpu_platform = optional(string)
network_tier = optional(string, "STANDARD")
network_storage = optional(list(object({
server_ip = string
remote_mount = string
local_mount = string
local_mount_owner = optional(string)
local_mount_permissions = optional(string)
fs_type = string
mount_options = string
client_install_runner = optional(map(string))
mount_runner = optional(map(string))
})), [])
on_host_maintenance = optional(string)
preemptible = optional(bool, false)
region = optional(string)
resource_manager_tags = optional(map(string), {})
service_account = optional(object({
email = optional(string)
scopes = optional(list(string), ["https://www.googleapis.com/auth/cloud-platform"])
}))
shielded_instance_config = optional(object({
enable_integrity_monitoring = optional(bool, true)
enable_secure_boot = optional(bool, true)
enable_vtpm = optional(bool, true)
}))
source_image_family = optional(string)
source_image_project = optional(string)
source_image = optional(string)
subnetwork_self_link = string
additional_networks = optional(list(object({
network = string
subnetwork = string
subnetwork_project = string
network_ip = string
nic_type = string
stack_type = string
queue_count = number
access_config = list(object({
nat_ip = string
network_tier = string
}))
ipv6_access_config = list(object({
network_tier = string
}))
alias_ip_range = list(object({
ip_cidr_range = string
subnetwork_range_name = string
}))
})))
access_config = optional(list(object({
nat_ip = string
network_tier = string
})))
spot = optional(bool, false)
tags = optional(list(string), [])
termination_action = optional(string)
reservation_name = optional(string)
future_reservation = string
startup_script = optional(list(object({
filename = string
content = string })), [])
zone_target_shape = string
zone_policy_allow = set(string)
zone_policy_deny = set(string)
})) | `[]` | no |
+| [nodeset](#input\_nodeset) | A list of nodesets.list(object({
node_count_static = optional(number, 0)
node_count_dynamic_max = optional(number, 1)
node_conf = optional(map(string), {})
nodeset_name = string
additional_disks = optional(list(object({
disk_name = optional(string)
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
disk_storage_pool = optional(string)
disk_labels = optional(map(string), {})
auto_delete = optional(bool, true)
boot = optional(bool, false)
disk_resource_manager_tags = optional(map(string), {})
})), [])
bandwidth_tier = optional(string, "platform_default")
can_ip_forward = optional(bool, false)
disk_auto_delete = optional(bool, true)
disk_labels = optional(map(string), {})
disk_resource_manager_tags = optional(map(string), {})
disk_size_gb = optional(number)
disk_type = optional(string)
disk_storage_pool = optional(string)
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
enable_confidential_vm = optional(bool, false)
confidential_instance_type = optional(string)
enable_placement = optional(bool, false)
placement_max_distance = optional(number, null)
enable_oslogin = optional(bool, true)
enable_shielded_vm = optional(bool, false)
enable_maintenance_reservation = optional(bool, false)
enable_opportunistic_maintenance = optional(bool, false)
gpu = optional(object({
count = number
type = string
}))
accelerator_topology = optional(string, null)
dws_flex = object({
enabled = bool
max_run_duration = number
use_job_duration = bool
use_bulk_insert = bool
})
labels = optional(map(string), {})
machine_type = optional(string)
advanced_machine_features = object({
enable_nested_virtualization = optional(bool)
threads_per_core = optional(number)
turbo_mode = optional(string)
visible_core_count = optional(number)
performance_monitoring_unit = optional(string)
enable_uefi_networking = optional(bool)
})
maintenance_interval = optional(string)
instance_properties_json = string
metadata = optional(map(string), {})
min_cpu_platform = optional(string)
network_tier = optional(string, "STANDARD")
network_storage = optional(list(object({
server_ip = string
remote_mount = string
local_mount = string
local_mount_owner = optional(string)
local_mount_permissions = optional(string)
fs_type = string
mount_options = string
client_install_runner = optional(map(string))
mount_runner = optional(map(string))
})), [])
on_host_maintenance = optional(string)
preemptible = optional(bool, false)
region = optional(string)
resource_manager_tags = optional(map(string), {})
service_account = optional(object({
email = optional(string)
scopes = optional(list(string), ["https://www.googleapis.com/auth/cloud-platform"])
}))
shielded_instance_config = optional(object({
enable_integrity_monitoring = optional(bool, true)
enable_secure_boot = optional(bool, true)
enable_vtpm = optional(bool, true)
}))
source_image_family = optional(string)
source_image_project = optional(string)
source_image = optional(string)
subnetwork_self_link = string
additional_networks = optional(list(object({
network = string
subnetwork = string
subnetwork_project = string
network_ip = string
nic_type = string
stack_type = string
queue_count = number
access_config = list(object({
nat_ip = string
network_tier = string
}))
ipv6_access_config = list(object({
network_tier = string
}))
alias_ip_range = list(object({
ip_cidr_range = string
subnetwork_range_name = string
}))
})))
access_config = optional(list(object({
nat_ip = string
network_tier = string
})))
spot = optional(bool, false)
tags = optional(list(string), [])
termination_action = optional(string)
reservation_name = optional(string)
future_reservation = string
startup_script = optional(list(object({
filename = string
content = string })), [])
zone_target_shape = string
zone_policy_allow = set(string)
zone_policy_deny = set(string)
})) | `[]` | no |
| [nodeset\_dyn](#input\_nodeset\_dyn) | Defines dynamic nodesets, as a list. | list(object({
nodeset_name = string
nodeset_feature = string
})) | `[]` | no |
| [nodeset\_tpu](#input\_nodeset\_tpu) | Define TPU nodesets, as a list. | list(object({
node_count_static = optional(number, 0)
node_count_dynamic_max = optional(number, 5)
nodeset_name = string
enable_public_ip = optional(bool, false)
node_type = string
accelerator_config = optional(object({
topology = string
version = string
}), {
topology = ""
version = ""
})
tf_version = string
preemptible = optional(bool, false)
preserve_tpu = optional(bool, false)
zone = string
data_disks = optional(list(string), [])
docker_image = optional(string, "")
network_storage = optional(list(object({
server_ip = string
remote_mount = string
local_mount = string
local_mount_owner = optional(string)
local_mount_permissions = optional(string)
fs_type = string
mount_options = string
})), [])
subnetwork = string
service_account = optional(object({
email = optional(string)
scopes = optional(list(string), ["https://www.googleapis.com/auth/cloud-platform"])
}))
project_id = string
reserved = optional(string, false)
})) | `[]` | no |
| [partition\_conf](#input\_partition\_conf) | Slurm partition configuration as a map.list(object({
nat_ip = string
network_tier = string
})) | `[]` | no |
-| [additional\_disks](#input\_additional\_disks) | List of maps of disks. | list(object({
source = optional(string)
disk_name = optional(string)
device_name = string
disk_type = optional(string)
disk_size_gb = optional(number)
disk_labels = map(string)
auto_delete = bool
boot = bool
disk_resource_manager_tags = optional(map(string))
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
})) | `[]` | no |
+| [additional\_disks](#input\_additional\_disks) | List of maps of disks. | list(object({
source = optional(string)
disk_name = optional(string)
device_name = string
disk_type = optional(string)
disk_storage_pool = optional(string)
disk_size_gb = optional(number)
disk_labels = map(string)
auto_delete = bool
boot = bool
disk_resource_manager_tags = optional(map(string))
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
})) | `[]` | no |
| [additional\_networks](#input\_additional\_networks) | Additional network interface details for GCE, if any. | list(object({
network = string
subnetwork = string
subnetwork_project = string
network_ip = string
nic_type = string
stack_type = optional(string)
access_config = list(object({
nat_ip = string
network_tier = string
}))
ipv6_access_config = list(object({
network_tier = string
}))
})) | `[]` | no |
| [advanced\_machine\_features](#input\_advanced\_machine\_features) | See https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance_template#nested_advanced_machine_features | object({
enable_nested_virtualization = optional(bool)
threads_per_core = optional(number)
turbo_mode = optional(string)
visible_core_count = optional(number)
performance_monitoring_unit = optional(string)
enable_uefi_networking = optional(bool)
}) | n/a | yes |
| [bandwidth\_tier](#input\_bandwidth\_tier) | Tier 1 bandwidth increases the maximum egress bandwidth for VMs.list(object({
nat_ip = string
network_tier = string
})) | `[]` | no |
-| [additional\_disks](#input\_additional\_disks) | List of maps of additional disks. See https://www.terraform.io/docs/providers/google/r/compute_instance_template#disk_name | list(object({
source = optional(string)
disk_name = optional(string)
device_name = string
auto_delete = bool
boot = bool
disk_size_gb = optional(number)
disk_type = optional(string)
disk_labels = map(string)
disk_resource_manager_tags = map(string)
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
})) | `[]` | no |
+| [additional\_disks](#input\_additional\_disks) | List of maps of additional disks. See https://www.terraform.io/docs/providers/google/r/compute_instance_template#disk_name | list(object({
source = optional(string)
disk_name = optional(string)
device_name = string
auto_delete = bool
boot = bool
disk_size_gb = optional(number)
disk_type = optional(string)
disk_storage_pool = optional(string)
disk_labels = map(string)
disk_resource_manager_tags = map(string)
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
})) | `[]` | no |
| [additional\_networks](#input\_additional\_networks) | Additional network interface details for GCE, if any. | list(object({
network = string
subnetwork = string
subnetwork_project = string
network_ip = string
nic_type = string
stack_type = optional(string)
access_config = list(object({
nat_ip = string
network_tier = string
}))
ipv6_access_config = list(object({
network_tier = string
}))
})) | `[]` | no |
| [advanced\_machine\_features](#input\_advanced\_machine\_features) | See https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance_template#nested_advanced_machine_features | object({
enable_nested_virtualization = optional(bool)
threads_per_core = optional(number)
turbo_mode = optional(string)
visible_core_count = optional(number)
performance_monitoring_unit = optional(string)
enable_uefi_networking = optional(bool)
}) | n/a | yes |
| [alias\_ip\_range](#input\_alias\_ip\_range) | An array of alias IP ranges for this network interface. Can only be specified for network interfaces on subnet-mode networks.object({
ip_cidr_range = string
subnetwork_range_name = string
}) | `null` | no |
@@ -45,6 +45,7 @@
| [disk\_labels](#input\_disk\_labels) | Labels to be assigned to boot disk, provided as a map | `map(string)` | `{}` | no |
| [disk\_resource\_manager\_tags](#input\_disk\_resource\_manager\_tags) | (Optional) A set of key/value resource manager tag pairs to bind to the instance disks. Keys must be in the format tagKeys/{tag\_key\_id}, and values are in the format tagValues/456. | `map(string)` | `{}` | no |
| [disk\_size\_gb](#input\_disk\_size\_gb) | Boot disk size in GB | `string` | `"100"` | no |
+| [disk\_storage\_pool](#input\_disk\_storage\_pool) | Storage pool to use for the node's boot disk. Note that storage pools are only supported with Hyperdisk types (balanced or throughput). You must provide an existing storage pool, as this module does not create new ones. | `string` | `null` | no |
| [disk\_type](#input\_disk\_type) | Boot disk type, can be either pd-ssd, local-ssd, or pd-standard | `string` | `"pd-standard"` | no |
| [enable\_confidential\_vm](#input\_enable\_confidential\_vm) | Whether to enable the Confidential VM configuration on the instance. Note that the instance image must support Confidential VMs. See https://cloud.google.com/compute/docs/images | `bool` | `false` | no |
| [enable\_shielded\_vm](#input\_enable\_shielded\_vm) | Whether to enable the Shielded VM configuration on the instance. Note that the instance image must support Shielded VMs. See https://cloud.google.com/compute/docs/images | `bool` | `false` | no |
diff --git a/community/modules/internal/slurm-gcp/internal_instance_template/main.tf b/community/modules/internal/slurm-gcp/internal_instance_template/main.tf
index cbff8bfbe8..332a888237 100644
--- a/community/modules/internal/slurm-gcp/internal_instance_template/main.tf
+++ b/community/modules/internal/slurm-gcp/internal_instance_template/main.tf
@@ -33,6 +33,7 @@ locals {
source_image = var.source_image != "" ? format("${local.source_image_project}/${local.source_image}") : format("${local.source_image_project}/${local.source_image_family}")
disk_size_gb = var.disk_size_gb
disk_type = var.disk_type
+ disk_storage_pool = var.disk_storage_pool
disk_labels = var.disk_labels
auto_delete = var.auto_delete
disk_resource_manager_tags = var.disk_resource_manager_tags
@@ -105,6 +106,7 @@ resource "google_compute_instance_template" "tpl" {
disk_name = lookup(disk.value, "disk_name", null)
disk_size_gb = lookup(disk.value, "disk_size_gb", lookup(disk.value, "disk_type", null) == "local-ssd" ? "375" : null)
disk_type = lookup(disk.value, "disk_type", null)
+ storage_pool = try(disk.value.disk_storage_pool, null) == "" ? null : try(disk.value.disk_storage_pool, null)
interface = lookup(disk.value, "interface", lookup(disk.value, "disk_type", null) == "local-ssd" ? "NVME" : null)
mode = lookup(disk.value, "mode", null)
source = lookup(disk.value, "source", null)
diff --git a/community/modules/internal/slurm-gcp/internal_instance_template/variables.tf b/community/modules/internal/slurm-gcp/internal_instance_template/variables.tf
index ed54b86737..a2e7862ecd 100644
--- a/community/modules/internal/slurm-gcp/internal_instance_template/variables.tf
+++ b/community/modules/internal/slurm-gcp/internal_instance_template/variables.tf
@@ -154,6 +154,12 @@ variable "disk_type" {
default = "pd-standard"
}
+variable "disk_storage_pool" {
+ description = "Storage pool to use for the node's boot disk. Note that storage pools are only supported with Hyperdisk types (balanced or throughput). You must provide an existing storage pool, as this module does not create new ones."
+ type = string
+ default = null
+}
+
variable "disk_labels" {
description = "Labels to be assigned to boot disk, provided as a map"
type = map(string)
@@ -202,6 +208,7 @@ variable "additional_disks" {
boot = bool
disk_size_gb = optional(number)
disk_type = optional(string)
+ disk_storage_pool = optional(string)
disk_labels = map(string)
disk_resource_manager_tags = map(string)
disk_encryption_key = optional(string)
diff --git a/community/modules/internal/slurm-gcp/login/README.md b/community/modules/internal/slurm-gcp/login/README.md
index fa2f3ff8ff..c0d1df4f12 100644
--- a/community/modules/internal/slurm-gcp/login/README.md
+++ b/community/modules/internal/slurm-gcp/login/README.md
@@ -31,7 +31,7 @@
| Name | Description | Type | Default | Required |
| ---- | ----------- | ---- | ------- | :------: |
| [internal\_startup\_script](#input\_internal\_startup\_script) | FOR INTERNAL TOOLKIT USAGE ONLY. | `string` | `null` | no |
-| [login\_nodes](#input\_login\_nodes) | Slurm login instance definitions. | object({
group_name = string
access_config = optional(list(object({
nat_ip = string
network_tier = string
})))
additional_disks = optional(list(object({
disk_name = optional(string)
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
disk_labels = optional(map(string), {})
auto_delete = optional(bool, true)
boot = optional(bool, false)
disk_resource_manager_tags = optional(map(string), {})
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
})), [])
additional_networks = optional(list(object({
access_config = optional(list(object({
nat_ip = string
network_tier = string
})), [])
alias_ip_range = optional(list(object({
ip_cidr_range = string
subnetwork_range_name = string
})), [])
ipv6_access_config = optional(list(object({
network_tier = string
})), [])
network = optional(string)
network_ip = optional(string, "")
nic_type = optional(string)
queue_count = optional(number)
stack_type = optional(string)
subnetwork = optional(string)
subnetwork_project = optional(string)
})), [])
bandwidth_tier = optional(string, "platform_default")
can_ip_forward = optional(bool, false)
disk_auto_delete = optional(bool, true)
disk_labels = optional(map(string), {})
disk_resource_manager_tags = optional(map(string), {})
disk_size_gb = optional(number)
disk_type = optional(string, "n1-standard-1")
enable_confidential_vm = optional(bool, false)
enable_oslogin = optional(bool, true)
enable_shielded_vm = optional(bool, false)
gpu = optional(object({
count = number
type = string
}))
labels = optional(map(string), {})
machine_type = optional(string)
advanced_machine_features = object({
enable_nested_virtualization = optional(bool)
threads_per_core = optional(number)
turbo_mode = optional(string)
visible_core_count = optional(number)
performance_monitoring_unit = optional(string)
enable_uefi_networking = optional(bool)
})
metadata = optional(map(string), {})
min_cpu_platform = optional(string)
num_instances = optional(number, 1)
on_host_maintenance = optional(string)
preemptible = optional(bool, false)
region = optional(string)
resource_manager_tags = optional(map(string), {})
service_account = optional(object({
email = optional(string)
scopes = optional(list(string), ["https://www.googleapis.com/auth/cloud-platform"])
}))
shielded_instance_config = optional(object({
enable_integrity_monitoring = optional(bool, true)
enable_secure_boot = optional(bool, true)
enable_vtpm = optional(bool, true)
}))
source_image_family = optional(string)
source_image_project = optional(string)
source_image = optional(string)
static_ips = optional(list(string), [])
subnetwork = string
spot = optional(bool, false)
tags = optional(list(string), [])
zone = optional(string)
termination_action = optional(string)
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
}) | n/a | yes |
+| [login\_nodes](#input\_login\_nodes) | Slurm login instance definitions. | object({
group_name = string
access_config = optional(list(object({
nat_ip = string
network_tier = string
})))
additional_disks = optional(list(object({
disk_name = optional(string)
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
disk_storage_pool = optional(string)
disk_labels = optional(map(string), {})
auto_delete = optional(bool, true)
boot = optional(bool, false)
disk_resource_manager_tags = optional(map(string), {})
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
})), [])
additional_networks = optional(list(object({
access_config = optional(list(object({
nat_ip = string
network_tier = string
})), [])
alias_ip_range = optional(list(object({
ip_cidr_range = string
subnetwork_range_name = string
})), [])
ipv6_access_config = optional(list(object({
network_tier = string
})), [])
network = optional(string)
network_ip = optional(string, "")
nic_type = optional(string)
queue_count = optional(number)
stack_type = optional(string)
subnetwork = optional(string)
subnetwork_project = optional(string)
})), [])
bandwidth_tier = optional(string, "platform_default")
can_ip_forward = optional(bool, false)
disk_auto_delete = optional(bool, true)
disk_labels = optional(map(string), {})
disk_resource_manager_tags = optional(map(string), {})
disk_size_gb = optional(number)
disk_type = optional(string, "n1-standard-1")
disk_storage_pool = optional(string)
enable_confidential_vm = optional(bool, false)
enable_oslogin = optional(bool, true)
enable_shielded_vm = optional(bool, false)
gpu = optional(object({
count = number
type = string
}))
labels = optional(map(string), {})
machine_type = optional(string)
advanced_machine_features = object({
enable_nested_virtualization = optional(bool)
threads_per_core = optional(number)
turbo_mode = optional(string)
visible_core_count = optional(number)
performance_monitoring_unit = optional(string)
enable_uefi_networking = optional(bool)
})
metadata = optional(map(string), {})
min_cpu_platform = optional(string)
num_instances = optional(number, 1)
on_host_maintenance = optional(string)
preemptible = optional(bool, false)
region = optional(string)
resource_manager_tags = optional(map(string), {})
service_account = optional(object({
email = optional(string)
scopes = optional(list(string), ["https://www.googleapis.com/auth/cloud-platform"])
}))
shielded_instance_config = optional(object({
enable_integrity_monitoring = optional(bool, true)
enable_secure_boot = optional(bool, true)
enable_vtpm = optional(bool, true)
}))
source_image_family = optional(string)
source_image_project = optional(string)
source_image = optional(string)
static_ips = optional(list(string), [])
subnetwork = string
spot = optional(bool, false)
tags = optional(list(string), [])
zone = optional(string)
termination_action = optional(string)
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
}) | n/a | yes |
| [network\_storage](#input\_network\_storage) | Storage to mounted on login instanceslist(object({
server_ip = string
remote_mount = string
local_mount = string
local_mount_owner = optional(string)
local_mount_permissions = optional(string)
fs_type = string
mount_options = string
})) | `[]` | no |
| [project\_id](#input\_project\_id) | Project ID to create resources in. | `string` | n/a | yes |
| [replace\_trigger](#input\_replace\_trigger) | Trigger value to replace the instances. | `string` | `""` | no |
diff --git a/community/modules/internal/slurm-gcp/login/main.tf b/community/modules/internal/slurm-gcp/login/main.tf
index 23b2b5f56b..4b2d904763 100644
--- a/community/modules/internal/slurm-gcp/login/main.tf
+++ b/community/modules/internal/slurm-gcp/login/main.tf
@@ -32,6 +32,7 @@ module "template" {
disk_resource_manager_tags = var.login_nodes.disk_resource_manager_tags
disk_size_gb = var.login_nodes.disk_size_gb
disk_type = var.login_nodes.disk_type
+ disk_storage_pool = var.login_nodes.disk_storage_pool
enable_confidential_vm = var.login_nodes.enable_confidential_vm
enable_oslogin = var.login_nodes.enable_oslogin
enable_shielded_vm = var.login_nodes.enable_shielded_vm
diff --git a/community/modules/internal/slurm-gcp/login/variables.tf b/community/modules/internal/slurm-gcp/login/variables.tf
index f21de00cae..7f248598cb 100644
--- a/community/modules/internal/slurm-gcp/login/variables.tf
+++ b/community/modules/internal/slurm-gcp/login/variables.tf
@@ -58,6 +58,7 @@ variable "login_nodes" {
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
+ disk_storage_pool = optional(string)
disk_labels = optional(map(string), {})
auto_delete = optional(bool, true)
boot = optional(bool, false)
@@ -92,6 +93,7 @@ variable "login_nodes" {
disk_resource_manager_tags = optional(map(string), {})
disk_size_gb = optional(number)
disk_type = optional(string, "n1-standard-1")
+ disk_storage_pool = optional(string)
enable_confidential_vm = optional(bool, false)
enable_oslogin = optional(bool, true)
enable_shielded_vm = optional(bool, false)
diff --git a/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/README.md b/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/README.md
index cc8b1aea69..1fd753c60e 100644
--- a/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/README.md
+++ b/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/README.md
@@ -439,7 +439,7 @@ limitations under the License.
| Name | Description | Type | Default | Required |
| ---- | ----------- | ---- | ------- | :------: |
-| [additional\_disks](#input\_additional\_disks) | List of maps of disks. | list(object({
disk_name = optional(string)
device_name = optional(string)
disk_type = optional(string)
disk_size_gb = optional(number)
disk_labels = optional(map(string), {})
auto_delete = optional(bool, true)
boot = optional(bool, false)
disk_resource_manager_tags = optional(map(string), {})
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
})) | `[]` | no |
+| [additional\_disks](#input\_additional\_disks) | List of maps of disks. | list(object({
disk_name = optional(string)
device_name = optional(string)
disk_type = optional(string)
disk_storage_pool = optional(string)
disk_size_gb = optional(number)
disk_labels = optional(map(string), {})
auto_delete = optional(bool, true)
boot = optional(bool, false)
disk_resource_manager_tags = optional(map(string), {})
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
})) | `[]` | no |
| [additional\_networks](#input\_additional\_networks) | Additional network interface details for the controller, if any. | list(object({
access_config = optional(list(object({
nat_ip = string
network_tier = string
})), [])
alias_ip_range = optional(list(object({
ip_cidr_range = string
subnetwork_range_name = string
})), [])
ipv6_access_config = optional(list(object({
network_tier = string
})), [])
network = optional(string)
network_ip = optional(string, "")
nic_type = optional(string)
queue_count = optional(number)
stack_type = optional(string)
subnetwork = optional(string)
subnetwork_project = optional(string)
})) | `[]` | no |
| [advanced\_machine\_features](#input\_advanced\_machine\_features) | See https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance_template#nested_advanced_machine_features | object({
enable_nested_virtualization = optional(bool)
threads_per_core = optional(number)
turbo_mode = optional(string)
visible_core_count = optional(number)
performance_monitoring_unit = optional(string)
enable_uefi_networking = optional(bool)
}) | {
"threads_per_core": 1
} | no |
| [allow\_automatic\_updates](#input\_allow\_automatic\_updates) | If false, disables automatic system package updates on the created instances. This feature islist(object({
server_ip = string,
remote_mount = string,
local_mount = string,
local_mount_owner = optional(string)
local_mount_permissions = optional(string)
fs_type = string,
mount_options = string,
})) | `[]` | no |
-| [login\_nodes](#input\_login\_nodes) | List of slurm login instance definitions. | list(object({
group_name = string
access_config = optional(list(object({
nat_ip = string
network_tier = string
})))
additional_disks = optional(list(object({
disk_name = optional(string)
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
disk_labels = optional(map(string), {})
auto_delete = optional(bool, true)
boot = optional(bool, false)
disk_resource_manager_tags = optional(map(string), {})
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
})), [])
additional_networks = optional(list(object({
access_config = optional(list(object({
nat_ip = string
network_tier = string
})), [])
alias_ip_range = optional(list(object({
ip_cidr_range = string
subnetwork_range_name = string
})), [])
ipv6_access_config = optional(list(object({
network_tier = string
})), [])
network = optional(string)
network_ip = optional(string, "")
nic_type = optional(string)
queue_count = optional(number)
stack_type = optional(string)
subnetwork = optional(string)
subnetwork_project = optional(string)
})), [])
bandwidth_tier = optional(string, "platform_default")
can_ip_forward = optional(bool, false)
disk_auto_delete = optional(bool, true)
disk_labels = optional(map(string), {})
disk_resource_manager_tags = optional(map(string), {})
disk_size_gb = optional(number)
disk_type = optional(string, "n1-standard-1")
enable_confidential_vm = optional(bool, false)
enable_oslogin = optional(bool, true)
enable_shielded_vm = optional(bool, false)
gpu = optional(object({
count = number
type = string
}))
labels = optional(map(string), {})
machine_type = optional(string)
advanced_machine_features = object({
enable_nested_virtualization = optional(bool)
threads_per_core = optional(number)
turbo_mode = optional(string)
visible_core_count = optional(number)
performance_monitoring_unit = optional(string)
enable_uefi_networking = optional(bool)
})
metadata = optional(map(string), {})
min_cpu_platform = optional(string)
num_instances = optional(number, 1)
on_host_maintenance = optional(string)
preemptible = optional(bool, false)
region = optional(string)
resource_manager_tags = optional(map(string), {})
service_account = optional(object({
email = optional(string)
scopes = optional(list(string), ["https://www.googleapis.com/auth/cloud-platform"])
}))
shielded_instance_config = optional(object({
enable_integrity_monitoring = optional(bool, true)
enable_secure_boot = optional(bool, true)
enable_vtpm = optional(bool, true)
}))
source_image_family = optional(string)
source_image_project = optional(string)
source_image = optional(string)
static_ips = optional(list(string), [])
subnetwork = string
spot = optional(bool, false)
tags = optional(list(string), [])
zone = optional(string)
termination_action = optional(string)
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
startup_script = optional(list(object({
filename = string
content = string
})), [])
})) | `[]` | no |
+| [login\_nodes](#input\_login\_nodes) | List of slurm login instance definitions. | list(object({
group_name = string
access_config = optional(list(object({
nat_ip = string
network_tier = string
})))
additional_disks = optional(list(object({
disk_name = optional(string)
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
disk_storage_pool = optional(string)
disk_labels = optional(map(string), {})
auto_delete = optional(bool, true)
boot = optional(bool, false)
disk_resource_manager_tags = optional(map(string), {})
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
})), [])
additional_networks = optional(list(object({
access_config = optional(list(object({
nat_ip = string
network_tier = string
})), [])
alias_ip_range = optional(list(object({
ip_cidr_range = string
subnetwork_range_name = string
})), [])
ipv6_access_config = optional(list(object({
network_tier = string
})), [])
network = optional(string)
network_ip = optional(string, "")
nic_type = optional(string)
queue_count = optional(number)
stack_type = optional(string)
subnetwork = optional(string)
subnetwork_project = optional(string)
})), [])
bandwidth_tier = optional(string, "platform_default")
can_ip_forward = optional(bool, false)
disk_auto_delete = optional(bool, true)
disk_labels = optional(map(string), {})
disk_resource_manager_tags = optional(map(string), {})
disk_size_gb = optional(number)
disk_type = optional(string, "n1-standard-1")
disk_storage_pool = optional(string)
enable_confidential_vm = optional(bool, false)
enable_oslogin = optional(bool, true)
enable_shielded_vm = optional(bool, false)
gpu = optional(object({
count = number
type = string
}))
labels = optional(map(string), {})
machine_type = optional(string)
advanced_machine_features = object({
enable_nested_virtualization = optional(bool)
threads_per_core = optional(number)
turbo_mode = optional(string)
visible_core_count = optional(number)
performance_monitoring_unit = optional(string)
enable_uefi_networking = optional(bool)
})
metadata = optional(map(string), {})
min_cpu_platform = optional(string)
num_instances = optional(number, 1)
on_host_maintenance = optional(string)
preemptible = optional(bool, false)
region = optional(string)
resource_manager_tags = optional(map(string), {})
service_account = optional(object({
email = optional(string)
scopes = optional(list(string), ["https://www.googleapis.com/auth/cloud-platform"])
}))
shielded_instance_config = optional(object({
enable_integrity_monitoring = optional(bool, true)
enable_secure_boot = optional(bool, true)
enable_vtpm = optional(bool, true)
}))
source_image_family = optional(string)
source_image_project = optional(string)
source_image = optional(string)
static_ips = optional(list(string), [])
subnetwork = string
spot = optional(bool, false)
tags = optional(list(string), [])
zone = optional(string)
termination_action = optional(string)
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
startup_script = optional(list(object({
filename = string
content = string
})), [])
})) | `[]` | no |
| [login\_startup\_script](#input\_login\_startup\_script) | Startup script used by the login VMs. | `string` | `"# no-op"` | no |
| [login\_startup\_scripts\_timeout](#input\_login\_startup\_scripts\_timeout) | The timeout (seconds) applied to each script in login\_startup\_scripts. Ifobject({
server_ip = string
remote_mount = string
fs_type = string
mount_options = string
}) | {
"fs_type": "nfs",
"mount_options": "",
"remote_mount": "/etc/munge/",
"server_ip": null
} | no |
| [network\_storage](#input\_network\_storage) | An array of network attached storage mounts to be configured on all instances. | list(object({
server_ip = string,
remote_mount = string,
local_mount = string,
local_mount_owner = optional(string)
local_mount_permissions = optional(string)
fs_type = string,
mount_options = string,
client_install_runner = optional(map(string))
mount_runner = optional(map(string))
})) | `[]` | no |
-| [nodeset](#input\_nodeset) | Define nodesets, as a list. | list(object({
node_count_static = optional(number, 0)
node_count_dynamic_max = optional(number, 1)
node_conf = optional(map(string), {})
nodeset_name = string
additional_disks = optional(list(object({
disk_name = optional(string)
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
disk_labels = optional(map(string), {})
auto_delete = optional(bool, true)
boot = optional(bool, false)
disk_resource_manager_tags = optional(map(string), {})
})), [])
bandwidth_tier = optional(string, "platform_default")
can_ip_forward = optional(bool, false)
disk_auto_delete = optional(bool, true)
disk_labels = optional(map(string), {})
disk_resource_manager_tags = optional(map(string), {})
disk_size_gb = optional(number)
disk_type = optional(string)
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
enable_confidential_vm = optional(bool, false)
confidential_instance_type = optional(string)
enable_placement = optional(bool, false)
placement_max_distance = optional(number, null)
enable_oslogin = optional(bool, true)
enable_shielded_vm = optional(bool, false)
enable_maintenance_reservation = optional(bool, false)
enable_opportunistic_maintenance = optional(bool, false)
gpu = optional(object({
count = number
type = string
}))
accelerator_topology = optional(string, null)
dws_flex = object({
enabled = bool
max_run_duration = number
use_job_duration = bool
use_bulk_insert = bool
})
labels = optional(map(string), {})
machine_type = optional(string)
advanced_machine_features = object({
enable_nested_virtualization = optional(bool)
threads_per_core = optional(number)
turbo_mode = optional(string)
visible_core_count = optional(number)
performance_monitoring_unit = optional(string)
enable_uefi_networking = optional(bool)
})
maintenance_interval = optional(string)
instance_properties_json = string
metadata = optional(map(string), {})
min_cpu_platform = optional(string)
network_tier = optional(string, "STANDARD")
network_storage = optional(list(object({
server_ip = string
remote_mount = string
local_mount = string
local_mount_owner = optional(string)
local_mount_permissions = optional(string)
fs_type = string
mount_options = string
client_install_runner = optional(map(string))
mount_runner = optional(map(string))
})), [])
on_host_maintenance = optional(string)
preemptible = optional(bool, false)
region = optional(string)
resource_manager_tags = optional(map(string), {})
service_account = optional(object({
email = optional(string)
scopes = optional(list(string), ["https://www.googleapis.com/auth/cloud-platform"])
}))
shielded_instance_config = optional(object({
enable_integrity_monitoring = optional(bool, true)
enable_secure_boot = optional(bool, true)
enable_vtpm = optional(bool, true)
}))
source_image_family = optional(string)
source_image_project = optional(string)
source_image = optional(string)
subnetwork_self_link = string
additional_networks = optional(list(object({
network = string
subnetwork = string
subnetwork_project = string
network_ip = string
nic_type = string
stack_type = string
queue_count = number
access_config = list(object({
nat_ip = string
network_tier = string
}))
ipv6_access_config = list(object({
network_tier = string
}))
alias_ip_range = list(object({
ip_cidr_range = string
subnetwork_range_name = string
}))
})))
access_config = optional(list(object({
nat_ip = string
network_tier = string
})))
spot = optional(bool, false)
tags = optional(list(string), [])
termination_action = optional(string)
reservation_name = optional(string)
future_reservation = string
startup_script = optional(list(object({
filename = string
content = string })), [])
zone_target_shape = string
zone_policy_allow = set(string)
zone_policy_deny = set(string)
})) | `[]` | no |
+| [nodeset](#input\_nodeset) | Define nodesets, as a list. | list(object({
node_count_static = optional(number, 0)
node_count_dynamic_max = optional(number, 1)
node_conf = optional(map(string), {})
nodeset_name = string
additional_disks = optional(list(object({
disk_name = optional(string)
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
disk_storage_pool = optional(string)
disk_labels = optional(map(string), {})
auto_delete = optional(bool, true)
boot = optional(bool, false)
disk_resource_manager_tags = optional(map(string), {})
})), [])
bandwidth_tier = optional(string, "platform_default")
can_ip_forward = optional(bool, false)
disk_auto_delete = optional(bool, true)
disk_labels = optional(map(string), {})
disk_resource_manager_tags = optional(map(string), {})
disk_size_gb = optional(number)
disk_type = optional(string)
disk_storage_pool = optional(string)
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
enable_confidential_vm = optional(bool, false)
confidential_instance_type = optional(string)
enable_placement = optional(bool, false)
placement_max_distance = optional(number, null)
enable_oslogin = optional(bool, true)
enable_shielded_vm = optional(bool, false)
enable_maintenance_reservation = optional(bool, false)
enable_opportunistic_maintenance = optional(bool, false)
gpu = optional(object({
count = number
type = string
}))
accelerator_topology = optional(string, null)
dws_flex = object({
enabled = bool
max_run_duration = number
use_job_duration = bool
use_bulk_insert = bool
})
labels = optional(map(string), {})
machine_type = optional(string)
advanced_machine_features = object({
enable_nested_virtualization = optional(bool)
threads_per_core = optional(number)
turbo_mode = optional(string)
visible_core_count = optional(number)
performance_monitoring_unit = optional(string)
enable_uefi_networking = optional(bool)
})
maintenance_interval = optional(string)
instance_properties_json = string
metadata = optional(map(string), {})
min_cpu_platform = optional(string)
network_tier = optional(string, "STANDARD")
network_storage = optional(list(object({
server_ip = string
remote_mount = string
local_mount = string
local_mount_owner = optional(string)
local_mount_permissions = optional(string)
fs_type = string
mount_options = string
client_install_runner = optional(map(string))
mount_runner = optional(map(string))
})), [])
on_host_maintenance = optional(string)
preemptible = optional(bool, false)
region = optional(string)
resource_manager_tags = optional(map(string), {})
service_account = optional(object({
email = optional(string)
scopes = optional(list(string), ["https://www.googleapis.com/auth/cloud-platform"])
}))
shielded_instance_config = optional(object({
enable_integrity_monitoring = optional(bool, true)
enable_secure_boot = optional(bool, true)
enable_vtpm = optional(bool, true)
}))
source_image_family = optional(string)
source_image_project = optional(string)
source_image = optional(string)
subnetwork_self_link = string
additional_networks = optional(list(object({
network = string
subnetwork = string
subnetwork_project = string
network_ip = string
nic_type = string
stack_type = string
queue_count = number
access_config = list(object({
nat_ip = string
network_tier = string
}))
ipv6_access_config = list(object({
network_tier = string
}))
alias_ip_range = list(object({
ip_cidr_range = string
subnetwork_range_name = string
}))
})))
access_config = optional(list(object({
nat_ip = string
network_tier = string
})))
spot = optional(bool, false)
tags = optional(list(string), [])
termination_action = optional(string)
reservation_name = optional(string)
future_reservation = string
startup_script = optional(list(object({
filename = string
content = string })), [])
zone_target_shape = string
zone_policy_allow = set(string)
zone_policy_deny = set(string)
})) | `[]` | no |
| [nodeset\_dyn](#input\_nodeset\_dyn) | Defines dynamic nodesets, as a list. | list(object({
nodeset_name = string
nodeset_feature = string
})) | `[]` | no |
| [nodeset\_tpu](#input\_nodeset\_tpu) | Define TPU nodesets, as a list. | list(object({
node_count_static = optional(number, 0)
node_count_dynamic_max = optional(number, 5)
nodeset_name = string
enable_public_ip = optional(bool, false)
node_type = string
accelerator_config = optional(object({
topology = string
version = string
}), {
topology = ""
version = ""
})
tf_version = string
preemptible = optional(bool, false)
preserve_tpu = optional(bool, false)
zone = string
data_disks = optional(list(string), [])
docker_image = optional(string, "")
network_storage = optional(list(object({
server_ip = string
remote_mount = string
local_mount = string
local_mount_owner = optional(string)
local_mount_permissions = optional(string)
fs_type = string
mount_options = string
client_install_runner = optional(map(string))
mount_runner = optional(map(string))
})), [])
subnetwork = string
service_account = optional(object({
email = optional(string)
scopes = optional(list(string), ["https://www.googleapis.com/auth/cloud-platform"])
}))
project_id = string
reserved = optional(string, false)
})) | `[]` | no |
| [on\_host\_maintenance](#input\_on\_host\_maintenance) | Instance availability Policy. | `string` | `"MIGRATE"` | no |
diff --git a/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/controller.tf b/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/controller.tf
index cf57527abf..e731051e31 100644
--- a/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/controller.tf
+++ b/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/controller.tf
@@ -25,6 +25,7 @@ locals {
disk_name = ad.disk_name
device_name = ad.device_name
disk_type = ad.disk_type
+ disk_storage_pool = ad.disk_storage_pool
disk_size_gb = ad.disk_size_gb
disk_labels = merge(ad.disk_labels, local.labels)
auto_delete = ad.auto_delete
@@ -39,6 +40,7 @@ locals {
source = google_compute_disk.controller_disk[0].name
device_name = google_compute_disk.controller_disk[0].name
disk_labels = null
+ disk_storage_pool = null
auto_delete = false
boot = false
disk_encryption_key = var.disk_encryption_key
@@ -111,6 +113,7 @@ module "slurm_controller_template" {
disk_labels = merge(var.disk_labels, local.labels)
disk_size_gb = var.disk_size_gb
disk_type = var.disk_type
+ disk_storage_pool = var.disk_storage_pool
disk_resource_manager_tags = var.disk_resource_manager_tags
additional_disks = concat(local.additional_disks, local.state_disk)
diff --git a/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/partition.tf b/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/partition.tf
index 0586752f15..8939e19773 100644
--- a/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/partition.tf
+++ b/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/partition.tf
@@ -47,6 +47,7 @@ module "slurm_nodeset_template" {
disk_resource_manager_tags = each.value.disk_resource_manager_tags
disk_size_gb = each.value.disk_size_gb
disk_type = each.value.disk_type
+ disk_storage_pool = each.value.disk_storage_pool
enable_confidential_vm = each.value.enable_confidential_vm
confidential_instance_type = each.value.confidential_instance_type
enable_oslogin = each.value.enable_oslogin
diff --git a/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/variables.tf b/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/variables.tf
index 21cde33754..e3f7b839be 100644
--- a/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/variables.tf
+++ b/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/variables.tf
@@ -146,6 +146,7 @@ variable "login_nodes" {
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
+ disk_storage_pool = optional(string)
disk_labels = optional(map(string), {})
auto_delete = optional(bool, true)
boot = optional(bool, false)
@@ -180,6 +181,7 @@ variable "login_nodes" {
disk_resource_manager_tags = optional(map(string), {})
disk_size_gb = optional(number)
disk_type = optional(string, "n1-standard-1")
+ disk_storage_pool = optional(string)
enable_confidential_vm = optional(bool, false)
enable_oslogin = optional(bool, true)
enable_shielded_vm = optional(bool, false)
@@ -252,6 +254,7 @@ variable "nodeset" {
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
+ disk_storage_pool = optional(string)
disk_labels = optional(map(string), {})
auto_delete = optional(bool, true)
boot = optional(bool, false)
@@ -264,6 +267,7 @@ variable "nodeset" {
disk_resource_manager_tags = optional(map(string), {})
disk_size_gb = optional(number)
disk_type = optional(string)
+ disk_storage_pool = optional(string)
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
enable_confidential_vm = optional(bool, false)
diff --git a/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/variables_controller_instance.tf b/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/variables_controller_instance.tf
index a5bbf727c4..22601f8c5f 100644
--- a/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/variables_controller_instance.tf
+++ b/community/modules/scheduler/schedmd-slurm-gcp-v6-controller/variables_controller_instance.tf
@@ -18,6 +18,12 @@ variable "disk_type" {
default = "pd-ssd"
}
+variable "disk_storage_pool" {
+ description = "Storage pool to use for the node's boot disk. Note that storage pools are only supported with Hyperdisk types (balanced or throughput). You must provide an existing storage pool, as this module does not create new ones."
+ type = string
+ default = null
+}
+
variable "disk_size_gb" {
type = number
description = "Boot disk size in GB."
@@ -55,6 +61,7 @@ variable "additional_disks" {
disk_name = optional(string)
device_name = optional(string)
disk_type = optional(string)
+ disk_storage_pool = optional(string)
disk_size_gb = optional(number)
disk_labels = optional(map(string), {})
auto_delete = optional(bool, true)
diff --git a/community/modules/scheduler/schedmd-slurm-gcp-v6-login/README.md b/community/modules/scheduler/schedmd-slurm-gcp-v6-login/README.md
index 1edbcc91a6..a5c20c4e0b 100644
--- a/community/modules/scheduler/schedmd-slurm-gcp-v6-login/README.md
+++ b/community/modules/scheduler/schedmd-slurm-gcp-v6-login/README.md
@@ -80,7 +80,7 @@ No resources.
| Name | Description | Type | Default | Required |
| ---- | ----------- | ---- | ------- | :------: |
-| [additional\_disks](#input\_additional\_disks) | List of maps of disks. | list(object({
disk_name = optional(string)
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
disk_labels = optional(map(string))
auto_delete = optional(bool)
boot = optional(bool)
disk_resource_manager_tags = optional(map(string))
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
})) | `[]` | no |
+| [additional\_disks](#input\_additional\_disks) | List of maps of disks. | list(object({
disk_name = optional(string)
device_name = optional(string)
disk_size_gb = optional(number)
disk_type = optional(string)
disk_storage_pool = optional(string)
disk_labels = optional(map(string))
auto_delete = optional(bool)
boot = optional(bool)
disk_resource_manager_tags = optional(map(string))
disk_encryption_key = optional(string)
disk_encryption_key_service_account = optional(string)
})) | `[]` | no |
| [additional\_networks](#input\_additional\_networks) | Additional network interface details for GCE, if any. | list(object({
access_config = optional(list(object({
nat_ip = string
network_tier = string
})), [])
alias_ip_range = optional(list(object({
ip_cidr_range = string
subnetwork_range_name = string
})), [])
ipv6_access_config = optional(list(object({
network_tier = string
})), [])
network = optional(string)
network_ip = optional(string, "")
nic_type = optional(string)
queue_count = optional(number)
stack_type = optional(string)
subnetwork = optional(string)
subnetwork_project = optional(string)
})) | `[]` | no |
| [advanced\_machine\_features](#input\_advanced\_machine\_features) | See https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance_template#nested_advanced_machine_features | object({
enable_nested_virtualization = optional(bool)
threads_per_core = optional(number)
turbo_mode = optional(string)
visible_core_count = optional(number)
performance_monitoring_unit = optional(string)
enable_uefi_networking = optional(bool)
}) | {
"threads_per_core": 1
} | no |
| [allow\_automatic\_updates](#input\_allow\_automatic\_updates) | If false, disables automatic system package updates on the created instances. This feature is