Terraform 如何忽略块中属性的更改

Terraform 如何忽略块中属性的更改,terraform,terraform-provider-azure,terraform0.12+,Terraform,Terraform Provider Azure,Terraform0.12+,我正在Azure中部署web应用,我想忽略对site_config块中scm_type属性的更改 在部署期间,scm_type属性设置为None,稍后我们将在Azure Portal中将其更改为其他属性 我当前的TF代码如下所示: resource "azurerm_app_service" "web_app" { count = length(var.app_names) name = var.app_names[count.i

我正在Azure中部署web应用,我想忽略对site_config块中scm_type属性的更改

在部署期间,scm_type属性设置为None,稍后我们将在Azure Portal中将其更改为其他属性

我当前的TF代码如下所示:

resource "azurerm_app_service" "web_app" {
  count               = length(var.app_names)
  name                = var.app_names[count.index]
  location            = data.azurerm_resource_group.app_resource_group.location
  resource_group_name = data.azurerm_resource_group.app_resource_group.name
  app_service_plan_id = azurerm_app_service_plan.app_plan.id
  tags                = var.tags
  app_settings        = var.app_settings[count.index]

  site_config {
    always_on                 = true
    websockets_enabled        = var.websockets_enabled[count.index]
    use_32_bit_worker_process = var.use_32_bit_worker_process
    scm_type                  = "None"
  }

  lifecycle {
    ignore_changes = [
      site_config.0.scm_type
    ]
  }
}
我希望terraform plan在基础设施更新期间忽略scm_类型的更改,但它试图将其恢复为无。来自地形平面图的线输出:

~scm\u type=“BitbucketGit”->“无”

这是一个地形错误:
我的语法是正确的,在版本0.12.4中它再次工作。

我认为您需要在忽略更改中修复语法。它应该是这样的,或者至少从我工作的情况来看是这样的

lifecycle {
    ignore_changes = [
        site_config["scm_type"],
    ]
}
以下是具有语法的文档


值得注意的是,0.12:and(应该在中修复)中存在一些错误。我惊讶地发现您的语法是正确的,因为它似乎在任何地方都没有文档记录!但FWIW对未来的答案搜索者来说——显然,资源定义中的块被引用为列表(可能是为了支持同一块多次出现的情况),因此确实需要这种数字索引语法来引用嵌套键:
block_name[0]。嵌套_键
,上面链接的评论中的语法对我不起作用,但@mltsy的评论中的语法对我起作用。下面是一个示例,它也显示了所使用的语法。