Terraform如何仅当delete_retention_policy_days变量大于0时启用对应配置块
实现方案
使用Terraform原生的dynamic动态块配合条件判断即可实现,是目前最简洁的实现方式。
你可以将原有资源中的blob_properties块修改为如下写法:
resource "azurerm_storage_account" "example2" { name = var.azurerm_storage_account_name resource_group_name = azurerm_resource_group.parameters.name location = azurerm_resource_group.parameters.location account_tier = var.azurerm_storage_account_account_tier account_replication_type = var.azurerm_storage_account_account_replication_type allow_blob_public_access = var.azurerm_storage_account_allow_blob_public_access blob_properties { # 动态控制是否生成删除保留策略块 dynamic "delete_retention_policy" { for_each = var.delete_retention_policy_days > 0 ? [1] : [] content { days = var.delete_retention_policy_days } } versioning_enabled = true change_feed_enabled = true } }
逻辑说明
- 当
var.delete_retention_policy_days取值大于0时,for_each会得到长度为1的列表,渲染1个完整的delete_retention_policy块,正常启用保留策略 - 当
var.delete_retention_policy_days取值为0时,for_each得到空列表,不会生成该块,即不启用删除保留策略
可选优化:增加变量校验
可以在变量定义时增加校验规则,避免传入不符合Azure规范的无效值(Azure存储删除保留策略合法天数范围为1~365):
variable "delete_retention_policy_days" { type = number description = "存储账户Blob删除保留策略天数,设置为0表示不启用该策略" default = 0 validation { condition = var.delete_retention_policy_days >= 0 && var.delete_retention_policy_days <= 365 error_message = "删除保留策略天数必须介于0到365之间,设置为0表示不启用该策略。" } }
内容的提问来源于stack exchange,提问作者user3622142
相关产品推荐
相关产品推荐

