299 lines
18 KiB
HCL
299 lines
18 KiB
HCL
/**
|
|
* Copyright 2022 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.
|
|
*/
|
|
|
|
# tfdoc:file:description Cloud Dataproc resource definition.
|
|
|
|
locals {
|
|
prefix = var.prefix == null ? "" : "${var.prefix}-"
|
|
}
|
|
|
|
resource "google_dataproc_cluster" "cluster" {
|
|
name = "${local.prefix}${var.name}"
|
|
project = var.project_id
|
|
region = var.region
|
|
graceful_decommission_timeout = var.dataproc_config.graceful_decommission_timeout
|
|
labels = var.labels
|
|
dynamic "cluster_config" {
|
|
for_each = var.dataproc_config.cluster_config == null ? [] : [""]
|
|
content {
|
|
staging_bucket = var.dataproc_config.cluster_config.staging_bucket
|
|
temp_bucket = var.dataproc_config.cluster_config.temp_bucket
|
|
dynamic "gce_cluster_config" {
|
|
for_each = var.dataproc_config.cluster_config.gce_cluster_config == null ? [] : [""]
|
|
content {
|
|
zone = var.dataproc_config.cluster_config.gce_cluster_config.zone
|
|
network = var.dataproc_config.cluster_config.gce_cluster_config.network
|
|
subnetwork = var.dataproc_config.cluster_config.gce_cluster_config.subnetwork
|
|
service_account = var.dataproc_config.cluster_config.gce_cluster_config.service_account
|
|
service_account_scopes = var.dataproc_config.cluster_config.gce_cluster_config.service_account_scopes
|
|
tags = var.dataproc_config.cluster_config.gce_cluster_config.tags
|
|
internal_ip_only = var.dataproc_config.cluster_config.gce_cluster_config.internal_ip_only
|
|
metadata = var.dataproc_config.cluster_config.gce_cluster_config.metadata
|
|
dynamic "reservation_affinity" {
|
|
for_each = var.dataproc_config.cluster_config.gce_cluster_config.reservation_affinity == null ? [] : [""]
|
|
content {
|
|
consume_reservation_type = var.dataproc_config.cluster_config.gce_cluster_config.reservation_affinity.consume_reservation_type
|
|
key = var.dataproc_config.cluster_config.gce_cluster_config.reservation_affinity.key
|
|
values = var.dataproc_config.cluster_config.gce_cluster_config.reservation_affinity.value
|
|
}
|
|
}
|
|
dynamic "node_group_affinity" {
|
|
for_each = var.dataproc_config.cluster_config.gce_cluster_config.node_group_affinity == null ? [] : [""]
|
|
content {
|
|
node_group_uri = var.dataproc_config.cluster_config.gce_cluster_config.node_group_uri
|
|
}
|
|
}
|
|
dynamic "shielded_instance_config" {
|
|
for_each = var.dataproc_config.cluster_config.gce_cluster_config.shielded_instance_config == null ? [] : [""]
|
|
content {
|
|
enable_secure_boot = var.dataproc_config.cluster_config.gce_cluster_config.shielded_instance_config.value.enable_secure_boot
|
|
enable_vtpm = var.dataproc_config.cluster_config.gce_cluster_config.shielded_instance_config.value.enable_vtpm
|
|
enable_integrity_monitoring = var.dataproc_config.cluster_config.gce_cluster_config.shielded_instance_config.value.enable_integrity_monitoring
|
|
}
|
|
}
|
|
}
|
|
}
|
|
dynamic "master_config" {
|
|
for_each = var.dataproc_config.cluster_config.master_config == null ? [] : [""]
|
|
content {
|
|
num_instances = var.dataproc_config.cluster_config.master_config.num_instances
|
|
machine_type = var.dataproc_config.cluster_config.master_config.machine_type
|
|
min_cpu_platform = var.dataproc_config.cluster_config.master_config.min_cpu_platform
|
|
image_uri = var.dataproc_config.cluster_config.master_config.image_uri
|
|
dynamic "disk_config" {
|
|
for_each = var.dataproc_config.cluster_config.master_config.disk_config == null ? [] : [""]
|
|
content {
|
|
boot_disk_type = var.dataproc_config.cluster_config.master_config.disk_config.boot_disk_type
|
|
boot_disk_size_gb = var.dataproc_config.cluster_config.master_config.disk_config.boot_disk_size_gb
|
|
num_local_ssds = var.dataproc_config.cluster_config.master_config.disk_config.num_local_ssds
|
|
}
|
|
}
|
|
dynamic "accelerators" {
|
|
for_each = var.dataproc_config.cluster_config.master_config.accelerators == null ? [] : [""]
|
|
content {
|
|
accelerator_type = var.dataproc_config.cluster_config.master_config.accelerators.accelerator_type
|
|
accelerator_count = var.dataproc_config.cluster_config.master_config.accelerators.accelerator_count
|
|
}
|
|
}
|
|
}
|
|
}
|
|
dynamic "worker_config" {
|
|
for_each = var.dataproc_config.cluster_config.worker_config == null ? [] : [""]
|
|
content {
|
|
num_instances = var.dataproc_config.cluster_config.worker_config.num_instances
|
|
machine_type = var.dataproc_config.cluster_config.worker_config.machine_type
|
|
min_cpu_platform = var.dataproc_config.cluster_config.worker_config.min_cpu_platform
|
|
dynamic "disk_config" {
|
|
for_each = var.dataproc_config.cluster_config.worker_config.disk_config == null ? [] : [""]
|
|
content {
|
|
boot_disk_type = var.dataproc_config.cluster_config.worker_config.disk_config.value.boot_disk_type
|
|
boot_disk_size_gb = var.dataproc_config.cluster_config.worker_config.disk_config.value.boot_disk_size_gb
|
|
num_local_ssds = var.dataproc_config.cluster_config.worker_config.disk_config.value.num_local_ssds
|
|
}
|
|
}
|
|
image_uri = var.dataproc_config.cluster_config.worker_config.image_uri
|
|
dynamic "accelerators" {
|
|
for_each = var.dataproc_config.cluster_config.worker_config.accelerators == null ? [] : [""]
|
|
content {
|
|
accelerator_type = var.dataproc_config.cluster_config.accelerators.accelerator_type
|
|
accelerator_count = var.dataproc_config.cluster_config.accelerators.accelerator_count
|
|
}
|
|
}
|
|
}
|
|
}
|
|
dynamic "preemptible_worker_config" {
|
|
for_each = var.dataproc_config.cluster_config.preemptible_worker_config == null ? [] : [""]
|
|
content {
|
|
num_instances = var.dataproc_config.cluster_config.preemptible_worker_config.num_instances
|
|
preemptibility = var.dataproc_config.cluster_config.preemptible_worker_config.preemptibility
|
|
dynamic "disk_config" {
|
|
for_each = var.dataproc_config.cluster_config.preemptible_worker_config.disk_config == null ? [] : [""]
|
|
content {
|
|
boot_disk_type = var.dataproc_config.cluster_config.disk_config.boot_disk_type
|
|
boot_disk_size_gb = var.dataproc_config.cluster_config.disk_config.boot_disk_size_gb
|
|
num_local_ssds = var.dataproc_config.cluster_config.disk_config.num_local_ssds
|
|
}
|
|
}
|
|
}
|
|
}
|
|
dynamic "software_config" {
|
|
for_each = var.dataproc_config.cluster_config.software_config == null ? [] : [""]
|
|
content {
|
|
image_version = var.dataproc_config.cluster_config.software_config.image_version
|
|
override_properties = var.dataproc_config.cluster_config.software_config.override_properties
|
|
optional_components = var.dataproc_config.cluster_config.software_config.optional_components
|
|
}
|
|
}
|
|
dynamic "security_config" {
|
|
for_each = var.dataproc_config.cluster_config.security_config == null ? [] : [""]
|
|
content {
|
|
dynamic "kerberos_config" {
|
|
for_each = try(var.dataproc_config.cluster_config.security_config.kerberos_config == null ? [] : [""], [])
|
|
content {
|
|
cross_realm_trust_admin_server = var.dataproc_config.cluster_config.kerberos_config.cross_realm_trust_admin_server
|
|
cross_realm_trust_kdc = var.dataproc_config.cluster_config.kerberos_config.cross_realm_trust_kdc
|
|
cross_realm_trust_realm = var.dataproc_config.cluster_config.kerberos_config.cross_realm_trust_realm
|
|
cross_realm_trust_shared_password_uri = var.dataproc_config.cluster_config.kerberos_config.cross_realm_trust_shared_password_uri
|
|
enable_kerberos = var.dataproc_config.cluster_config.kerberos_config.enable_kerberos
|
|
kdc_db_key_uri = var.dataproc_config.cluster_config.kerberos_config.kdc_db_key_uri
|
|
key_password_uri = var.dataproc_config.cluster_config.kerberos_config.key_password_uri
|
|
keystore_uri = var.dataproc_config.cluster_config.kerberos_config.keystore_uri
|
|
keystore_password_uri = var.dataproc_config.cluster_config.kerberos_config.keystore_password_uri
|
|
kms_key_uri = var.dataproc_config.cluster_config.kerberos_config.kms_key_uri
|
|
realm = var.dataproc_config.cluster_config.kerberos_config.realm
|
|
root_principal_password_uri = var.dataproc_config.cluster_config.kerberos_config.root_principal_password_uri
|
|
tgt_lifetime_hours = var.dataproc_config.cluster_config.kerberos_config.tgt_lifetime_hours
|
|
truststore_password_uri = var.dataproc_config.cluster_config.kerberos_config.truststore_password_uri
|
|
truststore_uri = var.dataproc_config.cluster_config.kerberos_config.truststore_uri
|
|
}
|
|
}
|
|
}
|
|
}
|
|
dynamic "autoscaling_config" {
|
|
for_each = var.dataproc_config.cluster_config.autoscaling_config == null ? [] : [""]
|
|
content {
|
|
policy_uri = var.dataproc_config.cluster_config.autoscaling_config.value.policy_uri
|
|
}
|
|
}
|
|
dynamic "initialization_action" {
|
|
for_each = var.dataproc_config.cluster_config.initialization_action == null ? [] : [""]
|
|
content {
|
|
script = var.dataproc_config.cluster_config.initialization_action.value.script
|
|
timeout_sec = var.dataproc_config.cluster_config.initialization_action.value.timeout_sec
|
|
}
|
|
}
|
|
dynamic "encryption_config" {
|
|
for_each = var.dataproc_config.cluster_config.encryption_config == null ? [] : [""]
|
|
content {
|
|
kms_key_name = var.dataproc_config.cluster_config.encryption_config.value.kms_key_name
|
|
}
|
|
}
|
|
dynamic "dataproc_metric_config" {
|
|
for_each = var.dataproc_config.cluster_config.dataproc_metric_config == null ? [] : [""]
|
|
content {
|
|
dynamic "metrics" {
|
|
for_each = var.dataproc_config.cluster_config.dataproc_metric_config.metrics == null ? [] : [""]
|
|
content {
|
|
metric_source = var.dataproc_config.cluster_config.dataproc_metric_config.metrics.metric_source
|
|
metric_overrides = var.dataproc_config.cluster_config.dataproc_metric_config.metrics.metric_overrides
|
|
}
|
|
}
|
|
}
|
|
}
|
|
dynamic "lifecycle_config" {
|
|
for_each = var.dataproc_config.cluster_config.lifecycle_config == null ? [] : [""]
|
|
content {
|
|
idle_delete_ttl = var.dataproc_config.cluster_config.lifecycle_config.idle_delete_ttl
|
|
auto_delete_time = var.dataproc_config.cluster_config.lifecycle_config.auto_delete_time
|
|
}
|
|
}
|
|
dynamic "endpoint_config" {
|
|
for_each = var.dataproc_config.cluster_config.endpoint_config == null ? [] : [""]
|
|
content {
|
|
enable_http_port_access = var.dataproc_config.cluster_config.endpoint_config.enable_http_port_access
|
|
}
|
|
}
|
|
dynamic "metastore_config" {
|
|
for_each = var.dataproc_config.cluster_config.metastore_config == null ? [] : [""]
|
|
content {
|
|
dataproc_metastore_service = var.dataproc_config.cluster_config.metastore_config.dataproc_metastore_service
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
dynamic "virtual_cluster_config" {
|
|
for_each = var.dataproc_config.virtual_cluster_config == null ? [] : [""]
|
|
content {
|
|
dynamic "auxiliary_services_config" {
|
|
for_each = var.dataproc_config.virtual_cluster_config.auxiliary_services_config == null ? [] : [""]
|
|
content {
|
|
dynamic "metastore_config" {
|
|
for_each = var.dataproc_config.virtual_cluster_config.auxiliary_services_config.metastore_config == null ? [] : [""]
|
|
content {
|
|
dataproc_metastore_service = var.dataproc_config.virtual_cluster_config.auxiliary_services_config.metastore_config.dataproc_metastore_service
|
|
}
|
|
}
|
|
dynamic "spark_history_server_config" {
|
|
for_each = var.dataproc_config.virtual_cluster_config.auxiliary_services_config.spark_history_server_config == null ? [] : [""]
|
|
content {
|
|
dataproc_cluster = var.dataproc_config.virtual_cluster_config.auxiliary_services_config.spark_history_server_config.dataproc_cluster
|
|
}
|
|
}
|
|
}
|
|
}
|
|
dynamic "kubernetes_cluster_config" {
|
|
for_each = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config == null ? [] : [""]
|
|
content {
|
|
kubernetes_namespace = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.kubernetes_namespace
|
|
dynamic "kubernetes_software_config" {
|
|
for_each = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.kubernetes_software_config == null ? [] : [""]
|
|
content {
|
|
component_version = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.kubernetes_software_config.value.component_version
|
|
properties = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.kubernetes_software_config.value.properties
|
|
}
|
|
}
|
|
|
|
dynamic "gke_cluster_config" {
|
|
for_each = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config == null ? [] : [""]
|
|
content {
|
|
gke_cluster_target = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.gke_cluster_target
|
|
dynamic "node_pool_target" {
|
|
for_each = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.node_pool_target == null ? [] : [""]
|
|
content {
|
|
node_pool = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.node_pool_target.node_pool
|
|
roles = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.node_pool_target.roles
|
|
dynamic "node_pool_config" {
|
|
for_each = try(var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.node_pool_config == null ? [] : [""], [])
|
|
content {
|
|
dynamic "autoscaling" {
|
|
for_each = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.node_pool_config.autoscaling == null ? [] : [""]
|
|
content {
|
|
min_node_count = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.node_pool_config.autoscaling.min_node_count
|
|
max_node_count = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.node_pool_config.autoscaling.max_node_count
|
|
}
|
|
}
|
|
dynamic "config" {
|
|
for_each = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.node_pool_config.config == null ? [] : [""]
|
|
content {
|
|
machine_type = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.node_pool_config.config.machine_type
|
|
local_ssd_count = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.node_pool_config.config.local_ssd_count
|
|
preemptible = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.node_pool_config.config.preemptible
|
|
min_cpu_platform = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.node_pool_config.config.min_cpu_platform
|
|
spot = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.node_pool_config.config.spot
|
|
}
|
|
}
|
|
locations = var.dataproc_config.virtual_cluster_config.kubernetes_cluster_config.gke_cluster_config.node_pool_config.locations
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
lifecycle {
|
|
ignore_changes = [
|
|
# Some scopes are assigned in addition to the one configured
|
|
# https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/service-accounts#dataproc_vm_access_scopes
|
|
cluster_config[0].gce_cluster_config[0].service_account_scopes,
|
|
]
|
|
}
|
|
}
|