Terraform - 向ignore_changes添加异常

标签 terraform terraform-provider-azure

我目前有一个模块,其中包含一个具有许多可配置属性的 block

resource "example_resource" "instance1" {
    
     block1 {
          property1 = var.variable1      # Should generate a diff if changed
          property2 = var.variable2      # Ignore
          property3 = var.variable3      # Ignore
          ....
          ....
          propertyN = var.variableN      # Ignore
     }
    
     lifecycle {
        ignore_changes = [
            block1[0].property2, block1[0].property3, ... ,block1[0].propertyN
        ]
     }
}

生成资源后,block1 中的许多属性可能会因与用户的交互而发生变化。我想在运行 terraform plan 时忽略此类更改,除了一些异常(exception)情况,如果将来发生更改,这些异常(exception)情况应该会产生差异。 (例如,在上述资源中,如果 property1 发生更改,它应该生成差异,但不会为其他资源生成差异)

可以使用lifecycle block 中的ignore_changes来忽略此类更改。但似乎要做上面的事情。添加整个 block1 参数将导致其中的所有更改被忽略,或者我们必须将 block 内所有被忽略的属性一一添加到 ignore_changes block 中,就像我一样示例中已提到。

手动执行此类操作会使维护变得更加困难,因为在向 block 添加/删除新属性时,您必须不断添加/删除新属性。那么是否可以配置 ignore_changes block 来忽略所有更改并专门添加所需的异常?

附注

我不认为这个问题特定于某个资源,但我试图实现这个概念的资源是 Azure App Service资源,特别是其中的 site_config block 。

最佳答案

我能想到的最简单的方法是列出该 block 中可能的所有单个属性,除了那些您不想忽略更改的属性。这仍然是乏味且丑陋的。

这里有一个更聪明的(未经测试的)方法可供尝试

#get the existing resource
data "example_resource" "instance1" {
}

resource "example_resource" "instance1" {

  block1 {
      ...
  }

  lifecycle {
    #transform the list of properties so the values all start with block[0].
    ignore_changes = [for prop in local.ignore_change_props : "block[0].${prop}"] 
  }
}

locals {
  #these properties we want to exclude from ignore_changes
  change_exceptions = ["property1", "property10"],

  #get all the properties from the data block in a map, then remove properties to be excluded
  ignore_change_props = setsubtract(keys(data.example_resource.instance1.block1), local.change_exceptions)
}

关于Terraform - 向ignore_changes添加异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69241068/

相关文章:

logging - 在 Terraform 中创建 google_logging_project_sink 不会将事件推送到 Pub/Sub

amazon-web-services - Terraform 导入 aws_cloudwatch_log_stream

azure - 如何使用 yaml 文件中的标签 - terraform

azure - Terraform Azure 函数应用程序 - 未正确启动函数的简单示例

azure - 使用 terraform 创建新的 azure 资源组时出错

Azure 警报 - 使用 API 创建标准 Web 测试而不检查 http 状态代码?

Terraform 在使用 -var 或 -var-file 时忽略 terraform.tfvars 文件

azure - 使用 Terraform 为虚拟 secret 码创建 Key Vault secret

azure - 通过 terraform 为 azure 存储设置 cors 规则

azure - 如何设置虚拟机镜像详细信息,例如发行商、报价、SKU 和版本