如何忽略块中属性的更改

44

我在Azure中部署Web应用程序,希望忽略site_config块内的scm_type属性更改。

在部署期间,将scm_type属性设置为None,稍后在Azure门户中更改它。

我的当前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_type 的更改,但它试图将其恢复为None。来自terraform plan输出的一行:

~ scm_type = "BitbucketGit" -> "None"


1
值得注意的是,对于0.12版本,这方面存在一些错误:https://github.com/hashicorp/terraform/issues/21433 和 https://github.com/hashicorp/terraform/issues/21421(应该在https://github.com/hashicorp/terraform/pull/21788中修复)。 - Andy Shinn
4个回答

46

1
FYI:当使用v.1.1.5时,此格式目前使terraform忽略整个site_config块。 - M_dk

16

6
我惊讶地发现你的语法是正确的,因为它似乎没有记录在任何地方!但对于未来的问题解决者而言,值得一提的是 - 资源定义中的块被称为列表(假定支持同一块出现多次的情况),因此需要这种数字索引语法来引用嵌套键:block_name[0].nested_key - mltsy
2
上面链接的评论中的语法对我不起作用,但是@mltsy的评论中的语法可以。这里有一个Github问题,也展示了这种语法的使用。 - Chris McKeown
建议使用的 site_config["scm_type"] 语法会导致 Terraform 在版本 1.1.5 中忽略整个 site_config 块。它确实会忽略这些设置,但你也将忽略像 ip_restrictions 这样的设置,因此请谨慎使用。 - M_dk
生命周期 { ignore_changes = [ site_config[0].scm_type, ] } - M_dk
有人可以对这个问题发表评论吗?https://dev59.com/5lNjsIgBPY-HTNNjW3E8#76288125 - Sudhir
显示剩余3条评论

2

0
似乎语法发生了变化。M_dk确认在terraform 1.1.5中site_config["scm_type"]不起作用。而且在版本1.3.9中也是一样的。更糟糕的是它不会抛出错误。
它完全忽略了site_config,这实际上阻止了对站点的更改。
对于1.1.5及以上版本,正确的语法是:
lifecycle {
    ignore_changes = [
        site_config[0].scm_type
    ]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接