【问题标题】:Avoid creating new azure key vault secret version if one already exists via terraform如果已通过 terraform 存在,请避免创建新的 azure key vault 机密版本
【发布时间】:2021-09-21 23:10:55
【问题描述】:

terraform 代码在第一次申请期间成功创建了一个 azure key vault secret,但在连续申请时,由于过期时间的变化,它仍在尝试更新 secret。

resource "azurerm_key_vault_secret" "supportedTen" {
  name         = "supportedTen"
  value        = var.supportedTen
  key_vault_id = azurerm_key_vault.vault.id
  expiration_date = timeadd(timestamp(), "2160h")
  depends_on = [azurerm_key_vault_access_policy.vault]
}

2nd terraform apply onwards-

  # azurerm_key_vault_secret.supportedTenants will be updated in-place
  ~ resource "azurerm_key_vault_secret" "supportedTen" {
      ~ expiration_date = "2021-10-10T19:45:05Z" -> (known after apply)
        id              = "https://uri/secrets/supportedTen/abcde-secret-version"
        key_vault_id    = "/subscriptions/subscriptionid/resourceGroups/resourcegroup--id/providers/Microsoft.KeyVault/vaults/test-kv-dev"
        name            = "supportedTenants"
        tags            = {}
        value           = (sensitive value)
        version         = "abcde-secret-version"
    }

如果过期时间未过期或秘密版本值不为空(“”),我有什么办法可以设置条件,不要更新 azure key vault 秘密资源?

【问题讨论】:

  • 这真的比其他任何事情都更像是 Azure 提供程序的一个错误。

标签: azure-devops terraform terraform-provider-azure terraform0.12+


【解决方案1】:

您可以使用lifecycle meta-argument 忽略到期日期。

resource "azurerm_key_vault_secret" "supportedTen" {
  name         = "supportedTen"
  value        = var.supportedTen
  key_vault_id = azurerm_key_vault.vault.id
  expiration_date = timeadd(timestamp(), "2160h")
  depends_on = [azurerm_key_vault_access_policy.vault]
}

2nd terraform apply onwards-

  # azurerm_key_vault_secret.supportedTenants will be updated in-place
  ~ resource "azurerm_key_vault_secret" "supportedTen" {
      ~ expiration_date = "2021-10-10T19:45:05Z" -> (known after apply)
        id              = "https://uri/secrets/supportedTen/abcde-secret-version"
        key_vault_id    = "/subscriptions/subscriptionid/resourceGroups/resourcegroup--id/providers/Microsoft.KeyVault/vaults/test-kv-dev"
        name            = "supportedTenants"
        tags            = {}
        value           = (sensitive value)
        version         = "abcde-secret-version"
        lifecycle {
           ignore_changes = [
               not_before_date,
               expiration_date
           ]
        }
    }

【讨论】:

    【解决方案2】:

    当您想要实际更新密钥保管库机密的到期日期时,使用生命周期元参数和到期日期可能会导致问题。

    更好的解决方案是使用 Terraform Time 提供程序的 time_static() 函数而不是 timestamp(),因为时间随后存储在 Terraform 状态中。

    resource "time_static" "example" {}
    
    output "current_time" {
      value = time_static.example.rfc3339
    }
    

    【讨论】:

      猜你喜欢
      • 2017-04-24
      • 2023-04-05
      • 2019-05-31
      • 1970-01-01
      • 2022-08-09
      • 2021-04-08
      • 1970-01-01
      • 2020-12-19
      • 2021-12-27
      相关资源
      最近更新 更多