main.tf (140 lines of code) (raw):

/** * Copyright 2021 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. */ data "google_compute_network" "vpc_network" { count = var.storage_pool.create_pool ? 1 : 0 name = var.storage_pool.network_name project = var.storage_pool.network_project_id == null ? var.project_id : var.storage_pool.network_project_id } resource "google_netapp_storage_pool" "storage_pool" { count = var.storage_pool.create_pool ? 1 : 0 project = var.project_id location = var.location name = var.storage_pool.name service_level = var.storage_pool.service_level capacity_gib = var.storage_pool.size network = data.google_compute_network.vpc_network[0].id description = lookup(var.storage_pool, "description", null) labels = merge(var.common_labels, var.storage_pool.labels) ldap_enabled = var.storage_pool.ldap_enabled active_directory = lookup(var.storage_pool, "ad_id", null) kms_config = lookup(var.storage_pool, "kms_config", null) zone = lookup(var.storage_pool, "zone", null) replica_zone = lookup(var.storage_pool, "replica_zone", null) allow_auto_tiering = lookup(var.storage_pool, "allow_auto_tiering", null) } resource "google_netapp_volume" "storage_volumes" { for_each = { for x in var.storage_volumes : x.name => x } project = var.project_id location = var.location name = each.key capacity_gib = each.value.size share_name = each.value.share_name storage_pool = var.storage_pool.create_pool ? google_netapp_storage_pool.storage_pool[0].name : var.storage_pool.name protocols = each.value.protocols labels = merge(var.common_labels, each.value.labels) smb_settings = lookup(each.value, "smb_settings", null) unix_permissions = lookup(each.value, "unix_permissions", null) description = lookup(each.value, "description", null) snapshot_directory = lookup(each.value, "snapshot_directory", null) security_style = lookup(each.value, "security_style", null) kerberos_enabled = lookup(each.value, "kerberos_enabled", null) restricted_actions = lookup(each.value, "restricted_actions", null) deletion_policy = lookup(each.value, "deletion_policy", null) multiple_endpoints = lookup(each.value, "multiple_endpoints", null) large_capacity = lookup(each.value, "large_capacity", null) dynamic "backup_config" { for_each = each.value.backup_policies == null ? [] : ["backup_config"] content { backup_policies = each.value.backup_policies backup_vault = each.value.backup_vault scheduled_backup_enabled = each.value.scheduled_backup_enabled } } dynamic "snapshot_policy" { for_each = each.value.snapshot_policy != null ? ["volume_snapshot_policy"] : [] content { enabled = lookup(each.value.snapshot_policy, "enabled", false) dynamic "hourly_schedule" { for_each = lookup(each.value.snapshot_policy, "hourly_schedule", null) == null ? [] : ["hourly_schedule"] content { snapshots_to_keep = lookup(each.value.snapshot_policy.hourly_schedule, "snapshots_to_keep") minute = lookup(each.value.snapshot_policy.hourly_schedule, "minute") } } dynamic "daily_schedule" { for_each = lookup(each.value.snapshot_policy, "daily_schedule", null) == null ? [] : ["daily_schedule"] content { snapshots_to_keep = lookup(each.value.snapshot_policy.daily_schedule, "snapshots_to_keep") minute = lookup(each.value.snapshot_policy.daily_schedule, "minute") hour = lookup(each.value.snapshot_policy.daily_schedule, "hour") } } dynamic "weekly_schedule" { for_each = lookup(each.value.snapshot_policy, "weekly_schedule", null) == null ? [] : ["weekly_schedule"] content { snapshots_to_keep = lookup(each.value.snapshot_policy.weekly_schedule, "snapshots_to_keep") minute = lookup(each.value.snapshot_policy.weekly_schedule, "minute") hour = lookup(each.value.snapshot_policy.weekly_schedule, "hour") day = lookup(each.value.snapshot_policy.weekly_schedule, "day") } } dynamic "monthly_schedule" { for_each = lookup(each.value.snapshot_policy, "monthly_schedule", null) == null ? [] : ["monthly_schedule"] content { snapshots_to_keep = lookup(each.value.snapshot_policy.monthly_schedule, "snapshots_to_keep") minute = lookup(each.value.snapshot_policy.monthly_schedule, "minute") hour = lookup(each.value.snapshot_policy.monthly_schedule, "hour") days_of_month = lookup(each.value.snapshot_policy.monthly_schedule, "days_of_month") } } } } dynamic "export_policy" { for_each = each.value.export_policy_rules == null ? [] : ["export_policy_rules"] content { dynamic "rules" { for_each = each.value.export_policy_rules == null ? {} : each.value.export_policy_rules content { allowed_clients = lookup(rules.value, "allowed_clients") has_root_access = lookup(rules.value, "has_root_access") access_type = lookup(rules.value, "access_type") nfsv3 = lookup(rules.value, "nfsv3") nfsv4 = lookup(rules.value, "nfsv4") kerberos5_read_only = lookup(rules.value, "kerberos5_read_only") kerberos5_read_write = lookup(rules.value, "kerberos5_read_write") kerberos5i_read_only = lookup(rules.value, "kerberos5i_read_only") kerberos5i_read_write = lookup(rules.value, "kerberos5i_read_write") kerberos5p_read_only = lookup(rules.value, "kerberos5p_read_only") kerberos5p_read_write = lookup(rules.value, "kerberos5p_read_write") } } } } dynamic "restore_parameters" { for_each = each.value.restore_parameters == null ? [] : ["restore_parameters"] content { source_snapshot = lookup(each.value.restore_parameters, "source_snapshot") source_backup = lookup(each.value.restore_parameters, "source_backup") } } dynamic "tiering_policy" { for_each = each.value.tiering_policy == null ? [] : ["tiering_policy"] content { cooling_threshold_days = lookup(each.value.restore_parameters, "cooling_threshold_days") tier_action = lookup(each.value.restore_parameters, "tier_action") } } }